[Flask] AWS S3에 파일 업로드하기

hukim·2020년 12월 5일
2

Flask

목록 보기
5/5

AWS S3의 버켓을 생성하는 과정은 생략

KEY 세팅

먼저 S3에 접근하기 위해서 AWS ACCESS KEY와 SECRET KEY, 버켓네임(BUCKET_NAME)을 설정파일에 작성해줍니다.

# config.py
...
AWS_ACCESS_KEY = "your access key"
AWS_SECRET_KEY = "your secret key"
BUCKET_NAME = "your bucket name"
...

S3 connection 설정 with boto3

그 다음 설정파일에서 받아온 값들로 s3에 connection을 할 텐데 boto3를 이용합니다.

pip install boto3
# connection.py
from config import AWS_ACCESS_KEY, AWS_SECRET_KEY

def s3_connection():
	s3 = boto3.client('s3',
    		aws_access_key_id = AWS_ACCESS_KEY,
            	aws_secret_access_key = AWS_SECRET_KEY)
    	return s3

S3에 업로드하기

이제 s3에 업로드 하기 위한 준비는 다했습니다.
파일을 업로드하기만 하면 되겠습니다.

먼저 위에서 만들었던 s3 커넥션을 이용해서 접속하고 put_object 메소드로 파일을 업로드합니다.

from connection import s3_connection
from config import BUCKET_NAME

s3 = s3_connection()
s3.put_object(
	Bucket = BUCKET_NAME,
    	Body = profile_image,
    	Key = s3_path,
    	ContentType = profile_image.content_type)

put_object()

  • Bucket : AWS S3 에서 만들었던 bucket name입니다.
  • Body : request에서 받아왔던 이미지 파일입니다. (업로드할 파일 객체)
  • Key : S3에 업로드할 파일의 경로입니다.
  • ContentType : 메타데이터 설정 ex) image/jpeg

S3에 접속해서 파일 확인

메타데이터 확인 및 편집

파일의 세부정보로 들어가서 밑으로 스크롤을 내리면 메타데이터를 확인할 수 있고 필요한 경우 수정할 수도 있습니다.

URL 정보 가져오기

파일(객체) URL 확인

파일을 클릭해서 세부정보로 들어가면 URL을 확인할 수 있습니다.

그러나 매번 파일의 URL을 S3에 들어가서 확인하기는 어렵습니다.

Flask 에서 URL 정보 가져오기

그래서 Flask안에서 image의 URL을 확인해봅니다.

location = s3.get_bucket_location(Bucket=BUKET_NAME)['LocationConstraint']
image_url = f'https://{BUCKET_NAME}.s3.{location}.amazonaws.com/{s3_path}'

먼저 location 정보를 가져오는데 location은 AWS가 전 세계에서 데이터 센터를 클러스터링하는 물리적 위치입니다. (리전)
처음 S3 서비스를 이용할 때 정한 리전 정보를 가져옵니다.

그 다음은 버켓이름.s3.로케이션.amazoneaws.com/파일경로의 순서대로 작성하면 그때 그때 확인하지 않고도 파일의 URL을 가져와서 사용할 수 있습니다.

0개의 댓글