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.
“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.”
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 «.
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.
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.
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.