Almacenar Archivos en S3 desde Django
November 30, 2017
Almacenar Archivos en S3 desde Django
A pesar de que ya existe un post similar, hago necesario escribir la versión condensada para alojar archivos en S3 usando Django.
TL;DR
- Cree un bucket en S3
- Cree un usuario IAM
- Pegue esto en la politica del bucket modificando los valores correspondientes
{
"Statement": [
{
"Sid":"PublicReadForGetBucketObjects",
"Effect":"Allow",
"Principal": {
"AWS": "*"
},
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::<BUCKET_NAME>/*"
]
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<BUCKET_NAME>",
"arn:aws:s3:::<BUCKET_NAME>/*"
],
"Principal": {
"AWS": [
"<USER_ARN>"
]
}
}
]
}
- Instale
pip install django-storages boto3
-
Cree un archivo en la carpeta del proyecto, al lado de
settings.py
llamadacustom_storages.py
y añadale este contenido:from django.conf import LazySettings from storages.backends.s3boto3 import S3Boto3Storage settings = LazySettings() class MediaStorage(S3Boto3Storage): location = "" bucket_name = settings.AWS_MEDIA_STORAGE_BUCKET_NAME access_key = settings.AWS_MEDIA_ACCESS_KEY_ID secret_key = settings.AWS_MEDIA_SECRET_ACCESS_KEY region_name = settings.AWS_MEDIA_S3_REGION_NAME custom_domain = settings.AWS_MEDIA_S3_CUSTOM_DOMAIN
1. Al final del archivo de `settings.py` incluya esto reemplazando por los valores correctos
AWS_MEDIA_STORAGE_BUCKET_NAME = '<BUCKET_NAME>'
AWS_MEDIA_S3_REGION_NAME = '<AWS_REGION>'
AWS_MEDIA_ACCESS_KEY_ID = '<SECRET_IAM_KEY_ID>'
AWS_MEDIA_SECRET_ACCESS_KEY = '<SECRET_IAM_ACCESS_ID>'
AWS_MEDIA_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS
DEFAULT_FILE_STORAGE = '<PROJECT_NAME>.custom_storages.MediaStorage'