Définir le contrôle de cache pour le seau S3 entier automatiquement (en utilisant les politiques de seau?)

j'ai besoin de définir des en-têtes cache-control pour un seau s3 entier, à la fois des fichiers existants et futurs et j'espérais le faire dans une politique de seau. Je sais que je peux éditer les fichiers existants et je sais comment les spécifier sur put si je les télécharge moi-même mais malheureusement l'application qui les télécharge ne peut pas configurer les en-têtes car elle utilise s3fs pour copier les fichiers qui s'y trouvent.

77
demandé sur Steffen Opel 2012-05-03 20:15:38

7 réponses

il y a maintenant 3 façons de faire ceci: via la Console AWS , via la ligne de commande , ou via l'outil de ligne de commande s3cmd .


AWS Console Instructions

c'est maintenant la solution recommandée. C'est simple, mais il peut prendre un certain temps.

  • connectez-vous à AWS Management Console
  • Aller dans un compartiment S3
  • sélectionnez tous les fichiers par route
  • choisissez" plus "dans le menu
  • Sélectionner "Modifier les métadonnées "
  • Dans le champ "Clé", sélectionnez "Cache-Control" dans le menu déroulant max-age=604800Enter (7 jours) pour la valeur
  • , Appuyez sur "Save" bouton

( merci à @CoderBoy - s'il vous plaît donnez-lui un peu d'amour au-dessous de )


AWS Ligne de Commande Solution

à l'origine, quand j'ai créé cette politique de seau était un no go, donc j'ai pensé comment le faire en utilisant aws-cli, et il est assez lisse. Lors de mes recherches, je n'ai pas pu trouver d'exemples dans la nature, donc j'ai pensé que je pourrais poster quelques-unes de mes solutions pour aider ceux qui sont dans le besoin.

NOTE: par défaut, aws-cli ne copie que les métadonnées courantes d'un fichier, MÊME SI VOUS SPÉCIFIEZ DE NOUVELLES MÉTADONNÉES.

pour utiliser les métadonnées spécifiées sur la ligne de commande, vous devez ajouter le drapeau '--metadata-directive REPLACE'. Voici quelques exemples.

pour un seul fichier

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

pour un seau entier (note -- drapeau récursif):

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 petit gotcha que j'ai trouvé, si vous voulez seulement l'appliquer à un type de fichier spécifique, vous devrez exclure tous les fichiers, puis d'inclure celles que vous voulez.

seulement jpgs et 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

Voici quelques liens vers le manuel si vous avez besoin de plus d'infos:

"Questions Connues:

"Unknown options: --metadata-directive, REPLACE"

cela peut être causé par un awscli périmé-voir la réponse de @eliotRosewater ci-dessous


S3cmd outil

S3cmd est un"outil en ligne de commande pour gérer Amazon S3 et CloudFront services". Alors cette solution nécessite une git pull. il pourrait s'agir d'une solution plus simple et plus complète.

Pour les instructions complètes, voir @ashishyadaveee11 du post ci-dessous


Espère que cela aide!

125
répondu Dan Williams 2018-03-15 03:33:14

étapes

  1. git clone https://github.com/s3tools/s3cmd
  2. Exécuter s3cmd --configure (On vous demandera les deux clés - copiez et collez - les à partir de votre email de confirmation ou de votre compte Amazon page. Être prudent lors de l' copier! Ils sont sensibles à la casse et doivent être entrés avec précision ou vous continuerez à avoir des erreurs sur des signatures invalides ou similaires. N'oubliez pas d'ajouter s3:ListAllMyBuckets permissions aux clés ou vous obtiendrez un AccessDenied erreur lors du test d'accès.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
18
répondu ashishyadaveee11 2016-08-11 00:05:28

maintenant, il peut changer facilement de console AWS.

  • connectez-vous à AWS Management Console
  • Aller dans un compartiment S3
  • sélectionnez tous les fichiers par route
  • choisissez" plus "dans le menu
  • Sélectionner "Modifier les métadonnées"
  • dans le champ "Key", sélectionnez "Cache-Control" dans le menu déroulant
  • max-age=604800Enter (7 jours) pour la valeur
  • , Appuyez sur "Save" bouton

il faut du temps pour exécuter dépend de vos fichiers de seau. Recommencez dès le début si vous fermez accidentellement le navigateur.

15
répondu CoderBoy 2017-11-02 10:17:29

Je ne pense pas que vous pouvez spécifier cela au niveau du seau, mais il y a quelques solutions de rechange pour vous.

  1. Copiez l'objet à lui-même sur S3 en plaçant les en-têtes cache-control appropriés pour l'opération de copie.

  2. spécifiez les en-têtes de réponse dans l'url des fichiers . Vous devez utiliser les pré-signé url pour que cela fonctionne, mais vous pouvez spécifier certains les en-têtes de réponse dans le querystring comprenant cache-control et expires . Pour une liste complète des options disponibles voir: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225

7
répondu Geoff Appleford 2012-05-04 08:28:25

si ma réputation était supérieure à 50, Je ne ferais que commenter. Mais ce n'est pas (encore) voici donc une autre réponse.


je me tape la tête sur ce problème depuis un moment maintenant. Jusqu'à ce que je trouve et que je lise les docs. Partager cela ici au cas où il aide quelqu'un d'autre:

ce qui a fini par marcher de façon fiable pour moi était cette commande. J'ai choisi un délai de péremption d'une seconde pour les tests afin de vérifier les résultats attendus:

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 est requis lors de " cp " modifier les métadonnées sur un fichier existant dans S3
  • max-age fixe L'âge de mise en cache du navigateur, en secondes
  • s-maxage définit la mise en cache de la Couverture nuageuse, en secondes

de même, si vous définissez ces valeurs D'en-tête Cache-Control sur un fichier lors du téléchargement vers S3, la commande ressemblera à:

aws s3 cp \
  --cache-control max-age=1,s-maxage=1 \
  /local/path/file \
  s3://bucket/path/file
4
répondu roens 2018-07-18 00:01:58

à ceux qui tentent D'utiliser la réponse de Dan et d'obtenir l'erreur:

"Inconnu options: --métadonnées de la directive, REMPLACER"

j'ai rencontré le problème, et le problème était que j'ai installé awscli en utilisant

sudo apt-get install awscli

cela a installé une ancienne version de l'awscli qui manque la commande --metadata-directive. J'Ai Donc utilisé sudo apt-get remove awscli pour le supprimer.

puis réinstallé selon la procédure d'amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html

la seule différence est que j'ai dû utiliser sudo-H à cause de problèmes de permission que d'autres pourraient rencontrer aussi.

1
répondu eliotRosewater 2016-10-16 21:11:45

vous pouvez toujours configurer un lambda avec un déclencheur sur PUTOBJECT sur S3, le lambda va simplement changer l'en-tête de cet objet particulier qui vient d'être mis.

, Alors vous pouvez exécuter la commande copier mentionné ci-dessus, une dernière fois, et tous les nouveaux objets seront fixés par le lambda.

mise à jour:

voici un bon point de départ: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /

1
répondu Ibrahim Bou Ncoula 2017-07-21 12:12:11