Actualizar
Como lo señaló alberge (+1), hoy en día, la excelente interfaz de línea de comandos de AWS proporciona el enfoque más versátil para interactuar con (casi) todas las cosas de AWS; mientras tanto, cubre la mayoría de las API de servicios y también presenta comandos S3 de nivel superior para tratar con su caso de uso específicamente, consulte la referencia de AWS CLI para S3 :
- sync : sincroniza directorios y prefijos S3. Su caso de uso está cubierto por el Ejemplo 2 (más bien granuloso uso con
--exclude
, --include
y gastos de prefijo etc. también está disponible):
El siguiente comando de sincronización sincroniza los objetos con un prefijo y un depósito especificados con los objetos con otro prefijo y un depósito especificados mediante la copia de los objetos s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Para completar, mencionaré que los comandos S3 de nivel inferior también están disponibles a través del subcomando s3api , lo que permitiría traducir directamente cualquier solución basada en SDK a la AWS CLI antes de adoptar eventualmente su funcionalidad de nivel superior.
Respuesta inicial
El movimiento de archivos entre depósitos de S3 se puede lograr mediante la API PUT Object - Copy (seguida de DELETE Object ):
Esta implementación de la operación PUT crea una copia de un objeto que ya está almacenado en Amazon S3. Una operación de copia PUT es lo mismo que realizar una GET y luego una PUT. Agregar el encabezado de la solicitud, x-amz-copy-source, hace que la operación PUT copie el objeto de origen en el depósito de destino. Fuente
Hay muestras respectivas para todos los SDK de AWS existentes disponibles; consulte Copia de objetos en una sola operación . Naturalmente, una solución basada en secuencias de comandos sería la primera opción obvia aquí, por lo que Copiar un objeto con AWS SDK para Ruby podría ser un buen punto de partida; Si prefiere Python en su lugar, también se puede lograr lo mismo a través de boto , por supuesto, consulte el método copy_key()
en la documentación de la API de S3 de boto .
PUT Object
solo copia archivos, por lo que deberá eliminar explícitamente un archivo a través de DELETE Object
todavía después de una operación de copia exitosa, pero serán solo unas pocas líneas más una vez que el script general que maneja el depósito y los nombres de archivo esté en su lugar (también hay ejemplos respectivos , consulte, por ejemplo, Eliminar un objeto por solicitud ).