Alterando recursivamente o tipo de conteúdo para arquivos de uma determinada extensão no Amazon S3

7

Eu tenho um grande depósito S3 com uma estrutura "pasta" aninhada contendo (entre outras coisas) arquivos .json e .md estáticos. Esses arquivos estão sendo atendidos pelo S3 como text/plain , em vez dos arquivos application/json e text/markdown corretos.

Atualizei os padrões do intervalo para que os novos envios tenham o tipo de conteúdo correto.

Qual é a melhor maneira de percorrer a "árvore" e atualizar o tipo de conteúdo para arquivos correspondentes a uma determinada extensão?

    
por Gabriel Bauman 29.09.2015 / 17:37

4 respostas

1

Depois de algumas pesquisas, descobri que a ferramenta s3cmd pode fazer isso. Por exemplo, para definir arquivos JSON para application / json:

s3cmd --recursive modify --acl-public \
       --add-header='content-type':'application/json' \
       --exclude '' --include '.json' \
       s3://bucket/
    
por 29.09.2015 / 18:25
15

Aqui está um exemplo de como fazer isso com a ferramenta aws cli. A ferramenta cp permite o uso de opções recursivas, o que não acho que a ferramenta s3api possa fazer. Neste caso, estou corrigindo um monte de SVGs. Remova as opções --dryrun quando estiver pronto para soltá-lo.

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/
    
por 14.12.2016 / 16:38
3

A menos que você queira sujar as mãos usando boto / python ou outra API da AWS, suspeito que sua melhor aposta seria usar $ aws s3api copy-object com o sinal --content-type para copiar um objeto para si mesmo, definindo o novo tipo de conteúdo .

Veja a documentação do s3api.

Não é preciso dizer que você deve testar isso primeiro, antes de executá-lo recursivamente em todo o seu balde.

    
por 29.09.2015 / 17:50
2

Como mencionado anteriormente, você pode usar a ferramenta aws da Amazon e usar o s3api para copiar o objeto em si mesmo e usar metadata-directive=REPLACE para alterar o tipo de conteúdo.

Eu estou colocando isso aqui, porque às vezes você gostaria de iterar em nomes de arquivos que são armazenados no banco de dados, e é assim que você pode fazê-lo através do cli.

aws s3api copy-object \
          --content-type="application/vnd.android.package-archive" \
          --metadata-directive="REPLACE" \
          --copy-source "MYBUCKET/FILE.apk" \
          --bucket "MYBUCKET" \
          --key "FILE.apk" \
          --acl public-read
    
por 10.03.2016 / 10:13

Tags