Aggiornare
Come sottolineato da alberge (+1), oggigiorno l'eccellente AWS Command Line Interface fornisce l'approccio più versatile per interagire con (quasi) tutte le cose AWS - nel frattempo copre la maggior parte delle API dei servizi e presenta anche comandi S3 di livello superiore per gestire il tuo caso d'uso in particolare, consulta il riferimento AWS CLI per S3 :
- sync - Sincronizza directory e prefissi S3. Il vostro caso d'uso è coperto da Esempio 2 (più grana fine utilizzo con
--exclude
, --include
e la gestione del prefisso ecc è anche disponibile):
Il seguente comando di sincronizzazione sincronizza gli oggetti con un prefisso e un bucket specificato con gli oggetti con un altro prefisso e bucket specificato, copiando gli oggetti s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Per completezza, menzionerò che i comandi S3 di livello inferiore sono ancora disponibili anche tramite il comando secondario s3api , che consentirebbe di tradurre direttamente qualsiasi soluzione basata su SDK nell'AWS CLI prima di adottare eventualmente la sua funzionalità di livello superiore.
Risposta iniziale
Lo spostamento di file tra i bucket S3 può essere ottenuto mediante PUT Object - Copy API (seguito da DELETE Object ):
Questa implementazione dell'operazione PUT crea una copia di un oggetto già archiviato in Amazon S3. Un'operazione di copia PUT equivale a eseguire un GET e quindi un PUT. L'aggiunta dell'intestazione della richiesta, x-amz-copy-source, fa sì che l'operazione PUT copi l'oggetto di origine nel bucket di destinazione. fonte
Sono disponibili rispettivi esempi per tutti gli SDK AWS esistenti, consulta Copia di oggetti in un'unica operazione . Naturalmente, una soluzione basata su script sarebbe la prima scelta ovvia qui, quindi copiare un oggetto utilizzando l'SDK AWS per Ruby potrebbe essere un buon punto di partenza; se preferisci invece Python, lo stesso può essere ottenuto anche tramite boto , ovviamente, vedi il metodo copy_key()
nella documentazione dell'API S3 di boto .
PUT Object
copia solo i file, quindi dovrai eliminare esplicitamente un file tramite DELETE Object
ancora dopo un'operazione di copia riuscita, ma saranno solo poche righe una volta che lo script generale che gestisce il bucket e i nomi dei file è a posto (ci sono anche i rispettivi esempi , vedere ad esempio Eliminazione di un oggetto per richiesta ).