Cómo mover el cubo S3 a una ubicación diferente

20

Usamos S3 para almacenar millones de entradas en nuestra aplicación web, ahora trasladamos todo a EC2, servidores de la UE, y también queremos mover esos datos S3 a la UE. Pero el depósito que utilizamos está en EE. UU., Y parece que no hay ninguna herramienta para mover todo el contenido del depósito a un depósito diferente.

También hay un problema sobre cómo sincronizar los datos más adelante cuando cambiamos al depósito de la UE, los datos que se crearán mientras se ejecuta la migración.

skrat
fuente

Respuestas:

18

La nueva CLI oficial de AWS admite de forma nativa la mayor parte de la funcionalidad de s3cmd.

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1 --region us-west-2
AB
fuente
¿Dónde puede encontrar una lista de nombres de regiones?
Bart
Puede encontrar las regiones S3 aquí: docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Estas son casi idénticas a las regiones EC2 que obtiene aws ec2 describe-regions, pero us-east-1también se conoce como Estándar de EE. UU. Para S3 y es algo diferente por razones históricas.
AB
5

Supongo que puedes correr:

s3cmd --recursive cp s3://oldbucket/ s3://newbucket

Debería copiarlo directamente.

Alexey
fuente
CLI dice: "comando no encontrado"
bart
3

No conozco una solución empaquetada para hacer esto, pero esencialmente es solo una LISTA de cubos y luego PONER-copiar cada objeto del cubo de EE. UU. Al cubo de la UE. La API PUT-copy admite "if-modified-since" y "if-none-match", por lo que puede ejecutarlo repetidamente sin duplicar esfuerzos: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ API / index.html? RESTObjectCOPY.html

Para una migración en vivo, sugeriría el siguiente enfoque:

  1. Primer paso opcional: si tiene una gran cantidad de datos para migrar, considere usar AWS Import / Export para capturar la primera instantánea de los datos en un dispositivo físico en los EE. UU. Y enviarlos físicamente a la UE. Esto puede ahorrarle tiempo y dinero.
    • Configure una secuencia de comandos para migrar datos de EE. UU. A la UE utilizando if-modified-since o if-none-match como se describió anteriormente. Haga que sea lo suficientemente inteligente como para no obtener datos frescos de la UE con datos obsoletos de los Estados Unidos (una vez que llegue al paso 5 a continuación). Ejecútelo continuamente en un bucle hasta que los dos cubos estén aproximadamente en el mismo estado.
    • Modifique su aplicación web para PONER datos en los cubos de EE. UU. Y de la UE al mismo tiempo, mientras continúa OBTENIENDO datos exclusivamente de los EE. UU.
    • Continúe ejecutando su secuencia de comandos de migración hasta que esté seguro de que los depósitos están exactamente en el mismo estado (o lo más cerca posible, dada la consistencia eventual).
    • Modifique la aplicación web nuevamente para OBTENER datos exclusivamente del depósito de la UE.
    • Ahora puede desactivar su script de migración.
    • Busque eventuales anomalías de consistencia y límpielas.
    • Modifique la aplicación web para dejar de PONER datos en el depósito de EE. UU.
    • BORRAR todo en el cubo de EE. UU.

Es posible que desee utilizar el almacenamiento de redundancia reducida S3 en su bucket de la UE durante la migración para obtener tasas de datos más baratas y tiempos de respuesta más rápidos, ya que los datos son solo un duplicado de los datos de EE. UU.

user44700
fuente
0

He trabajado bastante con S3 y nunca me he encontrado con una herramienta que lo haga de forma nativa. Sin embargo, no sería tan difícil usar un par de scripts de sincronización s3cmd-sync para mantener dos cubos sincronizados entre sí.

EEAA
fuente
sí, eso funcionaría, pero requiere que descarguemos todo localmente, mientras que S3 API admite mover / copiar entradas sin descargarlas.
skrat