Configurare AWS CLI e AWS S3
Prima di iniziare a sincronizzare i file con S3, doverai installare e configurare correttamente l'AWS CLI. Potrebbe sembrare intimidatorio se sei alle prime armi con AWS, ma ti porterà via solo un paio di minuti.
La configurazione della CLI prevede due passaggi principali: installazione dello strumento e configurazione. Vedremo entrambi i passaggi di seguito.
Installare l'AWS CLI
L'installazione dell'AWS CLI varia leggermente a seconda del sistema operativo.
Per sistemi Windows:
- Vai alla pagina di download dell'AWS CLI download page
- Scarica il programma di installazione per Windows (64-bit)
- Esegui l'installer e segui le istruzioni
Per sistemi Linux:
Esegui i seguenti tre comandi dal Terminale:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Per sistemi macOS:
Se hai Homebrew installato, esegui questa riga dal Terminale:
brew install awscli
Se non hai Homebrew, usa invece questi due comandi:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Puoi eseguire il comando aws --version su tutti i sistemi operativi per verificare che AWS CLI sia stato installato. Ecco cosa dovresti vedere:

Immagine 1 - Versione AWS CLI
Configurare l'AWS CLI
Ora che hai installato la CLI, devi configurarla con le tue credenziali AWS.
Supponendo che tu abbia già un account AWS, accedi e vai al servizio IAM. Una volta lì, crea un nuovo utente con accesso programmatico. Assegna all'utente le autorizzazioni appropriate, almeno l'accesso a S3:

Immagine 2 - Utente AWS IAM
Una volta fatto, vai su "Security credentials" per creare una nuova access key. Dopo la creazione, avrai sia l'Access key ID sia la Secret access key. Annotale in un posto sicuro perché non potrai più visualizzarle in futuro:

Immagine 3 - Credenziali utente AWS IAM
Tornando al Terminale, esegui il comando aws configure. Ti chiederà di inserire l'Access key ID, la Secret access key, la regione (eu-central-1 nel mio caso) e il formato di output preferito (json):

Immagine 4 - Configurazione AWS CLI
Per verificare di essere connesso correttamente al tuo account AWS dalla CLI, esegui il seguente comando:
aws sts get-caller-identity
Questo è l'output che dovresti vedere:

Immagine 5 - Comando di test connessione AWS CLI
E questo è tutto: manca solo un passaggio prima di poter iniziare a usare il comando S3 sync!
Creare un bucket AWS S3
L'ultimo passaggio è creare un bucket S3 che conterrà i tuoi file sincronizzati. Puoi farlo dalla CLI o dalla AWS Management Console. Io userò la seconda opzione, per variare un po'.
Per iniziare, vai alla pagina del servizio S3 nella Management Console e clicca sul pulsante "Create bucket". A questo punto, scegli un nome bucket univoco (univoco a livello globale su tutto AWS) e poi scorri fino in fondo e clicca su "Create":

Immagine 6 - Creazione bucket AWS
Il bucket è stato creato e lo vedrai subito nella console di gestione. Puoi anche verificare la creazione tramite CLI:
aws s3 ls

Immagine 7 - Tutti i bucket S3 disponibili
Ricorda che i bucket S3 sono privati per impostazione predefinita. Se prevedi di usare il bucket per ospitare file pubblici (come asset di siti web), dovrai regolare le policy e le autorizzazioni del bucket di conseguenza.
Ora è tutto pronto per iniziare a sincronizzare i file tra la tua macchina locale e AWS S3!
Comando base AWS S3 Sync
Ora che hai installato e configurato l'AWS CLI e un bucket S3 pronto all'uso, è il momento di iniziare a sincronizzare! La sintassi base del comando AWS S3 sync è piuttosto semplice. Ecco come funziona.
Il comando S3 sync segue questo schema semplice:
aws s3 sync <source> <destination> [options]
Sia l'origine che la destinazione possono essere un percorso di directory locale o un URI S3 (che inizia con s3://). A seconda della direzione della sincronizzazione, li disporrai in modo diverso.
Sincronizzare file dal locale a un bucket S3
Di recente ho smanettato con la deep research di Ollama. Diciamo che quella è la cartella che voglio sincronizzare su S3. La directory principale si trova nella cartella Documents. Ecco com'è fatta:

