¿Mover archivos directamente de una cuenta S3 a otra?

90

Pregunta bastante básica, pero no he podido encontrar una respuesta. Con Transit puedo "mover" archivos de un bucket de S3 en una cuenta de AWS a otro bucket de S3 en otra cuenta de AWS, pero lo que realmente hace es descargar los archivos del primero y luego subirlos al segundo.

¿Hay alguna forma de mover archivos directamente de una cuenta S3 a otra sin descargarlos en el medio?

Andrés
fuente

Respuestas:

22

Si solo está buscando una solución lista para usar, existen algunas soluciones que pueden hacer esto. Bucket Explorer funciona en Mac y Windows y puede copiar entre cuentas al igual que Cloudberry S3 Explorer y S3 Browser, pero son solo para Windows, por lo que es posible que no funcionen para usted.

Sospecho que la consola de AWS también podría hacerlo con la configuración de permisos adecuada, pero no lo he probado.

También puede hacerlo mediante la API de AWS siempre que haya otorgado permisos de escritura a la cuenta de AWS que está usando en el depósito de destino.

Geoff Appleford
fuente
+1 para Bucket Explorer. Mucho más fácil que la consola de administración de AWS o s3cmd para copiar un depósito entre cuentas. El segundo conjunto de instrucciones funcionó para mí con su prueba gratuita: bucketexplorer.com/documentation/…
LennonR
Cloudberry es el camino a seguir. Gratis, además es fácil de arrastrar y soltar después de una configuración aún más sencilla. Y no, no trabajo allí :)
skidadon
3
¿Bucket Explorer descarga y vuelve a cargar los datos o los mueve directamente entre los servidores de Amazon?
Wouter
Tenga en cuenta que la versión de prueba de Cloudberry (versión 5.0.0.32 al menos) tiene un límite de transferencia de 5 GB.
DarthPablo
123

Sí, hay una manera. Y es bastante simple, aunque es difícil encontrarlo. 8)

Por ejemplo, suponga que el primer nombre de usuario de su cuenta es [email protected] y el segundo es [email protected].

Abra la Consola de administración de AWS como acc1. Vaya a las propiedades del bucket de Amazon S3 y, en la pestaña "Permisos", haga clic en "Agregar más permisos". A continuación, agregue permisos de visualización y lista para "usuarios autenticados".

A continuación, en AWS IAM (se puede acceder desde entre las pestañas de la consola) de acc2, cree un usuario con acceso completo al bucket de S3 (para estar más seguro, puede configurar permisos exactos, pero prefiero crear un usuario temporal para la transferencia y luego eliminarlo).

Luego puede usar s3cmd (usando las credenciales del usuario recién creado en acc2) para hacer algo como:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Toda la transferencia se realizará por parte de Amazon.

side2k
fuente
8
¡Buen consejo! También para sincronizar cubos enteros à la rsync, puede usar s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll
6
Si tiene problemas con un 403 AccessDenied al copiar archivos de destino a host, consulte esta publicación. Puede haber otra forma de hacerlo, pero los resultados aquí funcionaron para mí. alfielapeter.com/posts/…
crlane
¿qué pasa con los cubos algo grandes? digamos que en el área de 50gb, ¿te da algún problema?
ianstarz
4
s3cmdtambién se puede instalar con homebrew, fyi
ianstarz
3
si su depósito de destino está destinado a servir archivos públicamente ... es posible que desee agregar de lo --acl-publiccontrario, todos los archivos son privados (al menos lo era para mí cuando ejecuté el comando). con tantos archivos privados, tuve que agregar una política en el depósito para hacerlos públicos nuevamente
choonkeat
58

Use aws cli (utilicé la instancia de ubuntu 14 ec2) y simplemente ejecute el siguiente comando:

aws s3 sync s3://bucket1 s3://bucket2

Deberá especificar los detalles de la cuenta para uno y tener acceso público de escritura o acceso público de lectura al otro.

Esto sincronizará los dos depósitos. Puede usar el mismo comando nuevamente más tarde para sincronizar rápidamente. La mejor parte es que no parece requerir ningún ancho de banda (por ejemplo, los archivos no pasan por la computadora local).

