Il existe maintenant 3 façons d'y parvenir: via la console AWS , via la ligne de commande ou via l'outil de ligne de commande s3cmd .
Instructions de la console AWS
C'est maintenant la solution recommandée. C'est simple, mais cela peut prendre un certain temps.
- Connectez-vous à AWS Management Console
- Aller dans le compartiment S3
- Sélectionnez tous les fichiers par itinéraire
- Choisissez "Plus" dans le menu
- Sélectionnez "Modifier les métadonnées"
- Dans le champ "Clé", sélectionnez "Cache-Control" dans le menu déroulant max-age = 604800Entrez (7 jours) pour Valeur
- Appuyez sur le bouton "Enregistrer"
( merci à @biplob - merci de lui donner un peu d'amour ci-dessous )
Solution de ligne de commande AWS
À l'origine, lorsque j'ai créé ce bucket, les politiques étaient interdites, alors j'ai compris comment le faire en utilisant aws-cli, et c'est assez astucieux. Lors de mes recherches, je n'ai trouvé aucun exemple dans la nature, alors j'ai pensé publier certaines de mes solutions pour aider ceux qui en avaient besoin.
REMARQUE: par défaut, aws-cli copie uniquement 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 ajouter 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 compartiment entier (notez - indicateur recursive):
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 ne voulez l'appliquer qu'à un type de fichier spécifique, vous devez exclure tous les fichiers, puis inclure ceux que vous voulez.
Uniquement 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 un pull git, elle pourrait être une solution plus simple et plus complète.
Pour des instructions complètes, voir le post de @ ashishyadaveee11 ci-dessous
J'espère que ça aide!
cp
téléchargement et re-upload tout?Désormais, il peut changer facilement depuis la console AWS.
L'exécution dépend de vos fichiers de compartiment. Refaites depuis le début si vous fermez accidentellement le navigateur.
la source
pas
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(il vous sera demandé les deux clés - copiez-les et collez-les à partir de votre e-mail de confirmation ou de la page de votre compte Amazon. Soyez prudent lorsque vous les copiez! Elles sont sensibles à la casse et doivent être saisies avec précision, sinon vous continuerez à recevoir des erreurs de non-validité signatures ou similaires. N'oubliez pas d'ajouter dess3:ListAllMyBuckets
autorisations aux clés ou vous obtiendrez uneAccessDenied
erreur lors du test de l'accès.)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
la source
Si mon score de réputation était> 50, je voudrais juste commenter. Mais ce n'est pas (encore) alors voici une autre réponse complète.
Je me cogne la tête sur ce problème depuis un moment maintenant. Jusqu'à ce que j'ai trouvé et lu les documents. Partager cela ici au cas où cela aiderait quelqu'un d'autre:
Ce qui a fonctionné de manière fiable pour moi, c'est cette commande. J'ai choisi un délai d'expiration de 1 seconde pour les tests afin de vérifier les résultats attendus:
--metadata-directive REPLACE
est requis lorsque "cp
" la modification des métadonnées sur un fichier existant dans S3max-age
définit l'âge de la mise en cache du navigateur, en secondess-maxage
définit la mise en cache CloudFront, en quelques secondesDe 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 ressemblerait à ceci:
la source
Je ne pense pas que vous puissiez spécifier cela au niveau du bucket, mais il existe quelques solutions de contournement pour vous.
Copiez l'objet sur lui-même sur S3 en définissant les en-
cache-control
têtes 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 des URL pré-signées pour que cela fonctionne, mais vous pouvez spécifier certains en-têtes de réponse dans la chaîne de requête, y compris
cache-control
etexpires
. Pour une liste complète des options disponibles, voir: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225la source
Vous pouvez toujours configurer un lambda avec un déclencheur sur PUTOBJECT sur S3, le lambda changera simplement l'en-tête de cet objet particulier qui vient d'être mis.
Ensuite, vous pouvez exécuter la commande de copie mentionnée ci-dessus une dernière fois, et tous les nouveaux objets seront corrigés par le lambda.
METTRE À 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 /
la source
À ceux qui tentent d'utiliser la réponse de Dan et obtiennent l'erreur:
J'ai rencontré le problème, et le problème était que j'ai installé awscli en utilisant
Cela a installé une ancienne version de awscli qui n'a pas la commande --metadata-directive. J'ai donc utilisé sudo apt-get remove awscli pour le supprimer.
Puis réinstallé en suivant 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 en raison de problèmes d'autorisation que d'autres pourraient également rencontrer.
la source