Contenuti della cartella locale
Questo è il comando che devo eseguire per sincronizzare la cartella locale code-files con la cartella backup sul bucket S3:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup
La cartella backup sul bucket S3 verrà creata automaticamente se non esiste.
Ecco cosa vedrai stampato in console:

Immagine 9 - Processo di S3 sync
Dopo un paio di secondi, i contenuti della cartella locale code-files sono disponibili sul bucket S3:

Immagine 10 - Contenuti del bucket S3
Il bello di S3 sync è che carica solo i file che non esistono nella destinazione o che sono stati modificati localmente. Se esegui di nuovo lo stesso comando senza cambiare nulla, non vedrai... nulla! Questo perché l'AWS CLI ha rilevato che tutti i file sono già sincronizzati e aggiornati.
Ora farò due piccole modifiche: creo un nuovo file (new_file.txt) e aggiorno uno esistente (requirements.txt). Quando esegui di nuovo il comando di sincronizzazione, verranno caricati solo i file nuovi o modificati:

Immagine 11 - Processo di S3 sync (2)
Ed è tutto ciò che devi sapere per sincronizzare cartelle locali su S3. Ma se volessi fare il contrario?
Sincronizzare file dal bucket S3 a una directory locale
Se vuoi scaricare i file dal tuo bucket S3 sulla macchina locale, inverti semplicemente origine e destinazione:
aws s3 sync s3://testbucket-dradecic/backup /Users/dradecic/Documents/code-files-from-s3
Questo comando scaricherà tutti i file dalla cartella backup del tuo bucket S3 in una cartella locale chiamata code-files-from-s3 . Anche in questo caso, se la cartella locale non esiste, la CLI la creerà per te:

Immagine 12 - Sincronizzazione da S3 a locale
Vale la pena notare che S3 sync non è bidirezionale. Va sempre da origine a destinazione, facendo sì che la destinazione rispecchi l'origine. Se elimini un file localmente e poi sincronizzi su S3, esisterà comunque su S3. Allo stesso modo, se elimini un file su S3 e sincronizzi da S3 a locale, il file locale rimarrà intatto.
Se vuoi che la destinazione corrisponda esattamente all'origine (incluse le eliminazioni), dovrai usare il flag --delete, che vedremo nella sezione opzioni avanzate.
Opzioni avanzate di AWS S3 Sync
Il comando S3 sync di base visto prima è già potente, ma AWS lo ha arricchito con opzioni aggiuntive che ti danno più controllo sul processo di sincronizzazione.
In questa sezione, vedrai alcuni dei flag più utili da aggiungere al comando base.
Sincronizzare solo file nuovi o modificati
Per impostazione predefinita, S3 sync usa un meccanismo di confronto di base che verifica dimensione del file e ora di modifica per determinare se un file deve essere sincronizzato. Tuttavia, questo approccio potrebbe non cogliere sempre tutte le modifiche, soprattutto con file che sono stati modificati ma mantengono la stessa dimensione.
Per una sincronizzazione più precisa, puoi usare il flag --exact-timestamps:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exact-timestamps
Questo forza S3 sync a confrontare i timestamp con precisione al millisecondo. Tieni presente che l'uso di questo flag potrebbe rallentare leggermente il processo di sincronizzazione poiché richiede confronti più dettagliati.
Escludere o includere file specifici
A volte non vuoi sincronizzare ogni file in una directory. Magari vuoi escludere file temporanei, log o determinati tipi di file (come .DS_Store nel mio caso). Ecco dove tornano utili i flag --exclude e --include.
Per fare un esempio, diciamo che voglio sincronizzare la mia directory di codice ma escludere tutti i file Python:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exclude "*.py"
Ora molti meno file vengono sincronizzati su S3:

