파이썬으로 S3 버킷에 파일 업로드하기(boto3)

1 분 소요

Python으로 S3 버킷에 파일 업로드하기(boto3)

진행했었던 프로젝트를 관리하면서 아키텍처를 수정해보았다.

기존에는 유튜브에서 음악을 다운받으면, mp3 파일과 가수 이미지들을 로컬 폴더에 저장해두었으나, 이 방법은 좋지 않은 방법이기에 s3 버킷에 업로드하는 방식으로 하게되었다.

boto3 사용하기

pip install boto3 로 설치부터 해준다.

두 가지 방법으로 이미지를 s3 버킷에 업로드 해보겠다.

1. boto3.resource() 사용 - img 파일 업로드
import boto3
from botocore.client import Config

ACCESS_KEY_ID = '시크릿 키 아이디 입력' #s3 관련 권한을 가진 IAM계정 정보
ACCESS_SECRET_KEY = '시크릿 키 입력'
BUCKET_NAME = '버킷 이름 입력'

def handle_upload_img(f): # f = 파일명
    data = open('plist/static/plist/img/artist/'+f+'.jpg', 'rb')
    # '로컬의 해당파일경로'+ 파일명 + 확장자
    s3 = boto3.resource(
        's3',
        aws_access_key_id=ACCESS_KEY_ID,
        aws_secret_access_key=ACCESS_SECRET_KEY,
        config=Config(signature_version='s3v4')
    )
    s3.Bucket(BUCKET_NAME).put_object(
        Key=f, Body=data, ContentType='image/jpg')

위의 방식대로 s3 버킷에 업로드된 결과이다.

image

파일을 퍼블릭으로 설정해두면 객체 URL로 접속해서 이미지를 확인할 수 있다.

해당 url로 웹사이트에서 이미지를 확인하는 것이 가능하다.

업로드된 이미지를 자동으로 퍼블릭으로 설정하는 방법은 아래에 게시해두었다.

image

출처: 이미지는 멜론에서 나얼님 사진을 가져온 겁니다..

2. boto3.client() 사용 - mp3 파일, img 파일 업로드
import boto3

ACCESS_KEY_ID = '시크릿 키 아이디 입력' #s3 관련 권한을 가진 IAM계정 정보
ACCESS_SECRET_KEY = '시크릿 키 입력'
BUCKET_NAME = '버킷 이름 입력'

def handle_upload_mp3(f):
    s3_client = boto3.client('s3',
                            aws_access_key_id=ACCESS_KEY_ID,
                            aws_secret_access_key=ACCESS_SECRET_KEY)
    response = s3_client.upload_file(
        'plist/static/plist/audio/'+f+'.mp3', BUCKET_NAME, 'audio/'+f+'.mp3')

def handle_upload_img(f): # f = 파일명
	s3_client = boto3.client(
        		's3',
                aws_access_key_id=ACCESS_KEY_ID,
                aws_secret_access_key=ACCESS_SECRET_KEY
    		)
	response = s3_client.upload_file(
    'plist/static/plist/img/artist/'+f+'.jpg', BUCKET_NAME, 'img/'+f+'.jpg')
    # 로컬파일경로 + 파일명 + 파일종류, 버킷명, s3버킷의 원하는경로 + 파일명 + 파일종류

위의 방법으로 이미지가 성공적으로 업로드된 모습이다

client 방법을 사용하면 버킷에 폴더를 만들어서 그 안에 파일을 저장하기에 용이하다.

image

하지만 이 방식으로 업로드하게되면 url에서 이미지를 바로 보는 것이 아니라 url에 접속하게되면 아래와 같이 해당 이미지를 저장 할 수 있다고 확인할 수 있다.

image

S3 버킷 설정

업로드된 이미지 자동 퍼블릭으로 설정하기

버킷 선택 👉 권한 선택 👉 버킷 정책 편집선택

json으로 작성된 버킷 정책은 버킷에 저장된 객체에 대한 액세스 권한을 제공한다,

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StatementSid1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::0000000000000:user/{IAM user 이름}"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::{버킷이름}/*"
        },
        {
            "Sid": "StatementSid2",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{버킷이름}/*"
        }
    ]
}

업로드된 이미지와 mp3파일를 프로젝트에 반영한 모습

image

<-- 이미지, mp3 재생화면 html 관련 소스코드 -->
<img src="https://버킷url/.jpg" alt="">

<audio autoplay="autoplay" loop="loop" preload="auto" controls="controls">
	<source src="https://버킷url/.mp3">
</audio>

카테고리:

업데이트:

댓글남기기