Agora existem três maneiras de fazer isso: por meio do AWS Console , da linha de comando ou da ferramenta de linha de comando s3cmd .
Instruções do console AWS
Esta agora é a solução recomendada. É simples, mas pode levar algum tempo.
- Faça login no AWS Management Console
- Vá para o balde S3
- Selecione todos os arquivos por rota
- Escolha "Mais" no menu
- Selecione "Alterar metadados"
- No campo "Chave", selecione "Cache-Control" no menu suspenso max-age = 604800Enter (7 dias) para Valor
- Pressione o botão "Salvar"
( obrigado a @biplob - por favor, dê a ele um pouco de amor abaixo )
Solução de linha de comando AWS
Originalmente, quando criei este balde, as políticas eram proibidas, então descobri como fazê-lo usando o aws-cli, e é muito inteligente. Ao pesquisar, não consegui encontrar nenhum exemplo na natureza, então pensei em postar algumas das minhas soluções para ajudar os necessitados.
NOTA: Por padrão, o aws-cli copia apenas os metadados atuais de um arquivo, MESMO QUE VOCÊ ESPECIFICAR NOVOS METADADOS.
Para usar os metadados especificados na linha de comando, você precisa adicionar o sinalizador '--metadata-Directive REPLACE'. Aqui estão alguns exemplos.
Para um único arquivo
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
Para um intervalo inteiro (observe - sinalizador recursivo):
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
Descobri um pequeno problema, se você deseja aplicá-lo apenas a um tipo de arquivo específico, é necessário excluir todos os arquivos e incluir os que deseja.
Apenas jpgs e 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
Aqui estão alguns links para o manual se você precisar de mais informações:
Problemas conhecidos:
"Unknown options: --metadata-directive, REPLACE"
isso pode ser causado por um awscli desatualizado - veja a resposta de @eliotRosewater abaixo
Ferramenta S3cmd
S3cmd é uma "ferramenta de linha de comando para gerenciar serviços do Amazon S3 e do CloudFront". Embora essa solução exija um git pull, ela pode ser uma solução mais simples e abrangente.
Para obter instruções completas, consulte a postagem de @ ashishyadaveee11 abaixo
Espero que ajude!
cp
download e reenvio de tudo?Agora, ele pode mudar facilmente no console da AWS.
Demora para executar depende de seus arquivos de bucket. Refaça desde o início se você acidentalmente fechar o navegador.
fonte
passos
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(serão solicitadas as duas chaves - copie e cole do seu e-mail de confirmação ou da página da sua conta da Amazon. Tenha cuidado ao copiá-las! Elas diferenciam maiúsculas de minúsculas e devem ser digitadas com precisão ou você continuará recebendo erros sobre inválidos assinaturas ou similar. Lembre-se de adicionars3:ListAllMyBuckets
permissões às chaves ou você receberá umAccessDenied
erro ao testar o acesso.)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
fonte
Se minha pontuação de reputação fosse> 50, eu apenas comentaria. Mas (ainda) não é, então aqui está outra resposta completa.
Eu tenho batido minha cabeça neste problema há um tempo. Até que eu encontrei e li os documentos. Compartilhar isso aqui caso ajude mais alguém:
O que acabou funcionando de forma confiável para mim foi este comando. Eu escolhi um tempo de expiração de 1 segundo para teste para verificar os resultados esperados:
--metadata-directive REPLACE
é necessário ao "cp
" modificar metadados em um arquivo existente no S3max-age
define a idade do cache do navegador, em segundoss-maxage
define o cache do CloudFront, em segundosDa mesma forma, se definir esses valores de cabeçalho Cache-Control em um arquivo durante o upload para S3, o comando ficaria assim:
fonte
Não acho que você possa especificar isso no nível do intervalo, mas existem algumas soluções alternativas para você.
Copie o objeto para ele mesmo no S3, definindo os
cache-control
cabeçalhos apropriados para a operação de cópia.Especifique os cabeçalhos de resposta no url dos arquivos . Você precisa usar urls pré-assinadas para que isso funcione, mas você pode especificar certos cabeçalhos de resposta na string de consulta, incluindo
cache-control
eexpires
. Para obter uma lista completa das opções disponíveis, consulte: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r=5225fonte
Você sempre pode configurar um lambda com um gatilho em PUTOBJECT no S3, o lambda simplesmente mudará o cabeçalho deste objeto específico que acabou de ser colocado.
Em seguida, você pode executar o comando de cópia mencionado acima uma última vez, e todos os novos objetos serão corrigidos pelo lambda.
ATUALIZAR:
Este é um bom lugar para começar: https://www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
fonte
Para aqueles que tentam usar a resposta de Dan e obtêm o erro:
Eu encontrei o problema, e o problema é que instalei o awscli usando
Isso instalou uma versão antiga do awscli que não tem o comando --metadata-Directive. Portanto, usei sudo apt-get remove awscli para removê-lo.
Em seguida, reinstalado seguindo o procedimento da amazon: http://docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
A única diferença é que tive que usar sudo -H por causa de problemas de permissão que outras pessoas também podem ter.
fonte