Immagine 13 - S3 sync con file Python esclusi
Puoi anche combinare --exclude e --include per creare pattern più complessi. Ad esempio, escludi tutto tranne i file Python:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --exclude "*" --include "*.py"
I pattern vengono valutati nell'ordine specificato, quindi l'ordine conta! Ecco cosa vedrai usando questi flag:

Immagine 14 - Flag exclude e include
Ora vengono sincronizzati solo i file Python e mancano file di configurazione importanti.
Eliminare file dalla destinazione
Per impostazione predefinita, S3 sync aggiunge o aggiorna solo i file nella destinazione: non li elimina mai. Ciò significa che, se elimini un file dall'origine, rimarrà comunque nella destinazione dopo la sincronizzazione.
Per fare in modo che la destinazione rispecchi esattamente l'origine, incluse le eliminazioni, usa il flag --delete:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --delete
Se lo esegui per la prima volta, tutti i file locali verranno sincronizzati su S3:

Immagine 15 - Flag delete
Questo è particolarmente utile per mantenere repliche esatte delle directory. Ma fai attenzione: se usato in modo errato, questo flag può causare perdita di dati.
Mettiamo che elimini config.py dalla mia cartella locale ed esegua il comando di sincronizzazione con il flag --delete:

Immagine 16 - Flag delete (2)
Come puoi vedere, il comando non solo sincronizza i file nuovi e modificati, ma elimina anche i file dal bucket S3 che non esistono più nella directory locale.
Impostare il dry run per una sincronizzazione sicura
Le operazioni S3 sync più rischiose sono quelle che coinvolgono il flag --delete. Per evitare di eliminare accidentalmente file importanti, puoi usare il flag --dryrun per simulare l'operazione senza apportare alcuna modifica:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --delete --dryrun
Per dimostrare, ho eliminato i file requirements.txt e settings.toml da una cartella locale e poi ho eseguito il comando:

Immagine 17 - Dry run
Questo ti mostrerà esattamente cosa accadrebbe se eseguissi davvero il comando, inclusi i file che verrebbero caricati, scaricati o eliminati.
Consiglio sempre di usare --dryrun prima di eseguire qualsiasi comando S3 sync con il flag --delete, soprattutto quando lavori con dati importanti.
Ci sono molte altre opzioni disponibili per il comando S3 sync, come --acl per impostare le autorizzazioni, --storage-class per scegliere il livello di storage S3 e --recursive per attraversare le directory. Dai un'occhiata alla documentazione ufficiale dell'AWS CLI per l'elenco completo delle opzioni.
Ora che conosci le opzioni base e avanzate di S3 sync, vediamo come usare questi comandi per scenari pratici come backup e ripristino.
Usare AWS S3 Sync per backup e ripristino
Uno degli use case più popolari per AWS S3 sync è eseguire il backup di file importanti e ripristinarli quando necessario. Vediamo come implementare una semplice strategia di backup e ripristino usando il comando sync.
Creare backup su S3
Creare backup con S3 sync è semplice: ti basta eseguire il comando di sincronizzazione dalla tua directory locale a un bucket S3. Tuttavia, ci sono alcune best practice da seguire per backup efficaci.
Per iniziare, è una buona idea organizzare i backup per data o versione. Ecco un approccio semplice che usa un timestamp nel percorso S3:
# Create a timestamp variable
TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)
# Run the backup
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backups/$TIMESTAMP
Questo crea una nuova cartella per ogni backup con un timestamp come 2025-03-10-18-56-42. Ecco cosa vedrai su S3:

Immagine 18 - Backup con timestamp
Per i dati critici, potresti voler mantenere più versioni dei backup. È facile farlo eseguendo regolarmente il backup basato su timestamp.
Puoi anche usare l'opzione --storage-class per specificare una classe di archiviazione più conveniente in termini di costi per i tuoi backup:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backups/$TIMESTAMP --storage-class STANDARD_IA

