He estado buscando una herramienta que me ayude a copiar el contenido de un depósito de AWS S3 en un segundo depósito de AWS S3 sin descargar el contenido primero en el sistema de archivos local.
Intenté usar la opción de copia de la consola de AWS S3, pero eso resultó en la falta de algunos archivos anidados.
Intenté usar la aplicación Transmit (por Panic). El comando duplicado descarga los archivos primero en el sistema local y luego los vuelve a cargar en el segundo depósito, lo cual es bastante ineficiente.
amazon-s3
copy
amazon-web-services
cnicolaou
fuente
fuente
aws configure set default.s3.max_concurrent_requests 200
Consulte esta publicación para obtener más detalles y opciones stackoverflow.com/questions/4663016/…Respuestas:
Copiar entre depósitos de S3
AWS (recientemente) lanzó una interfaz de línea de comandos para copiar entre depósitos.
http://aws.amazon.com/cli/
Esto copiará de un depósito de destino a otro depósito.
Consulte la documentación aquí: Documentación de la CLI de S3
fuente
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Un ejemplo simplificado usando la gema aws-sdk:
Si desea realizar la copia entre diferentes depósitos, especifique el nombre del depósito de destino:
fuente
Ahora puede hacerlo desde la interfaz de administración de S3. Simplemente vaya a un cubo y seleccione todas sus carpetas
actions->copy
. Luego muévete a tu nuevo cuboactions->paste
.fuente
Es posible con la gema aws-sdk reciente , consulte el ejemplo de código:
más detalles: Cómo copiar archivos a través de depósitos usando la gema aws-s3
fuente
Copiar entre depósitos en diferentes regiones
El comando anterior copia un archivo de un depósito en Europa (eu-west-1) a Japón (ap-noreste-1). Puede obtener el nombre del código para la región de su depósito con este comando:
Por cierto, usar Copiar y Pegar en la consola web de S3 es fácil, pero parece que se descarga desde el depósito de origen al navegador y luego se carga al depósito de destino. Usar "aws s3" fue mucho más rápido para mí.
fuente
He creado un ejecutable de Docker de la herramienta s3s3mirror . Una utilidad para copiar y reflejar de un bucket de AWS S3 a otro.
Es un subproceso que permite la COPIA en paralelo y es muy eficiente en la memoria, tiene éxito donde s3cmd falla por completo.
Uso:
Para obtener una lista completa de opciones, pruebe:
fuente
Consulte la documentación a continuación. Supongo que eso es lo que estás buscando. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
La interfaz S3 de RightAws gem tiene una función de copia que hace lo anterior.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
fuente
Me imagino que probablemente ya haya encontrado una buena solución, pero para otras personas que se encuentran con este problema (como lo hice yo recientemente), he creado una utilidad simple específicamente con el propósito de reflejar un bucket de S3 en otro en de una manera altamente concurrente, pero eficiente en CPU y memoria.
Está en github bajo una licencia de Apache aquí: https://github.com/cobbzilla/s3s3mirror
Cuando tiene un cucharón muy grande y busca el máximo rendimiento, puede valer la pena intentarlo.
Si decide probarlo, avíseme si tiene algún comentario.
fuente
Si está en el shell y desea copiar varios archivos pero no todos los archivos: s3cmd cp --recursive s3: // BUCKET1 / OBJECT1 s3: // BUCKET2 [/ OBJECT2]
fuente
Escribí un script que hace una copia de seguridad de un depósito de S3: https://github.com/roseperrone/aws-backup-rake-task
Yo uso esto en una tarea de rake (para una aplicación Rails):
fuente
Escuché que hay un módulo de nodo para eso si estás en javascript: p
De los documentos de knox-copy :
fuente
Me informaron que también puede hacer esto usando s3distcp en un clúster EMR. Se supone que es más rápido para datos que contienen archivos grandes. Funciona lo suficientemente bien en pequeños conjuntos de datos, pero hubiera preferido otra solución dada la curva de aprendizaje que tomó configurar para tan pocos datos (nunca antes había trabajado con EMR).
Aquí hay un enlace de la documentación de AWS: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
Actualización: para el mismo conjunto de datos, s3s3mirror fue mucho más rápido que s3distcp o AWS cli. También es mucho más fácil de configurar.
fuente
Para copiar de un bucket de S3 al mismo oa otro bucket de S3 sin descargarlo a local, es bastante sencillo. Utilice el siguiente comando de shell.
Esto copiará todos los archivos de la
SourceFoldername
carpeta del depósito de origen a la carpeta del depósito de destinoTargetFoldername
. En el código anterior, reemplaceAccessKey
,SecurityKey
yExternalBucket
con sus valores correspondientes.fuente
hdfs
?de AWS cli https://aws.amazon.com/cli/ podría hacer
aws s3 ls
- Esto enumerará todos los cubos de S3aws cp --recursive s3://<source bucket> s3://<destination bucket>
- Esto copiará los archivos de un depósito a otro.Nota * Muy útil al crear depósitos de replicación entre regiones. Al hacer lo anterior, se realiza un seguimiento de todos sus archivos y se propaga una actualización del archivo de la región de origen al depósito replicado. Todo menos las eliminaciones de archivos se sincroniza.
Para CRR, asegúrese de tener habilitado el control de versiones en los depósitos.
fuente
¿Qué tal el
aws s3 sync
comando cli? aws s3 sync s3: // depósito1 / s3: // depósito2 /fuente
Como ha explicado Neel Bhaat en este blog , hay muchas herramientas diferentes que se pueden utilizar para este propósito. Algunos son proporcionados por AWS, donde la mayoría son herramientas de terceros. Todas estas herramientas requieren que guarde la clave y el secreto de su cuenta de AWS en la propia herramienta. Tenga mucho cuidado al usar herramientas de terceros, ya que las credenciales en las que ahorra pueden costarle todo su valor y dejarlo muerto.
Por lo tanto, siempre recomiendo usar la AWS CLI para este propósito. Simplemente puede instalar esto desde este enlace . A continuación, ejecute el siguiente comando y guarde su clave, valores secretos en AWS CLI.
Y use el siguiente comando para sincronizar su AWS S3 Bucket con su máquina local. (La máquina local debe tener AWS CLI instalada)
Ejemplos:
1) Para AWS S3 a almacenamiento local
2) Del almacenamiento local a AWS S3
3) De un bucket de AWS s3 a otro bucket
fuente
La mejor forma de copiar el bucket de S3 es mediante la AWS CLI .
Implica estos 3 pasos:
Si está copiando depósitos entre dos cuentas de AWS, debe adjuntar la política correcta a cada depósito.
Después de esto, use este comando para copiar de un depósito a otro.
Los detalles del paso 2 y el paso 3 se dan en este enlace:
fuente
Puede escribir una aplicación Java, tal vez incluso una aplicación GUI SWING que utilice las API de AWS Java. Para copiar objetos, consulte:
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/CopyObject.java
fuente