참고 : 배프의 오지랍 파이썬 웹 프로그래밍
미디어, 정적파일을 공유할 수 있도록 아마존 S3(simple storage service)를 설정해봅시다~! s3는 버킷이란 단위를 사용한다! (RDS=인스턴스)
aws 서비스 선택에서 s3를 찾아 클릭하면 버킷만들기 버튼을 찾아 버킷 만들기를 진행한다.
버킷이름만 설정하고 다음 진행
특별히 설정 할 것 없음! 다음 진행
일반적으로 모든 퍼블릭 엑세스 차단 사용.
버킷을 통해 static파일에 대한 호스팅을 진행하는 경우에는 모든 퍼블릭 엑세스 차단 말고 다른 옵션을 선택해야 한다.
내용 훓어보기 후 버킷만들기 진행
생성한 버킷을 장고에서 사용하기 위해 IAM에서 사용자 추가와 권한설정을 해야한다...
[서비스] - [보안, 자격 증명 및 규정 준수] - [IAM] 선택
사이드 메뉴에서 [사용자] - [사용자 추가] 를 선택
*********
사용자 추가를 완료하면 .csv를 다운로드 버튼이 있다. 다음 사용을 위해 나는 받아 두겠다.
pip install boto3
pip install django-storages
장고에서 s3를 사용하기 위한 모듈 2개를 설치해 주자.
django-storages를 통해 boto3를 사용한다.
S3 설정을 위한 변수를 작성한다. boto3 모듈을 사용할때 필요한 변수!
# S3 설정을 위한 변수
# AWS_xxx 의 변수들은 aws-S3, boto3 모듈을 위한 변수들이다.
# 엑세스 키와 시크릿 키는 다른 파일로 작성, 임포트하여 사용
AWS_ACCESS_KEY_ID = MY_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY = MY_AWS_SECRET_ACCESS_KEY
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'beap-test-shop'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (
AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
python manage.py collectstatic
명령어를 통해 정적파일 모으기 작업 진행
# config/settings.py
# 미디어 파일을 위한 스토리지 설정
DEFAULT_FILE_STORAGE = 'config.asset_storage.MediaStorage'
# INSTALLED_APPS에 starages 앱 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storages', # s3 업로드를 위해 storages를 apps 에 추가!
]
# config/asset_starage.py
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = 'media'
file_overwrite = False
여기까지 진행했다면, 업로드 하는 파일은 모드 s3로!
모두에게 액세스 권할을 오픈할것인지, 임의 사용자에게는 접근 권한을 제한할 것인지 설정
위 이미지를 통해 보듯 총 5가지 옵션이 있다.
액세스 제어 목록(ACL: access control list) 버킷이나 객체에 대해 요청자의 권한 허용 범위를 어디까지 할것인지 설정.
여기서 요청자는 일반 퍼블릭한 사용자가 될수 있으며, 계정의 owner, resource group, 특정 사용자가 될 수 있다.
모든 퍼블릭 액세스 차단 을 선택했다면 액세스 제어 목록 설정 한다해도 소용없음!
[s3 권할 설정] - [버킷 정책] - [정책 생성기]