Immagine 19 - Contenuti del backup con classe di storage personalizzata
Questo usa la classe di archiviazione S3 Infrequent Access, che costa meno ma prevede una piccola tariffa di recupero. Per l'archiviazione a lungo termine, puoi persino usare la classe Glacier:
aws s3 sync /Users/dradecic/Documents/important-data s3://testbucket-dradecic/backups/$TIMESTAMP --storage-class GLACIER
Tieni solo presente che i file archiviati in Glacier richiedono ore per essere recuperati, quindi non sono adatti a dati di cui potresti aver bisogno rapidamente.
Ripristinare file da S3
Il ripristino da un backup è altrettanto semplice: inverte semplicemente origine e destinazione nel comando di sincronizzazione:
# Restore from the most recent backup (assuming you know the timestamp)
aws s3 sync s3://testbucket-dradecic/backups/2025-03-10-18-56-42 /Users/dradecic/Documents/restored-data
Questo scaricherà tutti i file da quello specifico backup nella tua directory locale restored-data:

Immagine 20 - Ripristino di file da S3
Se non ricordi il timestamp esatto, puoi prima elencare tutti i tuoi backup:
aws s3 ls s3://testbucket-dradecic/backups/
Che ti mostrerà qualcosa del genere:

Immagine 21 - Elenco dei backup
Puoi anche ripristinare file o directory specifiche da un backup usando i flag exclude/include discussi in precedenza:
# Restore only the config files
aws s3 sync s3://testbucket-dradecic/backups/2025-03-10-18-56-42 /Users/dradecic/Documents/restored-configs --exclude "*" --include "*.config" --include "*.toml" --include "*.yaml"
Per sistemi mission-critical, ti consiglio di automatizzare i backup con attività pianificate (come cron job su Linux/macOS o Utilità di pianificazione su Windows). In questo modo ti assicuri di eseguire regolarmente il backup dei dati senza doverlo ricordare manualmente.
Risoluzione dei problemi di AWS S3 Sync
AWS S3 sync è uno strumento affidabile, ma potresti occasionalmente incontrare problemi. Tuttavia, la maggior parte degli errori che vedrai è dovuta a fattore umano.
Errori di sincronizzazione comuni
Vediamo alcuni problemi comuni e le relative soluzioni.
- Access denied error di solito significa che il tuo utente IAM non ha le autorizzazioni necessarie per accedere al bucket S3 o eseguire operazioni specifiche. Per risolvere, prova una delle seguenti opzioni:
- Controlla che il tuo utente IAM abbia le autorizzazioni S3 appropriate (
s3:ListBucket,s3:GetObject,s3:PutObject). - Verifica che la bucket policy non neghi esplicitamente l'accesso al tuo utente.
- Assicurati che il bucket non stia bloccando l'accesso pubblico se ti servono operazioni pubbliche.
- No such file or directory appare in genere quando il percorso di origine specificato nel comando di sincronizzazione non esiste. La soluzione è semplice: ricontrolla i percorsi e assicurati che esistano. Presta particolare attenzione a refusi nei nomi dei bucket o nelle directory locali.
- File size limit può verificarsi quando vuoi sincronizzare file di grandi dimensioni. Per impostazione predefinita, S3 sync può gestire file fino a 5GB. Per file più grandi, potresti vedere timeout o trasferimenti incompleti.
- Per file più grandi di 5GB, dovresti usare il flag
--only-show-errorscombinato con--size-only. Questa combinazione aiuta con i trasferimenti di grandi file riducendo al minimo l'output e confrontando solo le dimensioni dei file:
aws s3 sync /Users/dradecic/large-files s3://testbucket-dradecic/large-files --only-show-errors --size-only
Ottimizzazione delle prestazioni di sincronizzazione
Se la tua sincronizzazione S3 è più lenta del previsto, ci sono alcuni accorgimenti per velocizzarla.
- Usa trasferimenti paralleli. Per impostazione predefinita, S3 sync usa un numero limitato di operazioni parallele. Puoi aumentarlo con il parametro
--max-concurrent-requests:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --max-concurrent-requests 20
- Regola la dimensione dei chunk. Per file grandi, puoi ottimizzare la velocità di trasferimento regolando la dimensione dei chunk. Questo suddivide i file grandi in chunk da 16MB invece degli 8MB predefiniti, che può essere più veloce con buone connessioni di rete:
aws s3 sync /Users/dradecic/large-files s3://testbucket-dradecic/backup --cli-read-timeout 120 --multipart-threshold 64MB --multipart-chunksize 16MB
- Usa
--no-progressnegli script. Se esegui S3 sync in uno script automatizzato, usa il flag--no-progressper ridurre l'output e migliorare le prestazioni:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --no-progress
- Usa endpoint locali. Se le tue risorse AWS sono nella stessa regione, specificare l'endpoint regionale può ridurre la latenza:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --endpoint-url https://s3.eu-central-1.amazonaws.com
Queste ottimizzazioni possono migliorare significativamente le prestazioni di sincronizzazione, soprattutto per trasferimenti di dati grandi o quando si lavora su macchine meno potenti.
Se riscontri ancora problemi dopo aver provato queste soluzioni, l'AWS CLI ha un'opzione di debug integrata. Aggiungi semplicemente --debug al tuo comando per vedere informazioni dettagliate su ciò che accade durante il processo di sincronizzazione:
aws s3 sync /Users/dradecic/Documents/code-files s3://testbucket-dradecic/backup --debug
Aspettati di vedere molti messaggi di log dettagliati, simili a questi:

