Eu tenho uma pasta em um balde com 10.000 arquivos. Parece não haver maneira de enviá-los e torná-los públicos imediatamente. Então, carreguei todos eles, são privados e preciso torná-los públicos.
Eu tentei o console do aws, ele apenas dá um erro (funciona bem com pastas com menos arquivos).
Já tentei usar a organização S3 no Firefox, mesma coisa.
Existe algum software ou script que posso executar para tornar tudo isso público?
amazon-s3
amazon-web-services
PeterV
fonte
fonte
Respostas:
Você pode gerar uma política de bucket (veja o exemplo abaixo) que dá acesso a todos os arquivos no bucket. A política de bucket pode ser adicionada a um bucket por meio do console AWS.
Veja também a seguinte ferramenta de geração de políticas fornecida pela Amazon.
http://awspolicygen.s3.amazonaws.com/policygen.html
fonte
bucket/avatars/*
. (Não se esqueça do*
no final. Eu fiz e corri em círculos por um tempo.)Se você estiver enviando pela primeira vez, poderá definir os arquivos como públicos no upload na linha de comando:
Conforme documentado em Uso de comandos s3 de alto nível com a AWS Command Line Interface
Infelizmente, ele só aplica a ACL quando os arquivos são carregados. Ele não aplica (em meu teste) a ACL a arquivos já carregados.
Se você deseja atualizar os objetos existentes, costumava ser capaz de sincronizar o bloco com ele mesmo, mas parece que isso parou de funcionar.
[Não funciona mais] Isso pode ser feito na linha de comando:
(Portanto, isso não responde mais à pergunta, mas deixando a resposta para referência, como costumava funcionar.)
fonte
Tive que mudar várias centenas de milhares de objetos. Acionei uma instância EC2 para executar isso, o que torna tudo mais rápido. Você vai querer instalar a
aws-sdk
gema primeiro.Aqui está o código:
fonte
Tive o mesmo problema, solução de @DanielVonFange está desatualizada, pois nova versão do SDK saiu.
Adicionando snippet de código que funciona para mim agora com o SDK do AWS Ruby:
fonte
Só queria adicionar isso com o novo console S3, você pode selecionar sua (s) pasta (s) e
Make public
fazer com que todos os arquivos dentro das pastas sejam públicos. Ele funciona como uma tarefa em segundo plano, portanto, deve lidar com qualquer número de arquivos.fonte
Usando o cli:
aws s3 ls s3://bucket-name --recursive > all_files.txt && grep .jpg all_files.txt > files.txt && cat files.txt | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
fonte
aws s3 ls s3://bucket-name --recursive | grep .jpg | awk '{cmd="aws s3api put-object-acl --acl public-read --bucket bucket-name --key "$4;system(cmd)}'
Dê uma olhada no BucketExplorer, ele gerencia muito bem as operações em massa e é um cliente S3 sólido.
fonte
Tive essa necessidade, mas o número de arquivos torna muito lento para fazer em série. Então eu escrevi um script que faz isso em iron.io 's IRONWORKER serviço. Suas 500 horas de computação gratuitas por mês são suficientes para lidar até mesmo com grandes intervalos (e se você exceder esse valor, o preço é razoável). Como é feito em paralelo, ele é concluído em menos de um minuto para os 32.000 objetos que eu tinha. Também acredito que seus servidores rodam em EC2 então a comunicação entre o trabalho e S3 é rápida.
Qualquer pessoa pode usar meu script para atender às suas próprias necessidades.
fonte
Você pensaria que eles tornariam público a leitura do comportamento padrão, não é? :) Compartilhei sua frustração ao construir uma API personalizada para fazer a interface com o S3 a partir de uma solução C #. Aqui está o snippet que realiza o upload de um objeto S3 e a configuração para acesso de leitura pública por padrão:
A função ToACLString (acl) retorna leitura pública , BASE_SERVICE_URL é s3.amazonaws.com e a constante AWS_ACL_HEADER é x-amz-acl . O plug e o DreamMessage provavelmente parecerão estranhos para você, já que estamos usando a estrutura do Dream para agilizar nossas comunicações http. Basicamente, estamos fazendo um http PUT com os cabeçalhos especificados e uma assinatura de cabeçalho especial de acordo com as especificações do aws (consulte esta página na documentação do aws para exemplos de como construir o cabeçalho de autorização).
Para alterar ACLs de 1000 objetos existentes, você pode escrever um script, mas provavelmente é mais fácil usar uma ferramenta de GUI para corrigir o problema imediato. O melhor que usei até agora é de uma empresa chamada cloudberry for S3; parece que eles têm uma avaliação gratuita de 15 dias para pelo menos um de seus produtos. Acabei de verificar que isso permitirá que você selecione vários objetos de uma vez e defina sua ACL como pública por meio do menu de contexto. Aproveite a nuvem!
fonte