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.
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:
- http://docs.aws.amazon.com/cli/latest/userguide/using-s3-commands.html
- http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html#options
"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!
étapes
-
git clone https://github.com/s3tools/s3cmd
- 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'ajouters3:ListAllMyBuckets
permissions aux clés ou vous obtiendrez unAccessDenied
erreur lors du test d'accès.) -
./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
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.
Je ne pense pas que vous pouvez spécifier cela au niveau du seau, mais il y a quelques solutions de rechange pour vous.
-
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. -
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
etexpires
. Pour une liste complète des options disponibles voir: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225
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:
- Amazon CloudFront de la Documentation: de Spécifier Combien de temps les Objets de Rester dans un CloudFront Bord de Cache (Expiration)
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
à 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.
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 /