Immagine 22 - Esecuzione della sincronizzazione in modalità debug
E questo è praticamente tutto per quanto riguarda la risoluzione dei problemi con AWS S3 sync. Certo, possono verificarsi altri errori, ma nel 99% dei casi troverai la soluzione in questa sezione.
Ricapitolando AWS S3 Sync
In sintesi, AWS S3 sync è uno di quegli strumenti rari che sono sia semplici da usare sia incredibilmente potenti. Hai imparato tutto, dai comandi di base alle opzioni avanzate, strategie di backup e consigli per la risoluzione dei problemi.
Per sviluppatori, amministratori di sistema o chiunque lavori con AWS, il comando S3 sync è essenziale: fa risparmiare tempo, riduce l'uso di banda e assicura che i tuoi file siano dove ti servono, quando ti servono.
Che tu stia eseguendo il backup di dati critici, distribuendo asset web o semplicemente mantenendo allineati ambienti diversi, AWS S3 sync rende il processo semplice e affidabile.
Il modo migliore per prendere confidenza con S3 sync è iniziare a usarlo. Prova a impostare una semplice operazione di sincronizzazione con i tuoi file, quindi esplora gradualmente le opzioni avanzate per adattarlo alle tue esigenze specifiche.
Ricorda di usare sempre --dryrun per primo quando lavori con dati importanti, soprattutto quando usi il flag --delete. Meglio prendersi un minuto in più per verificare cosa succederà che eliminare accidentalmente file importanti.
Per saperne di più su AWS, dai un'occhiata a questi corsi di DataCamp:
- Introduzione ad AWS
- Tecnologia e servizi AWS Cloud
- Sicurezza AWS e gestione dei costi
- Introduzione ad AWS Boto in Python
Puoi anche usare DataCamp per prepararti agli esami di certificazione AWS - AWS Cloud Practitioner (CLF-C02).
FAQs
Che cos'è AWS S3 sync e come funziona?
AWS S3 sync è uno strumento da riga di comando incluso nell'AWS CLI, progettato per sincronizzare file tra sistemi locali e bucket Amazon S3. Funziona confrontando i file nelle posizioni di origine e destinazione, identificando le differenze e trasferendo solo ciò che è necessario per allinearle, risparmiando banda e tempo rispetto a upload o download completi.
Posso sincronizzare file sia verso che da un bucket S3?
Sì, AWS S3 sync funziona in entrambe le direzioni. Puoi sincronizzare file locali su un bucket S3 usando aws s3 sync /local/directory s3://my-bucket/path oppure sincronizzare file da un bucket S3 al tuo sistema locale usando aws s3 sync s3://my-bucket/path /local/directory. Il comando fa sempre sì che la destinazione rispecchi l'origine.
AWS S3 sync elimina automaticamente i file?
Per impostazione predefinita, S3 sync non elimina i file nella destinazione che non esistono nell'origine. Tuttavia, puoi aggiungere il flag --delete al tuo comando di sincronizzazione per fare in modo che la destinazione rispecchi esattamente l'origine, incluse le eliminazioni. Usa questa funzionalità con cautela e valuta di testarla prima con il flag --dryrun.
Come posso ottimizzare AWS S3 sync per file di grandi dimensioni?
Per file di grandi dimensioni, puoi ottimizzare le prestazioni di S3 sync usando diversi parametri, tra cui --max-concurrent-requests per aumentare i trasferimenti paralleli, --multipart-chunksize per regolare la dimensione dei chunk e --cli-read-timeout per evitare timeout. Per file oltre 5GB, combina i flag --only-show-errors e --size-only per prestazioni migliori.
Posso automatizzare i backup usando AWS S3 sync?
Sì, AWS S3 sync è perfetto per creare backup automatizzati. Puoi impostare attività pianificate (cron job su Linux/macOS o Utilità di pianificazione su Windows) per eseguire regolarmente comandi di sincronizzazione con timestamp nel percorso di destinazione. Per l'archiviazione a lungo termine conveniente, usa il parametro --storage-class per specificare classi come STANDARD_IA o GLACIER.



