L'AWS Command Line Interface (CLI) è uno strumento unificato per gestire i tuoi servizi AWS. Con un solo strumento da scaricare e configurare, puoi controllare più servizi AWS dalla riga di comando e automatizzarli tramite script. Questo articolo illustra come utilizzare AWS CLI per gestire i bucket e gli oggetti Amazon S3 con molti esempi che puoi utilizzare durante le tue attività AWS quotidiane.
Oltre ad AWS CLI, consigliamo vivamente di installare aws-shell. Questo programma shell a riga di comando offre funzionalità di praticità e produttività per aiutare gli utenti nuovi e avanzati di AWS Command Line Interface. Le caratteristiche principali includono quanto segue:
- Completamento automatico fuzzy per i comandi, le opzioni e le risorse dell'AWS CLI
- Documentazione dinamica in linea
- Esecuzione dei comandi della shell del sistema operativo
- Esporta i comandi eseguiti in un editor di testo
Infine, ti consigliamo di installare il plug-in Session Manager per l'AWS CLI, che ti consente di utilizzare l'AWS Command Line Interface (AWS CLI) per avviare e terminare le sessioni che ti connettono alle tue istanze EC2.
Installazione dell'AWS CLI
Puoi installare AWS CLI su Windows, macOS e Linux. Inoltre, l'AMI Amazon Linux contiene già AWS CLI come parte della distribuzione del sistema operativo, quindi non è necessario installarla manualmente.
Finestre
Per le moderne distribuzioni Windows, ti consigliamo di utilizzare Chocolatey Package Manager per installare AWS CLI:
# AWS CLI
choco install awscli
# Session Manager plugin
choco install awscli-session-manager
# AWS-Shell
choco install python
choco install pip
pip install aws-shell
macOS
Per installare AWS CLI su macOS, ti consigliamo di utilizzare brew package manager:
# AWS CLI
brew install awscli
# Session Manager plugin
brew install --cask session-manager-plugin
# AWS-Shell
pip install aws-shell
Linux
A seconda della tua distribuzione Linux, i passaggi di installazione sono diversi.
CentOS, Fedora, RHEL
Per le distribuzioni basate su YUM (CentOS, Fedora, RHEL), puoi utilizzare i seguenti passaggi di installazione:
# AWS CLI
sudo yum update
sudo yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install epel-release-latest-7.noarch.rpm
sudo yum -y install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" \
-o "session-manager-plugin.rpm"
sudo yum install -y session-manager-plugin.rpm
# AWS-Shell
pip install aws-shell
Debian, Ubuntu
Per le distribuzioni basate su APT (Debian, Ubuntu), puoi utilizzare passaggi di installazione leggermente diversi:
# AWS CLI
sudo apt-get install python-pip
sudo pip install awscli
# Session Manager plugin
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" \
-o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
# AWS-Shell
pip install aws-shell
Altre distribuzioni Linux
Per altre distribuzioni Linux, puoi utilizzare i passaggi di installazione manuali di AWS CLI.
Differenza tra AWS s3, s3api e s3control
La principale differenza tra s3
, s3api
e s3control
i comandi sono che il s3
i comandi sono comandi di alto livello costruiti sopra s3api
di livello inferiore comandi guidati dai modelli JSON.
s3 | s3api | s3control |
---|---|---|
Questi comandi sono progettati specificamente per semplificare la gestione dei file S3 utilizzando la CLI. | Questi comandi sono generati da modelli JSON, che modellano direttamente le API dei vari servizi AWS. Ciò consente alla CLI di generare comandi che rappresentano una mappatura quasi uno a uno dell'API del servizio | Questi comandi ti consentono di gestire il piano di controllo di Amazon S3 |
aws s3 ls | aws s3api list-objects-v2 --bucket my-bucket | aws s3control list-jobs --account-id 123456789012 |
Se desideri vedere come utilizzare questi comandi per interagire con gli endpoint VPC, consulta il nostro articolo Automatizzare l'accesso agli endpoint VPC multiregione utilizzando Terraform.
Comandi CLI AWS S3
Di solito, utilizzi i comandi dell'AWS CLI per gestire S3 quando devi automatizzare le operazioni S3 utilizzando gli script o nella pipeline di automazione CICD. Ad esempio, puoi configurare la pipeline Jenkins per eseguire i comandi AWS CLI per qualsiasi account AWS nel tuo ambiente.
Questa sezione dell'articolo tratterà gli esempi più comuni di utilizzo dei comandi AWS CLI per gestire i bucket e gli oggetti S3.
Gestione dei bucket S3
AWS CLI supporta le operazioni di creazione, elenco ed eliminazione per la gestione dei bucket S3.
Crea bucket S3
Per creare un bucket S3 utilizzando AWS CLI, devi utilizzare aws s3 mb
(mi come b ucket) comando:
aws s3 mb s3://hands-on-cloud-example-1
Nota :il nome del bucket S3 deve essere sempre avviato da s3://
prefisso.
Per creare un bucket S3 utilizzando AWS CLI nella specifica regione AWS, devi aggiungere --region
argomento al comando precedente:
aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2
Elenca i bucket S3
Per elencare i bucket S3 utilizzando AWS CLI, puoi utilizzare aws s3 ls
o aws s3api list-buckets
comandi.
aws s3 ls
Gli aws s3api list-buckets
il comando produce JSON come output:
aws s3api list-buckets
Utilizzo di aws s3api
comando ti permette di usare --query
parametro per eseguire query JMESPath per membri e valori specifici nell'output JSON.
Produciamo solo bucket i cui nomi iniziano da hands-on-cloud-example
:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'
Possiamo estendere il comando precedente per generare solo i nomi dei bucket S3:
aws s3api list-buckets --query \
'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
--output text
Elimina il bucket S3
Per eliminare il bucket S3 utilizzando AWS CLI, puoi utilizzare aws s3 rb
o aws s3api delete-bucket
comandi.
aws s3 rb s3://hands-on-cloud-example-1
Nota :puoi eliminare solo bucket S3 vuoti
Se il tuo bucket S3 contiene oggetti, puoi utilizzare il --force
argomento per ripulire il bucket prima dell'eliminazione:
aws s3 rb s3://hands-on-cloud-example-2 --force
Nota :il --force
l'argomento non sta eliminando gli oggetti con versione che causerebbero il fallimento dell'eliminazione del bucket.
Per eliminare il bucket S3 con il controllo delle versioni degli oggetti abilitato, devi prima ripulirlo:
export bucket_name="hands-on-cloud-versioning-enabled"
# Deleting objects versions
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"
# Deleting delete markers
aws s3api delete-objects \
--bucket $bucket_name \
--delete "$(aws s3api list-object-versions \
--bucket $bucket_name \
--output=json \
--query='{Objects: Contents[].{Key:Key,VersionId:VersionId}}')"
# Deleting S3 bucket
aws s3 rb s3://$bucket_name
Gestione degli oggetti S3
In questa sezione dell'articolo, tratteremo le operazioni AWS CLI più comuni per la gestione di oggetti S3.
Carica il file nel bucket S3
Per caricare il file nel bucket S3 utilizzando AWS CLI, devi utilizzare ether aws s3 cp
comando:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1
Se necessario, è possibile modificare il nome dell'oggetto S3 caricato durante l'operazione di caricamento:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png
Inoltre, puoi specificare la classe di archiviazione S3 durante il caricamento:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA
Parametri supportati per --storage-class
argomento sono:
- STANDARD:predefinito, Amazon S3 Standard
- REDUCED_REDUNDANCY – Archiviazione a ridondanza ridotta di Amazon S3
- STANDARD_IA – Accesso non frequente standard Amazon S3
- ONEZONE-IA:Amazon S3 One Zone-Accesso non frequente
- INTELLIGENT_TIERING – Tiering intelligente di Amazon S3
- GHIACCIAIO – Amazon S3 Glacier
- DEEP_ARCHIVE – Archivio Amazon S3 Glacier Deep
Se il file deve essere crittografato con la crittografia SSE predefinita, è necessario fornire --sse
argomento:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256
Per la crittografia KMS, utilizza il comando seguente:
aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse 'aws:kms' --sse-kms-key-id KMS_KEY_ID
Nota :sostituisci KMS_KEY_ID
nel comando sopra con il tuo ID chiave KMS.
Carica più file nel bucket S3
Per caricare più file nel bucket S3, devi utilizzare aws s3 cp
comando con --recursive
argomento o aws s3 sync
comando.
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive
Nota :il comando sopra non caricherà directory vuote se esistono all'interno di ./directory
percorso (non creerà gli oggetti S3 per rappresentarli).
Puoi utilizzare gli stessi argomenti degli esempi precedenti per impostare la classe di archiviazione S3 o la crittografia, se necessario.
In aggiunta a ciò, puoi usare --include
e --exclude
argomenti per specificare un set di file da caricare.
Ad esempio, se devi copiare solo .png
file dalla ./directory
, puoi usare il seguente comando:
aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"
Puoi ottenere lo stesso risultato usando aws s3 sync
comando:
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory
Nota :la aws s3 sync
Il comando supporta gli stessi argomenti per la configurazione della classe di archiviazione S3 e della crittografia.
Il vantaggio dell'utilizzo di aws s3 sync
comando è che questo comando caricherà solo i file modificati dal file system locale alla prossima esecuzione.
Puoi usare il --delete
argomento per eliminare oggetti dal bucket S3 se sono stati eliminati sul file system locale (sincronizzazione completa):
aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete
Scarica file dal bucket S3
Per scaricare un singolo file dal bucket S3 utilizzando AWS CLI, devi utilizzare aws s3 cp
comando:
aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png
Scarica più file dal bucket S3
Per scaricare più file dal bucket S3 utilizzando AWS CLI, devi utilizzare aws s3 cp
o aws s3 sync
comando:
aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive
Nota :se il bucket S3 contiene "directory" vuote all'interno di /directory
prefisso, l'esecuzione del comando precedente creerà directory vuote sul file system locale.
Analogamente all'operazione di caricamento, puoi sincronizzare tutti gli oggetti dal bucket S3 all'interno del prefisso comune nella tua directory locale:
aws s3 sync s3://hands-on-cloud-example-1/directory ./directory
Nota :per entrambi i comandi (aws s3 cp
e aws s3 sync
) puoi usare il --include
e --exclude
argomenti per scaricare o sincronizzare solo un insieme specifico di file.
Nota :usando il --delete
argomento con aws s3 sync
Il comando ti consente di ottenere un mirror completo del prefisso degli oggetti S3 nella tua cartella locale.
Elenca i file nel bucket S3
Per elencare i file nel bucket S3 utilizzando AWS CLI, devi utilizzare aws s3 ls
comando:
aws s3 ls s3://hands-on-cloud-example-1
Puoi ottenere dimensioni degli oggetti leggibili dall'uomo usando --human-readable
argomento:
aws s3 ls s3://hands-on-cloud-example-1 --human-readable
Puoi usare il --recursive
argomento per elencare tutti gli oggetti S3 all'interno del bucket S3 o con lo stesso prefisso:
# Recursive listing of the entire S3 bucket
aws s3 ls s3://hands-on-cloud-example-1 --recursive
# Recursive listing for the S3 prefix
aws s3 ls s3://hands-on-cloud-example-1/directory --recursive
Rinomina oggetto S3
Per rinominare l'oggetto S3 utilizzando AWS CLI, devi utilizzare aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png
Nota :puoi non solo rinominare gli oggetti S3 ma anche cambiarne la classe di archiviazione e la crittografia, ad esempio:
aws s3 mv s3://hands-on-cloud-example-1/image2.png s3://hands-on-cloud-example-1/image.png \
--sse AES256 --storage-class ONEZONE_IA
Rinomina "directory" S3
Per rinominare la "directory" S3 utilizzando AWS CLI, devi utilizzare aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive
Nota :il --recursive
argomento non sposta le "directory" vuote all'interno della "directory" S3 specificata, quindi se ti aspetti uno spostamento completo della "directory", potresti dover ricreare "directory" vuote nella directory di destinazione (aws s3 put-object
comando) e rimuoverli dalla directory di origine (vedere gli esempi seguenti).
Crea una "directory" S3 vuota
Per creare una "directory" S3 vuota utilizzando l'AWS CLI, devi utilizzare aws s3 put-object
comando:
aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/
Nota :il /
il carattere nel nome dell'oggetto è necessario per creare una directory vuota. Altrimenti, il comando sopra creerà un oggetto file con il nome directory_name
.
Copia/sposta file tra bucket S3
Per copiare file tra bucket S3 utilizzando AWS CLI, devi utilizzare il aws s3 cp
o aws s3 sync
comando. Per spostare i file tra i bucket S3, devi utilizzare aws s3 mv
comando.
Per copiare file tra bucket S3 all'interno della stessa regione AWS:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Se i bucket S3 di origine e di destinazione si trovano in diverse regioni AWS, devi utilizzare il --source-region
e --region
(posizione del bucket S3 di destinazione specificata) argomenti:
aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Per spostare oggetti tra bucket S3 all'interno della stessa regione, devi utilizzare aws s3 mv
comando:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive
Se i bucket S3 di origine e di destinazione si trovano in diverse regioni AWS, devi utilizzare il --source-region
e --region
(posizione del bucket S3 di destinazione specificata) argomenti:
aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive \
--region us-west-2 --source-region us-east-1
Nota :puoi usare --storage-class
e --sse
argomenti per specificare la classe di archiviazione e il metodo di crittografia nel bucket S3 di destinazione
Nota :puoi usare --include
e --exclude
argomenti per selezionare solo file specifici da copiare/spostare dal bucket S3 di origine
Nota :il --recursive
argomento non copia/sposta le "directory" vuote all'interno del prefisso S3 specificato, quindi se ti aspetti una copia/sposta di una "directory" completa, potresti dover ricreare "directory" vuote nella directory di destinazione (aws s3 put-object
comando). Vedi gli esempi sopra.
Per sincronizzare le "directory" tra i bucket S3, devi utilizzare aws s3 sync
comando, ad esempio:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory
Nota :puoi usare argomenti come --storage-class
, --sse
, --include
e --exclude
con la aws s3 sync
comando:
aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory \
--region us-west-2 --source-region us-east-1 --sse AES256
Eliminazione di oggetti S3
Per eliminare oggetti S3 utilizzando AWS CLI, devi utilizzare aws s3 rm
comando:
aws s3 rm s3://hands-on-cloud-example-1/image.png
Nota :puoi usare il --recursive
, --include
e --exclude
argomenti con aws s3 rm
comando.
Genera URL prefirmati per l'oggetto S3
Per generare l'URL prefirmato per l'oggetto S3 utilizzando AWS CLI, devi utilizzare aws s3 presign
comando:
aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800
Nota :l'argomento –expires-in definisce il tempo di scadenza dell'URL prefirmato in secondi tra 3600 (min) e 604800 (max) secondi.
Ora puoi utilizzare l'URL prefirmato generato per scaricare l'oggetto S3 utilizzando un browser Web o wget
comando, ad esempio:
wget generated_presigned_url
Oppure sostituisci l'oggetto S3 usando il curl
comando:
curl -H "Content-Type: image/png" -T image.png generated_presigned_url
Nota :se stai ricevendo il The request signature we calculated does not match the signature you provided. Check your key and signing method.
messaggio di errore, è necessario rigenerare la chiave di accesso AWS e la chiave segreta AWS. Il motivo principale dell'errore è che le credenziali AWS contengono determinati caratteri come +
, %
e /
.
Riepilogo
In questo articolo, abbiamo spiegato come utilizzare AWS CLI per gestire i bucket e gli oggetti Amazon S3 con molti esempi che puoi utilizzare durante le tue attività AWS quotidiane.