web-dev-qa-db-fra.com

Comment ajouter le contrôle de cache dans AWS S3?

J'ai déplacé 20000 fichiers vers AWS S3 à l'aide de la commande s3cmd. Maintenant, je veux ajouter un contrôle de cache pour toutes les images (.jpg)

Ces fichiers sont situés dans (s3: // nom de compartiment/images /). Comment puis-je ajouter un contrôle de cache pour toutes les images avec s3cmd ou existe-t-il un autre moyen d'ajouter un en-tête?

Merci

54
Rajaraman

Veuillez essayer la branche principale actuelle en amont ( https://github.com/s3tools/s3cmd ), car elle comporte maintenant une commande modify, utilisée comme suit:

./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
66
user3440362

Également avec le propre client d'AWS:

aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
46
user31208

Pour ajuster les métadonnées telles que le contrôle du cache sur un objet dans S3 sans avoir à le télécharger à nouveau et sans avoir à utiliser d'outils tiers, vous pouvez procéder comme suit avec l'AWS CLI. Il copie l'objet sur lui-même en surchargeant les métadonnées avec les paramètres choisis:

aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"

Traitez cette commande dans une recherche pour le faire sur un ensemble de fichiers existant dans le compartiment au moment où vous le mentionnez:

find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"

remplacer <bucket-name> avec le nom de votre seau

WARNING: Cela écrasera toutes vos métadonnées existantes sur les fichiers tels que acl. Il vous suffira d'ajouter des indicateurs supplémentaires à la commande pour définir ce dont vous avez besoin, par exemple, --acl public-read pour donner un accès public complet. (merci @jackson)

19
Joel Duckworth

Mon seau a mp4, jpg et autres fichiers. Les fichiers que je voulais mettre à jour sont stockés dans un "sous-compartiment" (ex: https://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4 ). Dans mon cas, je voulais seulement mettre à jour le contrôle du cache sur les fichiers mp4:

aws s3 cp \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

Pour tester ce que cela va faire, vous pouvez utiliser le --dryrun drapeau:

aws s3 cp --dryrun \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive
16
rodrigo-silveira
PUT / ObjectName HTTP/1.1 
Host: BucketName .s3.amazonaws.com 
Date: date 
x-amz-meta-Cache-Control : max-age= <value in seconds> 
Authorization: signatureValue 

Chaque paramètre de métadonnées contient une paire clé-valeur. La clé de métadonnées de contrôle du cache est "Cache-Control" et la valeur est “max-age=<time for which you want your object to be accessed from cache in seconds>”

Vous pouvez définir l'en-tête personnalisé Cache Control pour les objets Amazon S3 en envoyant une demande HTTP PUT au serveur Amazon S3 avec les en-têtes appropriés de deux manières:

Définition de métadonnées de contrôle du cache à l'aide de la demande d'objet PUT de l'API REST de l'API Amazon S3 - Si vous êtes programmeur, vous pouvez écrire votre propre logiciel pour utiliser les API REST ou SOAP d'Amazon S3 afin de définir des en-têtes personnalisés. avec PUT Object Request. Ce site Web fait uniquement référence aux API Amazon S3 REST. Veuillez vous reporter au site Web de la documentation AWS pour plus d'informations sur l'utilisation des API SOAP. Définir les métadonnées de contrôle du cache à l'aide de l'interface utilisateur de Bucket Explorer - Si vous souhaitez définir des en-têtes HTTP personnalisés tels que Contrôle du cache à l'aide de clics de souris au lieu d'écrire un logiciel, vous pouvez utiliser l'interface utilisateur de Bucket Explorer pour cela. Avec cet en-tête HTTP personnalisé, vous pouvez spécifier le comportement de mise en cache qui doit être suivi avec la chaîne de demande/réponse et empêcher les caches d'interférer avec la demande ou la réponse.

pour plus d'informations, veuillez vérifier Comment définir l'en-tête de contrôle du cache pour un objet Amazon S3? `

3

(Depuis que le PO a demandé un autre moyen)

Vous pouvez aussi le faire via aws-cli, par exemple. (v: aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0):

aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt

Notez cependant que vous allez réécrire tout objet existant.

1
Jose Alban

Si vous souhaitez éviter les outils tiers et qu'il s'agit d'une tâche ponctuelle, vous pouvez utiliser la console AWS.

  1. Naviguez vers votre panier s3
  2. Sélectionnez tous les objets que vous souhaitez modifier
  3. Cliquez sur Actions -> Modifier les métadonnées.
  4. Sélectionnez Cache-Control pour la clé, entrez le contrôle que vous voulez comme valeur
  5. Sauver
1
mattdedek

Il suffit de mettre à niveau le s3cmd vers la version 1.5.1 pour résoudre le problème.

1
Monika Bhadauria