Cómo cambiar el nombre de AWS S3 Bucket name


150

Después de todos los trabajos difíciles de la migración, etc. Solo tenga en cuenta que si es necesario servir el contenido utilizando CNAME (por ejemplo, media.abc.com). El nombre del depósito debe comenzar con media.abc.com/S3/amazon.com para garantizar que funcione perfectamente.

Solo tenga en cuenta que S3 no permite el cambio de nombre directo desde la consola.

¿Hay alguna forma de evitar esto?

Respuestas:


104

Creo que la única forma es crear un nuevo cubo con el nombre correcto y luego copiar todos los objetos del viejo cubo al nuevo. Puede hacerlo usando Aws CLI.


2
¿Hay algún cargo por la solución anterior @navjot?
pavitran

@pavitran no, ese sigue siendo el camino a seguir
Tashows

8
@Tashows pavitran estaba preguntando sobre cambios, no cambios. Hasta donde sé, de hecho, hay cargos por copiar artículos de cubeta, creo que 1 costo de operación GET y 1 PUT para cada artículo.
Guival

55
@Tashows En realidad, en realidad hay una entrada para las operaciones de COPIA en la tabla de precios para S3 , en realidad es el mismo costo que hacer un PUT (por lo que no hay un costo GET adicional).
Guival

3
Tenga en cuenta que también puede cortar y pegar usando la consola web, para las personas que no quieren hacer esto a través de la CLI.
mahemoff

241

Solución

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

Explicación

No hay funcionalidad de cambio de nombre para S3 porque técnicamente no hay carpetas en S3, por lo que tenemos que manejar todos los archivos dentro del depósito.

El código anterior 1. creará un nuevo depósito, 2. copiará los archivos y 3. eliminará el depósito anterior. Eso es.

Si tiene muchos archivos en su bucket y le preocupan los costos, siga leyendo. Detrás de escena, lo que sucede es que todos los archivos dentro del depósito se copian primero y luego se eliminan. Debería costar una cantidad insignificante si tiene unos pocos miles de archivos. De lo contrario, verifique esta respuesta para ver cómo esto lo impactaría.

Ejemplo

En el siguiente ejemplo, creamos y rellenamos el cubo antiguo y luego sincronizamos los archivos con el nuevo. Verifique la salida de los comandos para ver qué hace AWS.

> # 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

8
Esta respuesta es la misma que la respuesta aceptada, excepto que esta publicación ofrece un ejemplo muy útil paso a paso de cómo hacerlo. (Sin embargo, el ejemplo debería acortarse. No es necesario mostrar la creación de un cubo antiguo de ejemplo y usar una variable de sufijo). Sin embargo, la parte explicativa de esta respuesta no me satisface. Dice que la falta de carpetas en S3 es la razón por la cual se requiere este procedimiento incómodo. Como la pregunta original no mencionaba las carpetas, no entiendo cómo eso explica la imposibilidad de cambiar el nombre de los cubos S3.
LS

2
Probé este método ... parecía funcionar ... sin embargo, por alguna extraña razón, no puedo ver ninguno de los elementos (imágenes). Puedo navegar a través del navegador a través de los elementos en el tablero de mandos s3 ... pero no puedo verlos a través de una url o descargarlos. Alguna idea de por qué? Los permisos parecen ser idénticos. ¿Hay algunos permisos especiales a tener en cuenta?
bmiskie

1
@duality_ puede agregar a su notificación de respuesta sobre permisos y que puede copiar archivos con --acl bucket-owner-full-control(como en esa respuesta )
Евгений Масленков

1
Tenga en cuenta que también debe especificar la región, de lo contrario, sus nuevos cubos estarán en el este de EE. UU. Ej . aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy

1
Si tiene el control de versiones activado
deberá

38

Probablemente una versión posterior del kit de herramientas de AWS CLI proporcionó la mvopción.

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

Estoy cambiando el nombre de los cubos con el siguiente comando:

aws s3 mv s3://old-bucket s3://new-bucket --recursive

9
Esto funcionó para mí. Sin embargo, es importante tener en cuenta que new-bucketdebe crearse primero antes de ejecutar el comando. Además, el old-bucketestará vacío pero NO eliminado. Si desea eliminarlo después de la transferencia de todos los archivos, use el siguiente comando (sin los corchetes angulares):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

Si el antiguo depósito está en uso en cualquier lugar, obviamente es una buena práctica copiar el depósito, probarlo con el nuevo destino y solo entonces, eliminar el depósito anterior. aws s3 mven realidad copia y elimina, por lo que los costos financieros deberían ser los mismos (creo).
Flimm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.