Programador
fuente
3
En un cubo muy grande tuve más suerte con esto. s3cmd pareció detenerse al generar la lista de archivos en el primer depósito. Puede que se haya completado, pero me impacienté.
pensar demasiado el
2
Tuve la misma experiencia; por la razón que sea, aws s3 syncparece correr un orden de magnitud más rápido que s3cmd cp.
pix0r
2
Esto funcionó para mí. Si tiene problemas de permisos, intente usar la --grantsopción. Más información en la documentación: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen
3
Los permisos no se copian cuando sincroniza, por lo que tendrá que especificar --grants. Aprendí esto después de copiar una tonelada de datos y luego tuve que rehacer la sincronización en un nuevo depósito. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersestablece permisos de lectura para usuarios públicos.
Dan Sandland
Esto funcionó aproximadamente 10 veces más rápido que s3cmdpara mí, y también puede sincronizar archivos de cambio en lugar de volver a copiar todo si necesita volver a ejecutar el comando en el futuro, ¡mucho mejor!
nfm
5

boto funciona bien. Vea este hilo . Con boto, copia objetos directamente de un depósito a otro, en lugar de descargarlos a la máquina local y subirlos a otro depósito.

Rosa Perrone
fuente
3

En Mac OS X, usé la aplicación Transmit de Panic. Abrí una ventana para cada cuenta S3 (usando las claves y secretos API). Entonces podría arrastrar de un cubo en una ventana a otro cubo en la otra ventana. No es necesario descargar archivos localmente primero .

Andrew tiene razón, Transmit descarga los archivos localmente y luego carga los archivos.

Un salto gigante AB
fuente
2
Tengo Transmit, y estoy 99% seguro de que la transferencia que estás describiendo descarga los archivos a una carpeta temporal y luego los carga al otro servidor. ¿Está seguro de que los archivos no fluyeron a través de su computadora?
Andrew
1
¿Alguien puede confirmar esto?
David Mauricio
2
Confirmo. Transmita descargas y subidas. Esto hace que las cosas sean terriblemente lentas, pero tiene la gran ventaja de almacenar el contenido copiado con el propietario correcto.
Fabio Russo
3

Mover archivos S3 de una cuenta a otra cuenta

Consideremos que hay dos cuentas, cuenta de origen y cuenta de destino. Y dos cubos source-buckety destination bucket. Queremos mover todos los archivos de source-bucketa destination-bucket. Podemos hacerlo siguiendo los siguientes pasos:

  1. aws configure
    • Configure su cuenta de destino con la credencial o el rol de IAM.
  2. Cree una política de usuario para el usuario de la cuenta de destino.
  3. Otorgue acceso al usuario de destino al depósito de origen modificando la política del depósito de origen y agregando la política de usuario de la cuenta de destino. De esta forma, el usuario de destino tendrá acceso a source-bucket.
  4. aws s3 ls s3://source-bucket/
    • esto comprobará si la cuenta de destino tiene acceso a source-bucket. Solo para confirmar haz esto.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • esto copiará todos los archivos del depósito de origen en el depósito de destino. Todos los archivos se copian con el indicador --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • esto moverá todos los archivos de source-bucket a destination-bucket.

Alternativamente, puede usar el comando de sincronización: aws s3 sync s3://source-bucket s3://detination-bucket

Para una mejor explicación, siga el enlace

Anand Tripathi
fuente
2

CrossFTP puede copiar archivos S3 directamente de un depósito a otro sin descargarlos. Es un cliente GUI S3 que funciona en Windows, Mac y Linux.

Gatorhall
fuente
4
Cabe señalar que esto solo es posible con la versión de pago. No es una solución gratuita.
Michael Brook
2

Puede utilizar Cyberduck (código abierto)

Marco Delavegua
fuente
En la tienda de Windows cobran algo por descargar esto, pero desde su sitio web puedes conseguirlo gratis. Después de crear un ID de clave de acceso de AWS y una clave de acceso secreta, logré conectarme a mi almacenamiento S3. Aún no probé la copia de nada, pero parece que podría funcionar.
Wouter
1

Para archivos recién creados (NO objetos existentes), puede aprovechar la nueva funcionalidad de AWS. Es la replicación entre regiones (en "Control de versiones" para el bucket de S3). Puede crear una política que le permitirá replicar nuevos objetos en un depósito en una cuenta diferente.

En el caso de los objetos existentes, deberá copiar sus objetos con otro método, a menos que AWS introduzca una funcionalidad nativa para esto en el futuro.

Jorge el curioso
fuente
0

Uno puede hacerlo ejecutando lo siguiente:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Adjunte una política de depósito al depósito de origen en Cuenta de origen.

  2. Adjunte una política de AWS Identity and Access Management (IAM) a un usuario o rol en la cuenta de destino.

  3. Utilice el usuario o la función de IAM en la cuenta de destino para realizar el movimiento entre cuentas.

svikramjeet
fuente