Listas de discussão S3tools / S3cmd:
S3cmd requer Python 2.6 ou mais recente. Python 3+ também é compatível a partir do S3cmd versão 2.
Consulte as instruções de instalação.
S3cmd ( s3cmd
) é uma ferramenta e cliente de linha de comando gratuito para upload, recuperação e gerenciamento de dados no Amazon S3 e outros provedores de serviços de armazenamento em nuvem que usam o protocolo S3, como Google Cloud Storage ou DreamHost DreamObjects. É mais adequado para usuários avançados familiarizados com programas de linha de comando. Também é ideal para scripts em lote e backup automatizado para S3, acionado pelo cron, etc.
S3cmd é escrito em Python. É um projeto de código aberto disponível sob GNU Public License v2 (GPLv2) e é gratuito para uso comercial e privado. Você só terá que pagar à Amazon pelo uso do armazenamento.
Muitos recursos e opções foram adicionados ao S3cmd, desde seu primeiro lançamento em 2008.... recentemente contamos mais de 60 opções de linha de comando, incluindo multipart uploads, criptografia, backup incremental, sincronização s3, ACL e gerenciamento de metadados, S3 tamanho do bucket, políticas de bucket e muito mais!
O Amazon S3 fornece um serviço gerenciado de armazenamento acessível pela Internet, onde qualquer pessoa pode armazenar qualquer quantidade de dados e recuperá-los novamente mais tarde.
S3 é um serviço pago operado pela Amazon. Antes de armazenar qualquer coisa no S3, você deve se inscrever em uma conta "AWS" (onde AWS = Amazon Web Services) para obter um par de identificadores: chave de acesso e chave secreta. Você precisará fornecer essas chaves ao S3cmd. Pense neles como se fossem um nome de usuário e uma senha para sua conta S3.
No momento em que este artigo foi escrito, os custos de uso do S3 eram (em dólares americanos):
US$ 0,023 por GB por mês de espaço de armazenamento usado
mais
US$ 0,00 por GB - todos os dados carregados
mais
US$ 0,000 por GB – primeiro 1 GB/mês de dados baixados US$ 0,090 por GB – até 10 TB/mês de dados baixados US$ 0,085 por GB – próximos 40 TB/mês de dados baixados US$ 0,070 por GB – próximos 100 TB/mês de dados baixados US$ 0,050 por GB – dados baixados /mês acima de 150 TB
mais
US$ 0,005 por 1.000 solicitações PUT ou COPY ou LIST US$ 0,004 por 10.000 solicitações GET e todas as outras solicitações
Se, por exemplo, no dia 1º de janeiro você fizer upload de 2 GB de fotos em JPEG de suas férias na Nova Zelândia, no final de janeiro será cobrado US$ 0,05 pelo uso de 2 GB de espaço de armazenamento por um mês, US$ 0,0 pelo upload de 2 GB de dados e um alguns centavos para pedidos. Isso equivale a pouco mais de US$ 0,06 para um backup completo de suas preciosas fotos de férias.
Em fevereiro você não toca. Seus dados ainda estão nos servidores S3, então você paga US$ 0,06 por esses dois gigabytes, mas nem um único centavo será cobrado por qualquer transferência. Isso equivale a US$ 0,05 como custo contínuo do seu backup. Nada mal.
Em março você permite acesso de leitura anônima a algumas de suas fotos e seus amigos baixam, digamos, 1.500 MB delas. Como os arquivos são de sua propriedade, você é responsável pelos custos incorridos. Isso significa que no final de março serão cobrados US$ 0,05 pelo armazenamento mais US$ 0,045 pelo tráfego de download gerado por seus amigos.
Não há contrato mensal mínimo ou taxa de instalação. O que você usa é o que você paga. No início minha conta era de US$ 0,03 ou até zero.
Em poucas palavras, esse é o modelo de preços do Amazon S3. Verifique a página inicial do Amazon S3 para obter mais detalhes.
Escusado será dizer que todo esse dinheiro é cobrado pela própria Amazon, obviamente não há pagamento pelo uso do S3cmd :-)
Os arquivos armazenados no S3 são chamados de “objetos” e seus nomes são oficialmente chamados de “chaves”. Como isso às vezes é confuso para os usuários, frequentemente nos referimos aos objetos como “arquivos” ou “arquivos remotos”. Cada objeto pertence a exatamente um "balde".
Para descrever objetos no armazenamento S3, inventamos um esquema semelhante a URI no seguinte formato:
s3://BUCKET
ou
s3://BUCKET/OBJECT
Buckets são como diretórios ou pastas com algumas restrições:
É uma boa ideia usar nomes de bucket compatíveis com DNS. Isso, por exemplo, significa que você não deve usar caracteres maiúsculos. Embora a conformidade com DNS não seja estritamente necessária, alguns recursos descritos abaixo não estão disponíveis para buckets nomeados incompatíveis com DNS. Mais um passo é usar um nome de domínio totalmente qualificado (FQDN) para um bucket – o que traz ainda mais benefícios.
Procure "Hosts Virtuais" posteriormente neste texto para obter mais detalhes sobre buckets nomeados de FQDN.
Ao contrário dos buckets, quase não há restrições quanto aos nomes dos objetos. Podem ser quaisquer strings UTF-8 com até 1.024 bytes de comprimento. Curiosamente, o nome do objeto pode conter uma barra (/), portanto, my/funny/picture.jpg
é um nome de objeto válido. Observe que não há diretórios nem buckets chamados my
e funny
- na verdade, é um único nome de objeto chamado my/funny/picture.jpg
e o S3 não se importa nem um pouco com a aparência de uma estrutura de diretórios.
O URI completo de tal imagem poderia ser, por exemplo:
s3://my-bucket/my/funny/picture.jpg
Os arquivos armazenados no S3 podem ser privados ou públicos. Os Privados podem ser lidos apenas pelo usuário que os carregou, enquanto os Públicos podem ser lidos por qualquer pessoa. Além disso, os arquivos públicos podem ser acessados usando o protocolo HTTP, não apenas usando s3cmd
ou ferramenta semelhante.
A ACL (Lista de Controle de Acesso) de um arquivo pode ser definida no momento do upload usando as opções --acl-public
ou --acl-private
com os comandos s3cmd put
ou s3cmd sync
(veja abaixo).
Alternativamente, a ACL pode ser alterada para arquivos remotos existentes com o comando s3cmd setacl --acl-public
(ou --acl-private
).
Acesse https://aws.amazon.com/s3, clique no botão “Cadastre-se no serviço web” na coluna da direita e faça o cadastro. Você terá que fornecer os dados do seu cartão de crédito para permitir que a Amazon cobre pelo uso do S3. No final você deverá ter suas chaves de acesso e secretas.
Se você configurar um usuário do IAM separado, a chave de acesso desse usuário deverá ter pelo menos as seguintes permissões para fazer qualquer coisa:
Outros exemplos de políticas podem ser encontrados em https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html
s3cmd --configure
Serão solicitadas as duas chaves - copie e cole-as do seu e-mail de confirmação ou da página da sua conta Amazon. Tenha cuidado ao copiá-los! Eles diferenciam maiúsculas de minúsculas e devem ser inseridos com precisão ou você continuará recebendo erros sobre assinaturas inválidas ou similares.
Lembre-se de adicionar permissões s3:ListAllMyBuckets às chaves ou você receberá um erro AccessDenied ao testar o acesso.
s3cmd ls
para listar todos os seus buckets.Como você acabou de começar a usar o S3, não há buckets de sua propriedade no momento. Portanto, a saída estará vazia.
s3cmd mb s3://my-new-bucket-name
Conforme mencionado acima, os nomes dos buckets devem ser exclusivos entre todos os usuários do S3. Isso significa que nomes simples como "test" ou "asdf" já estão em uso e você deve inventar algo mais original. Para demonstrar o máximo de recursos possível, vamos criar um bucket chamado FQDN s3://public.s3tools.org
:
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
Agora você deverá ver seu bucket recém-criado:
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
Está vazio, de fato.
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml
some-file.xml -> s3://public.s3tools.org/somefile.xml [1 of 1]
123456 of 123456 100% in 2s 51.75 kB/s done
Faça upload de uma árvore de dois diretórios no 'diretório' virtual do bucket:
$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/
File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]
Como você pode ver, não tivemos que criar o 'diretório' /somewhere
. Na verdade, é apenas um prefixo de nome de arquivo, não um diretório real e não precisa ser criado de forma alguma antes.
Em vez de usar put
com a opção --recursive
, você também pode usar o comando sync
:
$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
$ s3cmd ls s3://public.s3tools.org
DIR s3://public.s3tools.org/somewhere/
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
Use --recursive (ou -r) para listar todos os arquivos remotos:
$ s3cmd ls --recursive s3://public.s3tools.org
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
2009-02-10 05:13 18 s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13 16 s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13 11 s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir2/file2-2.txt
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml
s3://public.s3tools.org/somefile.xml -> some-file-2.xml [1 of 1]
123456 of 123456 100% in 3s 35.75 kB/s done
$ md5sum some-file.xml some-file-2.xml
39bcb6992e461b269b95b3bda303addf some-file.xml
39bcb6992e461b269b95b3bda303addf some-file-2.xml
As somas de verificação do arquivo original correspondem às recuperadas. Parece que funcionou :-)
Para recuperar uma 'árvore de diretórios' inteira do S3, use get recursivo:
$ s3cmd get --recursive s3://public.s3tools.org/somewhere
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'
Como o diretório de destino não foi especificado, s3cmd
salvou a estrutura de diretórios em um diretório de trabalho atual ('.').
Há uma diferença importante entre:
get s3://public.s3tools.org/somewhere
e
get s3://public.s3tools.org/somewhere/
(observe a barra final)
s3cmd
sempre usa a última parte do caminho, ou seja, a palavra após a última barra, para nomear os arquivos.
No caso de s3://.../somewhere
a última parte do caminho é 'somewhere' e, portanto, o get recursivo nomeia os arquivos locais como algum lugar/dir1, algum lugar/dir2, etc.
Por outro lado, em s3://.../somewhere/
a última parte do caminho está vazia e s3cmd criará apenas 'dir1' e 'dir2' sem o prefixo 'somewhere/':
$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'
Ver? É ~/dir1
e não ~/somewhere/dir1
como no exemplo anterior.
Remova tudo em s3://public.s3tools.org/somewhere/
$ s3cmd del --recursive s3://public.s3tools.org/somewhere/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...
Agora tente remover o balde:
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
Ai, esquecemos s3://public.s3tools.org/somefile.xml
. Podemos forçar a remoção do balde de qualquer maneira:
$ s3cmd rb --force s3://public.s3tools.org/
WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed
O uso básico é tão simples quanto descrito na seção anterior.
Você pode aumentar o nível de verbosidade com a opção -v
e se estiver realmente interessado em saber o que o programa faz sob seu capô, execute-o com -d
para ver toda a saída de 'depuração'.
Depois de configurá-lo com --configure
todas as opções disponíveis são colocadas em seu arquivo ~/.s3cfg
. É um arquivo de texto pronto para ser modificado em seu editor de texto favorito.
Os comandos de transferência (put, get, cp, mv e sync) continuam a transferência mesmo se um objeto falhar. Se ocorrer uma falha, a falha será enviada para stderr e o status de saída será EX_PARTIAL (2). Se a opção --stop-on-error
for especificada ou a opção de configuração stop_on_error for verdadeira, as transferências param e um código de erro apropriado é retornado.
Para obter mais informações, consulte a página inicial do S3cmd/S3tools.
Copyright (C) 2007-2023 TGRMN Software (https://www.tgrmn.com), Sodria SAS (https://www.sodria.com/) e colaboradores
Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation; a versão 2 da Licença ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a Licença Pública Geral GNU para mais detalhes.