Como renomear o nome do AWS S3 Bucket

150

Depois de todos os trabalhos difíceis de migração, etc. Apenas perceba que, se necessário, veicular o conteúdo usando CNAME (por exemplo, media.abc.com). O nome do bloco precisa começar com media.abc.com/S3/amazon.com para garantir que funcione perfeitamente.

Apenas perceba que o S3 não permite renomear diretamente do console.

Existe alguma maneira de contornar isso?

Carson Lee
fonte

Respostas:

104

Acho que a única maneira é criar um novo balde com nome correto e copiar todos os seus objetos do balde antigo para o novo. Você pode fazer isso usando o Aws CLI.

liferacer
fonte
2
existem cobranças pela solução acima @navjot?
Pavitran
@pavitran não, que ainda é o caminho a percorrer
Tashows
8
O Pavitran @Tashows estava perguntando sobre chaRges, não chaNges. Até onde eu sei, existem cobranças pela cópia de itens do balde, acredito que 1 custo de operação GET e 1 PUT para cada item.
guival 29/08
5
@Tashows Na verdade, há uma entrada para operações COPY na tabela de preços do S3 , na verdade, é exatamente o mesmo custo que fazer um PUT (portanto, não há custo GET extra).
guival 29/08
3
Observe que você também pode recortar e colar usando o console da Web, para pessoas que não desejam fazer isso via CLI.
Mahemoff
241

Solução

aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]

Explicação

Não há funcionalidade de renomear bucket para S3 porque tecnicamente não há pastas no S3, portanto, precisamos lidar com todos os arquivos dentro do bucket.

O código acima irá 1. criar um novo depósito, 2. copiar arquivos e 3. excluir o depósito antigo. É isso aí.

Se você tiver muitos arquivos no seu balde e estiver preocupado com os custos, continue lendo. Nos bastidores, o que acontece é que todos os arquivos no bucket são copiados e excluídos primeiro. Deve custar uma quantia insignificante se você tiver alguns milhares de arquivos. Caso contrário, verifique esta resposta para ver como isso afetaria você.

Exemplo

No exemplo a seguir, criamos e preenchemos o bucket antigo e sincronizamos os arquivos com o novo. Verifique a saída dos comandos para ver o que a AWS faz.

> # bucket suffix so we keep it unique
> suffix="ieXiy2"  # used `pwgen -1 -6` to get this
>
> # populate old bucket
> echo "asdf" > asdf.txt
> echo "yxcv" > yxcv.txt
> aws s3 mb s3://old-bucket-$suffix
make_bucket: old-bucket-ieXiy2
> aws s3 cp asdf.txt s3://old-bucket-$suffix/asdf.txt
upload: ./asdf.txt to s3://old-bucket-ieXiy2/asdf.txt
> aws s3 cp yxcv.txt s3://old-bucket-$suffix/yxcv.txt
upload: ./yxcv.txt to s3://old-bucket-ieXiy2/yxcv.txt
>
> # "rename" to new bucket
> aws s3 mb s3://new-bucket-$suffix
make_bucket: new-bucket-ieXiy2
> aws s3 sync s3://old-bucket-$suffix s3://new-bucket-$suffix
copy: s3://old-bucket-ieXiy2/yxcv.txt to s3://new-bucket-ieXiy2/yxcv.txt
copy: s3://old-bucket-ieXiy2/asdf.txt to s3://new-bucket-ieXiy2/asdf.txt
> aws s3 rb --force s3://old-bucket-$suffix
delete: s3://old-bucket-ieXiy2/asdf.txt
delete: s3://old-bucket-ieXiy2/yxcv.txt
remove_bucket: old-bucket-ieXiy2
dualidade_
fonte
8
Esta resposta é igual à resposta aceita, exceto que esta postagem fornece um exemplo passo a passo muito útil de como fazê-lo. (Porém, o exemplo deve ser abreviado. Não há necessidade de mostrar a criação de um exemplo de bucket antigo e usar uma variável de sufixo.) A parte de explicação desta resposta não me satisfaz. Ele diz que a falta de pastas no S3 é o motivo pelo qual esse procedimento estranho é necessário. Como a pergunta original não mencionou pastas, não entendo como isso explica a incapacidade de renomear os buckets do S3.
LS
2
Tentei este método ... parecia funcionar ... no entanto, por algum motivo estranho, não consigo ver nenhum dos itens (imagens). Posso navegar pelo navegador pelos itens no painel s3 ... mas não consigo visualizá-los por meio de um URL ou baixá-los. Alguma idéia do porquê? Permissões parecem idênticas. Há algumas permissões especiais a serem observadas?
precisa saber é
1
@duality_ você pode adicionar à sua notificação de resposta sobre permissões e com as quais você pode copiar arquivos --acl bucket-owner-full-control(como nessa resposta )
Евгений Масленков
1
Observe que você também precisa especificar a região; caso contrário, seus novos buckets estarão no leste dos EUA (Virgínia do Norte). Por exemplo aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy 8/18
1
Se você tiver versões on, você precisará usar o gerenciamento de ciclo de vida para expirar as versões ... aparentemente: docs.aws.amazon.com/AmazonS3/latest/dev/...
carlin.scott
38

Provavelmente, uma versão posterior do kit de ferramentas CLI da AWS forneceu a mvopção.

$ aws --version
aws-cli/1.15.30 Python/3.6.5 Darwin/17.6.0 botocore/1.10.30

Estou renomeando buckets usando o seguinte comando:

aws s3 mv s3://old-bucket s3://new-bucket --recursive
Richard A Quadling
fonte
9
Isso funcionou para mim. No entanto, é importante observar que ele new-bucketdeve ser criado primeiro antes de executar o comando. Além disso, old-bucketele ficará vazio, mas NÃO será excluído. Se você deseja excluí-lo após a transferência de todos os arquivos, use o seguinte comando (sem os colchetes angulares):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn
Se o balde antigo estiver em uso em qualquer lugar, é obviamente uma boa prática copiar o balde, testar com o novo destino e, somente então, excluir o balde antigo. aws s3 mvna verdade, copia e exclui, então os custos financeiros devem ser os mesmos (eu acho).
Flimm