amazon-s3 - services - precio de amazon s3
Establezca el control de caché para el depósito S3 completo de forma automática(¿utilizando políticas de depósito?) (7)
Ahora hay 3 formas de hacerlo: a través de AWS Console , a través de la línea de comando o mediante la herramienta de línea de comandos s3cmd .
Instrucciones de la consola AWS
Esta es ahora la solución recomendada. Es sencillo, pero puede llevar algo de tiempo.
- Inicie sesión en la consola de administración de AWS
- Entrar en el cubo S3
- Seleccionar todos los archivos por ruta
- Elija "Más" en el menú
- Seleccione "Cambiar metadatos"
- En el campo "Clave", seleccione "Control de caché" en el menú desplegable max-age = 604800Introducir (7 días) para Value
- Presione el botón "Guardar"
( gracias a @CoderBoy - por favor, dale un poco de amor a continuación )
Solución de línea de comandos de AWS
Originalmente, cuando creé este cubo, las políticas eran un no ir, 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 ESPECIFICA METADATOS NUEVOS.
Para usar los metadatos que se especifican en la línea de comandos, debe agregar el indicador ''--metadata-directive REPLACE''. Aquí hay 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 cubo completo (nota - bandera de respuesta):
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
Encontré un poco, si solo quieres aplicarlo a un tipo de archivo específico, debes excluir todos los archivos, y luego incluir los que quieras.
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:
- http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
- http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html#options
Problemas conocidos:
"Unknown options: --metadata-directive, REPLACE"
esto puede ser causado por una respuesta obsoleta de awscli - see @ 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!
Necesito establecer encabezados de control de caché para un depósito s3 completo, tanto archivos existentes como futuros y esperaba hacerlo en una política de depósito. Sé que puedo editar los existentes y sé cómo especificarlos en put si los cargo yo mismo, pero desafortunadamente la aplicación que los carga no puede establecer los encabezados, ya que usa s3fs para copiar los archivos allí.
Ahora, puede cambiar fácilmente desde la consola de AWS.
- Inicie sesión en la consola de administración de AWS
- Entrar en el cubo S3
- Seleccionar todos los archivos por ruta
- Elija "Más" en el menú
- Seleccione "Cambiar metadatos"
- En el campo "Clave", selecciona "Control de caché" en el menú desplegable
- max-age = 604800Ingrese (7 días) para Value
- Presione el botón "Guardar"
Lleva tiempo ejecutar depende de tus archivos de cubetas. Rehaga desde el principio si cierra accidentalmente el navegador.
No creo que pueda especificar esto a nivel de paquete, pero hay algunas soluciones para usted.
Copie el objeto a sí mismo en S3 configurando los encabezados de
cache-control
apropiados para la operación de copia.Especifique los encabezados de respuesta en la url de los archivos . Necesitará usar direcciones URL previamente firmadas para que esto funcione, pero puede especificar ciertos encabezados de respuesta en la cadena de consulta, incluido
cache-control
yexpires
. Para obtener una lista completa de las opciones disponibles, consulte: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225
Para aquellos que intentan usar la respuesta de Dan y obtener el error:
"Opciones desconocidas: --metadata-directive, REPLACE"
Me encontré con el problema, y el problema fue que instalé awscli usando
sudo apt-get install awscli
Esto instaló una versión anterior del awscli al que le falta el comando --metadata-directive. Así que utilicé sudo apt-get remove awscli para eliminarlo.
Luego reinstalado 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 con los que otros podrían toparse también.
Si mi puntaje de reputación fuera> 50, solo comentaría. Pero no es (todavía) así que aquí hay otra respuesta completa.
He estado golpeando mi cabeza en 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:
- Documentación de Amazon CloudFront: especificar cuánto tiempo permanecen los objetos en un caché de CloudFront Edge (caducidad)
Lo que terminó funcionando de manera confiable para mí fue este comando. Elegí un tiempo de expiración de 1 segundo para las pruebas para verificar los resultados esperados:
aws s3 cp /
--metadata-directive REPLACE /
--cache-control max-age=1,s-maxage=1 /
s3://bucket/path/file /
s3://bucket/path/file
-
--metadata-directive REPLACE
es requerido cuando "cp
" modifica los metadatos en un archivo existente en S3 -
max-age
establece lamax-age
caché de CloudFront, en segundos -
s-maxage
establece el almacenamiento en caché del navegador, en segundos
Del mismo modo, si establece estos valores de encabezado de control de caché en un archivo mientras se carga en S3, el comando se vería así:
aws s3 cp /
--cache-control max-age=1,s-maxage=1 /
/local/path/file /
s3://bucket/path/file
Siempre puedes configurar una lambda con un disparador en PUTOBJECT en S3, la lambda simplemente cambiará el encabezado de este objeto en particular que acabamos de poner.
Luego puede ejecutar el comando de copia mencionado anteriormente una última vez, y todos los objetos nuevos serán arreglados por el 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/
pasos
-
git clone https://github.com/s3tools/s3cmd
- Ejecute
s3cmd --configure
(Se le solicitará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. Las mayúsculas y minúsculas se deben ingresar con precisión o se mantendrá obtener errores sobre firmas no válidas o similares. Recuerde agregars3:ListAllMyBuckets
permisos a las claves o obtendrá un errorAccessDenied
al probar el acceso.) -
./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/