Ahora hay 3 formas de hacerlo: a través de la Consola de AWS , a través de la línea de comandos o mediante la herramienta de línea de comandos s3cmd .
Instrucciones de la consola de AWS
Esta es ahora la solución recomendada. Es sencillo, pero puede llevar algún tiempo.
- Inicie sesión en la consola de administración de AWS
- Entra en el depósito S3
- Seleccionar todos los archivos por ruta
- Elija "Más" en el menú
- Seleccione "Cambiar metadatos"
- En el campo "Clave", seleccione "Cache-Control" del menú desplegable max-age = 604800 Ingrese (7 días) para Valor
- Presione el botón "Guardar"
( gracias a @biplob, por favor dale un poco de amor a continuación )
Solución de línea de comandos de AWS
Originalmente, cuando creé este depósito, las políticas no funcionaban, así que pensé cómo hacerlo usando aws-cli, y es bastante hábil. Al investigar, no pude encontrar ningún ejemplo en la naturaleza, así que pensé en publicar algunas de mis soluciones para ayudar a los necesitados.
NOTA: De forma predeterminada, aws-cli solo copia los metadatos actuales de un archivo, INCLUSO SI ESPECIFICAS NUEVOS METADATOS.
Para usar los metadatos que se especifican en la línea de comando, debe agregar la marca '--metadata-directive REPLACE'. A continuación se muestran algunos ejemplos.
Para un solo archivo
aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
Para un depósito completo (nota: bandera recursiva):
aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
Un pequeño problema que encontré, si solo desea aplicarlo a un tipo de archivo específico, debe excluir todos los archivos y luego incluir los que desee.
Solo jpgs y pngs:
aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public
Aquí hay algunos enlaces al manual si necesita más información:
Problemas conocidos:
"Unknown options: --metadata-directive, REPLACE"
esto puede ser causado por un awscli desactualizado - vea la respuesta de @ eliotRosewater a continuación
Herramienta S3cmd
S3cmd es una "herramienta de línea de comandos para administrar los servicios de Amazon S3 y CloudFront". Si bien esta solución requiere un git pull, podría ser una solución más simple y completa.
Para obtener instrucciones completas, consulte la publicación de @ ashishyadaveee11 a continuación
¡Espero eso ayude!
cp
Descarga y vuelve a cargar todo?Ahora, puede cambiar fácilmente desde la consola de AWS.
La ejecución lleva tiempo dependiendo de los archivos de su depósito. Vuelva a hacer desde el principio si cierra accidentalmente el navegador.
fuente
pasos
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(se le pedirán las dos claves; cópielas y péguelas desde su correo electrónico de confirmación o desde la página de su cuenta de Amazon. ¡Tenga cuidado al copiarlas! Son sensibles a mayúsculas y minúsculas y deben ingresarse con precisión o seguirá recibiendo firmas o similar. Recuerde agregars3:ListAllMyBuckets
permisos a las claves o obtendrá unAccessDenied
error al probar el acceso.)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
fuente
Si mi puntuación de reputación fuera> 50, solo comentaría. Pero no lo es (todavía), así que aquí tienes otra respuesta completa.
Me he estado golpeando la cabeza con este problema desde hace un tiempo. Hasta que encontré y leí los documentos. Compartiendo eso aquí en caso de que ayude a alguien más:
Lo que terminó funcionando de manera confiable para mí fue este comando. Elegí un tiempo de vencimiento de 1 segundo para las pruebas para verificar los resultados esperados:
--metadata-directive REPLACE
es necesario cuando "cp
" se modifican los metadatos de un archivo existente en S3max-age
establece la antigüedad del almacenamiento en caché del navegador, en segundoss-maxage
establece el almacenamiento en caché de CloudFront, en segundosDel mismo modo, si configura estos valores de encabezado de Cache-Control en un archivo mientras se carga a S3, el comando se vería así:
fuente
No creo que pueda especificar esto a nivel de depósito, pero hay algunas soluciones para usted.
Copie el objeto a sí mismo en S3 configurando los
cache-control
encabezados apropiados para la operación de copia.Especifique los encabezados de respuesta en la URL de los archivos . Necesita usar URL firmadas previamente para que esto funcione, pero puede especificar ciertos encabezados de respuesta en la cadena de consulta, incluidos
cache-control
yexpires
. Para obtener una lista completa de las opciones disponibles, consulte: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225fuente
Siempre puede configurar una lambda con un disparador en PUTOBJECT en S3, la lambda simplemente cambiará el encabezado de este objeto en particular que acaba de colocar.
Luego, puede ejecutar el comando de copia mencionado anteriormente por última vez, y todos los objetos nuevos serán corregidos por lambda.
ACTUALIZAR:
Este es un buen lugar para comenzar: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
fuente
Para aquellos que intentan usar la respuesta de Dan y obtienen el error:
Me encontré con el problema, y el problema fue que instalé awscli usando
Esto instaló una versión antigua de awscli a la que le falta el comando --metadata-directive. Así que usé sudo apt-get remove awscli para eliminarlo.
Luego reinstale siguiendo el procedimiento de Amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
La única diferencia es que tuve que usar sudo -H debido a problemas de permisos que otros podrían encontrar también.
fuente