Gestire la sincronizzazione dei file tra sistemi locali e storage cloud non dovrebbe farti venire il mal di testa.
AWS S3 offre un comodo strumento da riga di comando che semplifica il processo di mantenere i file sincronizzati tra il tuo ambiente locale e un bucket di Amazon Simple Storage Service (S3). Questo strumento è particolarmente utile per sviluppatori, amministratori di sistema e per chiunque abbia bisogno di mantenere versioni dei file coerenti in più posizioni. Con un paio di comandi puoi trasferire file in modo efficiente, creare backup e implementare soluzioni di disaster recovery.
L'AWS Command Line Interface (CLI) rende queste operazioni accessibili a un'ampia gamma di utenti. Certo, non è comoda come Google Drive o OneDrive, ma ha un paio di assi nella manica.
In questo tutorial, vedrai tutto ciò che ti serve sapere su AWS S3 sync, dalla configurazione di base ai modelli d'uso avanzati.
>Che cos'è esattamente S3? Scopri le basi con la nostra guida a S3.
Che cos'è AWS S3 Sync?
AWS S3 sync è un potente strumento da riga di comando incluso nel toolkit AWS CLI. È progettato per sincronizzare i file tra il tuo file system locale e un bucket S3 in pochissimo tempo.
Pensa a S3 sync come a rsync per il cloud. Il comando analizza sia la posizione di origine sia quella di destinazione, identifica le differenze e trasferisce solo ciò che è necessario per farle combaciare. Questo approccio fa risparmiare banda, tempo e potenziali costi rispetto a metodi di trasferimento file ingenui.
Dietro le quinte, S3 sync effettua chiamate API per confrontare metadati degli oggetti come dimensione del file e timestamp di modifica. Quando rileva differenze, si occupa del grosso del lavoro caricando o scaricando i file di conseguenza.
La bellezza di S3 sync sta nella sua semplicità. Un comando base assomiglia a questo:
Certo, dovrai configurare la CLI per usare i comandi
aws, ma il succo è chiaro: è facilissimo da usare.In breve, S3 sync nasconde le operazioni complesse che avvengono dietro le quinte e ti offre un modo semplice per mantenere stati dei file coerenti tra ambienti. Non importa se stai effettuando il backup di dati critici, distribuendo asset web o gestendo grandi dataset: S3 sync fa il lavoro pesante per te.