API 서버에서 이미지 서버를 따로 두고 싶어서 생각을 하던 중에 AWS S3 클라우드 스토리지를 이미지 서버로 구축하고 연동하여 사용하는 방법에 대하여 심플하게 적어 보도록 하겠다
환경
서버 운영체제 - linux(AWS EC2)
개발 언어 - python
프레임워크 - Django
이미지 서버 - AWS S3
이 글을 읽는 독자
Django를 사용하여 API를 만들 수 있는 사람
부적합
Django를 사용하여 API를 만들 줄 모르며, 모델, 뷰, 등 각 모듈이 어떠한 역할을 하는지 이해가 아직 덜 된 사람
AWS 회원가입 후 S3 버킷 생성
아마존 AWS에서 서비스 목록에서 스토리지 카테고리에 S3 클릭
버킷 만들기 버튼 클릭
버킷 이름 작성하고 다음 클릭(버킷 이름은 중복되지 않게끔 고유하게 작성)
속성 설정 없이 다음 클릭
모든 퍼블릭 엑세스 차단 체크를 풀고 이미지와 같이 체크 한 뒤에 다음으로 넘어간다
버킷 만들기 버튼을 클릭하여 버킷을 생성
S3 메인 페이지에 버킷 리스트를 보게 되면 버킷이 추가 된 것을 볼 수 있다
IAM 설정하기
아마존은 보안 정책이 강해서 어떤 기능이던지 개별적으로 권한을 부여하여 사용 할 수 있다
S3에 대한 권한을 만들어 보자
서비스 목록을 클릭한 뒤 IAM 선택
좌측의 메뉴바에서 사용자 선택을 하면 해당 창이 뜨게 되는데 여기서 사용자 추가 버튼을 클릭
사용자 이름을 적고 액세스 유형에서 프로그래밍 방식 엑세스를 클릭 한 뒤에 다음 권한으로 넘어간다
그룹 생성 클릭
그룹 이름을 적고 정책 필터에 s3를 적으면 AmazonS3FullAccess가 나오게 되는데 해당 정책을 체크 한 뒤 그룹 생성을 눌러준다
그룹에 사용자를 추가하고 다음으로 넘어간다
태그 입력 없이 다음으로 넘어가 준다
설정들을 검토 할 수 있는 창이 나오는데 확인하고 사용자 만들기를 눌러 생성해 준다
액세스 키는 다시 확인 할 수 없으니 csv 다운로드 버튼을 클릭하여 파일을 다운
이제 AWS설정은 끝났고 장고서버에서 연동을 시켜보기로 하겠다
Django에 S3 연동
boto3를 인스톨 해준다
boto3는 python용 AWS SDK이다.
$piip install boto3
django-storage는 장고에서 다양한 저장소를 사용할 수 있게 해주는 모듈이다
$pip install django-storages
restframework를 사용할 것이기 때문에 restframework도 안 돼 있다면 설치 해 준다
$pip install pip3 install djangorestframework
settings.py에 해당 코드 추가
INSTALLED_APPS = [
...
...
...
'storages',
'rest_framework',
]
###########################AWS
AWS_ACCESS_KEY_ID = 'Access key ID 입력' # .csv 파일에 있는 내용을 입력 Access key ID
AWS_SECRET_ACCESS_KEY = 'Secret acess Key 입력' # .csv 파일에 있는 내용을 입력 Secret access key
AWS_REGION = 'ap-northeast-2'
###S3 Storages
AWS_STORAGE_BUCKET_NAME = 'lee-teset-bucket' # 설정한 버킷 이름
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_ROOT = os.path.join(BASE_DIR, 'path/to/store/my/files/')
모델을 만들고
$python manage.py makemigrations 와
$python manage.py migrate로 디비에 모델을 적용 시켜준다
시리얼라이즈를 작성하고
뷰를 작성한 뒤
url을 연결하면 끝이다 이제 한 번 테스트를 해 보겠다
포스트맨에서 테스트를 해보겠다
form-data에 담아 리퀘스트를 보내면
해당 버킷에 이미지 파일이 잘 들어가는 것을 볼 수 있다
끄읕~~~~
취업 중비중인 초보 개발자 입니다.
예전에 했던 것들을 다시 하려고 봤을 때 기억이 가물가물하거나 기억이 나지 않을 때가 많아 앞으로는 조금씩이라도 간단 간단하게 적어보려고 합니다
++++++++++++++++++++++++++++++++++++++++++++++++++
imageField 필드를 사용하고 싶으면
Pillow를 인스톨 해주면 된다
$pip install Pillow
'개발 > django' 카테고리의 다른 글
[Django] ASGI란? (0) | 2020.04.02 |
---|---|
[Django] 장고 시작시 생성되는 파일들 (0) | 2020.04.02 |
[python, Django] json dumps datetime 오류 (0) | 2020.01.31 |
[Django]장고 테스트 서버 https 설정 (0) | 2020.01.16 |