GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare AWS CLI per gestire Amazon S3

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.


Linux
  1. Come installare AWS CLI su Ubuntu 20.04 Focal Fossa Linux

  2. Come installare e utilizzare Flatpak in Linux

  3. Come installare MySQL 5.7 su Amazon Linux

  4. Come installare AWS CLI su Ubuntu 20.04 LTS

  5. Come installare awscli

Come installare e utilizzare phpMyAdmin in Linux

Come installare AWS CLI su Debian 11 Bullseye Linux

Come installare Rocky Linux 8 sull'istanza Amazon AWS Ec2

Come installare e utilizzare WP CLI su Linux

Come installare e utilizzare WP-CLI per gestire WordPress

Come installare AWS-CLI su Ubuntu