Définir automatiquement le contrôle du cache pour l’ensemble du compartiment S3 (à l’aide des stratégies de compartiment)

J’ai besoin de définir des en-têtes de contrôle de cache pour un compartiment S3 entier, à la fois les fichiers existants et futurs et espérais le faire dans une stratégie de compartiment. Je sais que je peux éditer les versions existantes et je sais comment les spécifier si je les télécharge moi-même, mais malheureusement, l’application qui les télécharge ne peut pas définir les en-têtes car elle utilise s3fs pour y copier les fichiers.

Il y a maintenant 3 façons de le faire: 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 cela peut prendre du temps.

  • Connectez-vous à AWS Management Console
  • Aller dans le seau S3
  • Sélectionnez tous les fichiers par itinéraire
  • Choisissez “Plus” dans le menu
  • Sélectionnez “Modifier les métadonnées”
  • Dans le champ “Key”, sélectionnez “Cache-Control” dans le menu déroulant max-age = 604800Enter (7 jours) pour Value
  • Appuyez sur le bouton “Enregistrer”

( merci à @CoderBoy – s’il vous plaît donnez-lui de l’amour ci-dessous )


Solution de ligne de commande AWS

À l’origine, lorsque j’ai créé ce seau, les politiques étaient inacceptables, alors j’ai pensé comment le faire en utilisant aws-cli, et c’est plutôt facile. Lors de mes recherches, je n’ai trouvé aucun exemple dans la nature, alors j’ai pensé publier certaines de mes solutions pour aider les personnes dans le besoin.

REMARQUE: Par défaut, aws-cli ne copie que les métadonnées actuelles 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 append l’indicateur ‘–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 truc que j’ai trouvé, si vous voulez seulement l’appliquer à un type de fichier spécifique, vous devez exclure tous les fichiers, puis inclure ceux 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’informations:

Problèmes connus:

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

Cela peut être causé par un awscli obsolète – voir la réponse de @ eliotRosewater ci-dessous


Outil S3cmd

S3cmd est un “outil de ligne de commande pour la gestion des services Amazon S3 et CloudFront”. Bien que cette solution nécessite une extraction git, cette solution pourrait être plus simple et plus complète.

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


J’espère que cela aide!

pas

  1. git clone https://github.com/s3tools/s3cmd
  2. Exécutez s3cmd --configure (les deux clés vous seront demandées – copiez-les et collez-les à partir de votre e-mail de confirmation ou de votre page de compte Amazon. Faites attention lorsque vous les copiez! Elles sont sensibles à la casse et doivent être saisies correctement. obtenir des erreurs sur les signatures non valides ou similaires.N’oubliez pas d’append s3:ListAllMyBuckets permissions s3:ListAllMyBuckets aux clés ou vous obtiendrez une erreur AccessDenied lors du test d’access.)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/