Almacene assets estáticos de Django con Amazon S3

DJANGO NOV 20 ARTICULO NO TEXT

Para algunos proyectos, servimos muchas imágenes, videos y documentos. Esto puede sobrecargar su sitio y hacerlo más lento porque está solicitando demasiados recursos y procesos al mismo tiempo. Debido a esta situación, es una buena práctica almacenarlos en un lugar seguro como Amazon S3.

¿Qué es Amazon S3?

“Amazon S3 tiene una interfaz de servicios web simple que puede usar para almacenar y recuperar cualquier cantidad de datos, en cualquier momento, desde cualquier lugar de la web. Le da a cualquier desarrollador acceso a la misma infraestructura de almacenamiento de datos altamente escalable, confiable, rápida y económica que Amazon utiliza para ejecutar su red global de sitios web.”

¿Qué dependencias necesitaremos?

Boto3

Según su documentación, “Boto es el SDK de Amazon Web Services (AWS) para Python. Permite a los desarrolladores de Python crear, configurar y administrar servicios de AWS, como EC2 y S3. Boto proporciona una API orientada a objetos fácil de usar, así como un acceso de bajo nivel a los servicios de AWS «.

django-storages

Es un proyecto que proporciona una variedad de backends de almacenamiento en una sola biblioteca. Con esta biblioteca, solo necesitamos establecer las variables de configuración y luego la biblioteca hará el trabajo duro por nosotros, facilitando el uso del almacenamiento externo.

Configure Amazon s3

Con una cuenta de AWS válida, cree un usuario que tenga los permisos para acceder a nuestros assets:

Encuentre el link IAM:

IAM: Identity and Access Management (IAM) le permite administrar el acceso a los servicios y recursos de AWS de forma segura

Cree el usuario con acceso programático:

Cree el grupo con los permisos correctos:

Escriba el nombre del grupo y seleccione Amazons3FullAccess, luego cree el grupo:

Guarde los datos para configuración más adelante:

Ahora vamos a crear el bucket.

Bucket: es un recurso de almacenamiento en la nube público.


Después de terminar la creación, verá el bucket a continuación.

Ahora configuremos el proyecto Django:

Habilite su ambiente e instale:

pip install boto3
pip install django-storages

Luego agregue almacenamiento en su configuración:

INSTALLED_APPS = (
    ...
    'storages',
    ...
)

Configure assets estáticos, para obtener más atributos de configuración, consulte el sitio oficial:

AWS_ACCESS_KEY_ID = 'AKXXXXXXXXXOOAHL'
AWS_SECRET_ACCESS_KEY = 'qdnknt66ZsdrR/123WTB//+DeiHfEt54'
AWS_STORAGE_BUCKET_NAME = 'test-bucket'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
AWS_QUERYSTRING_AUTH = False
STATIC_URL = "https://s3.amazonaws.com/%s/static/" % AWS_STORAGE_BUCKET_NAME
AWS_DEFAULT_ACL = None 
STATICFILES_DIRS = [str(APPS_DIR.path("static"))]
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

Recuerde no dejar las claves en este archivo, debe usar variables de entorno.

Luego, debemos ejecutar collectstatic para almacenar nuestros assets actuales de forma remota:

python manage.py collectstatic

Ahora podemos ver la representación de archivos estáticos desde amazon s3:

Hay grandes beneficios al usar amazon s3 en lugar de usar nuestros propios servidores para asignar assets y medios. Amazon proporciona almacenamiento seguro, es fácil de usar y podemos usar todo el almacenamiento que queramos y siempre que estemos dispuestos a pagar. Es posible que ya no se preocupe por la disponibilidad de sus imágenes, y lo más importante es el bajo costo, solo paga por lo que usa.