Archivos estáticos en S3 con Django
September 05, 2017
Archivos estáticos en S3 con Django
Debo confesar que tenía una deuda técnica con el blog desde hace un par de meses por no haber traducido oportunamente este post. Afortunadamente aún estamos a tiempo.
Como primera instancia necesitaremos crear un Bucket en S3
Segundo vamos a crear un usuario en IAM, recordemos que necesitaremos un API KEY y un API SECRET, por tanto debemos crear un acceso programático
.
Asegúrate de guardar estos valores en un lugar donde no los pierdas.
Una vez creado tu usuario, obtén el ARN, que debe verse algo como
arn:aws:iam::123456789012:user/nombredeusuario
Ahora con este ARN en mente debemos editar la política del bucket S3 con algo similar a esto.
Recuerda que debes cambiar los valores entre <> y que los caracteres < y > NO VAN
{
"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>"
]
}
}
]
}
Ahora necesitaremos instalar boto y storages, las librerías que harán la magia de guardado en S3:
pip install django-storages boto
Añadimos storages
a nuestro INSTALLED_APPS
en settings.py
INSTALLED_APPS = [
...
'storages',
]
Y al final de nuestro archivo de configuración settings.py
añadimos las siguientes líneas reemplazando con los valores apropiados
AWS_ACCESS_KEY_ID = '<ACCESS_KEY>'
AWS_SECRET_ACCESS_KEY = '<SECRET_KEY>'
AWS_STORAGE_BUCKET_NAME = '<NOMBRE_BUCKET>'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Y ya podremos ejecutar con traquilidad
python manage.py collectstatic