GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie AWS CLI zum Verwalten von Amazon S3

Die AWS Command Line Interface (CLI) ist ein einheitliches Tool zur Verwaltung Ihrer AWS-Services. Mit nur einem Tool zum Herunterladen und Konfigurieren können Sie mehrere AWS-Services über die Befehlszeile steuern und über Skripte automatisieren. Dieser Artikel behandelt die Verwendung von AWS CLI zum Verwalten von Amazon S3-Buckets und -Objekten mit vielen Beispielen, die Sie bei Ihren täglichen AWS-Aktivitäten verwenden können.

Zusätzlich zur AWS CLI empfehlen wir dringend, aws-shell zu installieren. Dieses Befehlszeilen-Shell-Programm bietet Komfort- und Produktivitätsfunktionen, um sowohl neuen als auch fortgeschrittenen Benutzern der AWS-Befehlszeilenschnittstelle zu helfen. Zu den Hauptfunktionen gehören die folgenden:

  • Unscharfe automatische Vervollständigung für AWS CLI-Befehle, -Optionen und -Ressourcen
  • Dynamische Inline-Dokumentation
  • Ausführung von Betriebssystem-Shell-Befehlen
  • Ausgeführte Befehle in einen Texteditor exportieren

Und schließlich empfehlen wir Ihnen, das Session Manager-Plug-in für die AWS CLI zu installieren, mit dem Sie die AWS Command Line Interface (AWS CLI) verwenden können, um Sitzungen zu starten und zu beenden, die Sie mit Ihren EC2-Instances verbinden.

AWS CLI-Installation

Sie können AWS CLI unter Windows, macOS und Linux installieren. Darüber hinaus enthält Amazon Linux AMI bereits AWS CLI als Teil der Betriebssystemverteilung, sodass Sie es nicht manuell installieren müssen.

Windows

Für moderne Windows-Distributionen empfehlen wir Ihnen, den Chocolatey-Paketmanager zu verwenden, um AWS CLI zu installieren:

# 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

Um AWS CLI unter macOS zu installieren, empfehlen wir Ihnen, den Paketmanager brew zu verwenden:

# AWS CLI
brew install awscli

# Session Manager plugin
brew install --cask session-manager-plugin

# AWS-Shell
pip install aws-shell

Linux

Abhängig von Ihrer Linux-Distribution sind die Installationsschritte unterschiedlich.

CentOS, Fedora, RHEL

Für YUM-basierte Distributionen (CentOS, Fedora, RHEL) können Sie die folgenden Installationsschritte verwenden:

# 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

Für APT-basierte Distributionen (Debian, Ubuntu) können Sie etwas andere Installationsschritte verwenden:

# 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

Andere Linux-Distributionen

Für andere Linux-Distributionen können Sie die manuellen AWS CLI-Installationsschritte verwenden.

Unterschied zwischen AWS s3, s3api und s3control

Der Hauptunterschied zwischen s3 ,  s3api und s3control Befehle sind die des s3 Befehle sind High-Level-Befehle, die auf untergeordneten s3api aufbauen Befehle, die von den JSON-Modellen gesteuert werden.

s3 s3api s3control
Diese Befehle wurden speziell entwickelt, um die Verwaltung Ihrer S3-Dateien mit der CLI zu vereinfachen. Diese Befehle werden aus JSON-Modellen generiert, die direkt die APIs der verschiedenen AWS-Dienste modellieren. Dadurch kann die CLI Befehle generieren, die eine nahezu Eins-zu-Eins-Zuordnung der API des Dienstes darstellen Mit diesen Befehlen können Sie die Amazon S3-Steuerungsebene verwalten
aws s3 ls aws s3api list-objects-v2 --bucket my-bucket aws s3control list-jobs --account-id 123456789012

Wenn Sie sehen möchten, wie Sie diese Befehle verwenden, um mit VPC-Endpunkten zu interagieren, lesen Sie unseren Artikel Automatisieren des Zugriffs auf VPC-Endpunkte in mehreren Regionen mithilfe von Terraform.

AWS S3 CLI-Befehle

Normalerweise verwenden Sie AWS CLI-Befehle zum Verwalten von S3, wenn Sie S3-Vorgänge mithilfe von Skripts oder in Ihrer CICD-Automatisierungspipeline automatisieren müssen. Beispielsweise können Sie die Jenkins-Pipeline so konfigurieren, dass AWS CLI-Befehle für jedes AWS-Konto in Ihrer Umgebung ausgeführt werden.

Dieser Abschnitt des Artikels behandelt die gängigsten Beispiele für die Verwendung von AWS CLI-Befehlen zur Verwaltung von S3-Buckets und -Objekten.

S3-Buckets verwalten

AWS CLI unterstützt Erstellungs-, Listen- und Löschvorgänge für die S3-Bucket-Verwaltung.

S3-Bucket erstellen

Um einen S3-Bucket mit AWS CLI zu erstellen, müssen Sie aws s3 mb verwenden (m ake b ucket) Befehl:

aws s3 mb s3://hands-on-cloud-example-1

Hinweis :Der Name des S3-Buckets muss immer von s3:// aus gestartet werden Präfix.

Um einen S3-Bucket mit AWS CLI in der spezifischen AWS-Region zu erstellen, müssen Sie --region hinzufügen Argument zum vorherigen Befehl:

aws s3 mb s3://hands-on-cloud-example-2 --region us-east-2

S3-Buckets auflisten

Um S3-Buckets mit AWS CLI aufzulisten, können Sie entweder aws s3 ls verwenden oder aws s3api list-buckets Befehle.

aws s3 ls

Die aws s3api list-buckets Befehl erzeugt JSON als Ausgabe:

aws s3api list-buckets

Verwenden von aws s3api Befehl können Sie --query verwenden Parameter, um JMESPath-Abfragen für bestimmte Mitglieder und Werte in der JSON-Ausgabe durchzuführen.

Lassen Sie uns nur Buckets ausgeben, deren Namen mit hands-on-cloud-example beginnen :

aws s3api list-buckets --query \
  'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].Name'

Wir können den vorherigen Befehl erweitern, um nur S3-Bucket-Namen auszugeben:

aws s3api list-buckets --query \
  'Buckets[?starts_with(Name, `hands-on-cloud-example`) == `true`].[Name]' \
  --output text

S3-Bucket löschen

Um den S3-Bucket mit AWS CLI zu löschen, können Sie entweder aws s3 rb oder aws s3api delete-bucket Befehle.

aws s3 rb s3://hands-on-cloud-example-1

Hinweis :Sie können nur leere S3-Buckets löschen

Wenn Ihr S3-Bucket Objekte enthält, können Sie --force verwenden Argument zum Bereinigen des Buckets vor dem Löschen:

aws s3 rb s3://hands-on-cloud-example-2 --force

Hinweis :der --force Das Argument löscht keine versionierten Objekte, was dazu führen würde, dass das Löschen des Buckets fehlschlägt.

Um den S3-Bucket mit aktivierter Objektversionierung zu löschen, müssen Sie ihn zuerst bereinigen:

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

S3-Objekte verwalten

In diesem Abschnitt des Artikels behandeln wir die gängigsten AWS CLI-Vorgänge zum Verwalten von S3-Objekten.

Datei in den S3-Bucket hochladen

Um eine Datei mit AWS CLI in den S3-Bucket hochzuladen, müssen Sie ether aws s3 cp verwenden Befehl:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1

Bei Bedarf können Sie den Namen des hochgeladenen S3-Objekts während des Hochladevorgangs ändern:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1/image.png

Darüber hinaus können Sie beim Hochladen die S3-Speicherklasse angeben:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --storage-class ONEZONE_IA

Unterstützte Parameter für --storage-class Argument sind:

  • STANDARD – Standard, Amazon S3 Standard
  • REDUCED_REDUNDANCY – Amazon S3-Speicher mit reduzierter Redundanz
  • STANDARD_IA – Amazon S3 Standard – Seltener Zugriff
  • ONEZONE-IA – Amazon S3 One Zone – seltener Zugriff
  • INTELLIGENT_TIERING – Amazon S3 Intelligent-Tiering
  • GLETSCHER – Amazonas-S3-Gletscher
  • DEEP_ARCHIVE – Amazon S3 Glacier Tiefenarchiv

Wenn die Datei mit der Standard-SSE-Verschlüsselung verschlüsselt werden muss, müssen Sie --sse angeben Argument:

aws s3 cp ./Managing-AWS-IAM-using-Terraform.png s3://hands-on-cloud-example-1 --sse AES256

Verwenden Sie für die KMS-Verschlüsselung den folgenden Befehl:

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

Hinweis :ersetzen Sie KMS_KEY_ID im obigen Befehl mit Ihrer eigenen KMS-Schlüssel-ID.

Laden Sie mehrere Dateien in den S3-Bucket hoch

Um mehrere Dateien in den S3-Bucket hochzuladen, müssen Sie entweder aws s3 cp verwenden Befehl mit --recursive Argument oder aws s3 sync Befehl.

aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive

Hinweis :Der obige Befehl lädt keine leeren Verzeichnisse hoch, wenn sie im ./directory vorhanden sind path (erzeugt keine S3-Objekte, um sie darzustellen).

Sie können die gleichen Argumente wie in den obigen Beispielen verwenden, um die S3-Speicherklasse oder die Verschlüsselung bei Bedarf einzurichten.

Darüber hinaus können Sie --include verwenden und --exclude Argumente, um einen Satz von hochzuladenden Dateien anzugeben.

Zum Beispiel, wenn Sie nur .png kopieren müssen Dateien aus dem ./directory , können Sie den folgenden Befehl verwenden:

aws s3 cp ./directory s3://hands-on-cloud-example-1/directory --recursive --exclude "*" --include "*.png"

Sie können dasselbe Ergebnis erzielen, indem Sie aws s3 sync verwenden Befehl:

aws s3 sync ./directory s3://hands-on-cloud-example-1/directory

Hinweis :die aws s3 sync Der Befehl unterstützt dieselben Argumente zum Einrichten der S3-Speicherklasse und -Verschlüsselung.

Der Vorteil der Verwendung von aws s3 sync Befehl ist, dass dieser Befehl bei der nächsten Ausführung nur geänderte Dateien aus Ihrem lokalen Dateisystem hochlädt.

Sie können den --delete verwenden Argument zum Löschen von Objekten aus dem S3-Bucket, wenn sie auf Ihrem lokalen Dateisystem gelöscht wurden (vollständige Synchronisierung):

aws s3 sync ./directory s3://hands-on-cloud-example-1/directory --delete

Datei aus dem S3-Bucket herunterladen

Um eine einzelne Datei aus dem S3-Bucket mit AWS CLI herunterzuladen, müssen Sie den aws s3 cp verwenden Befehl:

aws s3 cp s3://hands-on-cloud-example-1/image.png ./image.png

Laden Sie mehrere Dateien aus dem S3-Bucket herunter

Um mehrere Dateien aus dem S3-Bucket mit AWS CLI herunterzuladen, müssen Sie entweder die aws s3 cp oder aws s3 sync Befehl:

aws s3 cp s3://hands-on-cloud-example-1/directory ./directory --recursive

Hinweis :wenn der S3-Bucket leere „Verzeichnisse“ innerhalb von /directory enthält Präfix, wird die Ausführung des obigen Befehls leere Verzeichnisse in Ihrem lokalen Dateisystem erstellen.

Ähnlich wie beim Hochladen können Sie alle Objekte aus dem S3-Bucket innerhalb des gemeinsamen Präfixes mit Ihrem lokalen Verzeichnis synchronisieren:

aws s3 sync s3://hands-on-cloud-example-1/directory ./directory

Hinweis :für beide Befehle (aws s3 cp und aws s3 sync ) können Sie den --include verwenden und --exclude Argumente, um nur einen bestimmten Satz von Dateien herunterzuladen oder zu synchronisieren.

Hinweis :mit --delete Argument mit aws s3 sync Befehl können Sie eine vollständige Spiegelung des S3-Objektpräfixes in Ihrem lokalen Ordner abrufen.

Dateien im S3-Bucket auflisten

Um Dateien im S3-Bucket mit AWS CLI aufzulisten, müssen Sie aws s3 ls verwenden Befehl:

aws s3 ls s3://hands-on-cloud-example-1

Sie können menschenlesbare Objektgrößen erhalten, indem Sie --human-readable verwenden Argument:

aws s3 ls s3://hands-on-cloud-example-1 --human-readable

Sie können den --recursive verwenden Argument zum Auflisten aller S3-Objekte im S3-Bucket oder mit demselben Präfix:

# 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

S3-Objekt umbenennen

Um ein S3-Objekt mit AWS CLI umzubenennen, müssen Sie aws s3 mv verwenden Befehl:

aws s3 mv s3://hands-on-cloud-example-1/image.png s3://hands-on-cloud-example-1/image2.png

Hinweis :Sie können S3-Objekte nicht nur umbenennen, sondern auch ihre Speicherklasse und Verschlüsselung ändern, zum Beispiel:

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

S3 „Verzeichnis“ umbenennen

Um das S3-„Verzeichnis“ mithilfe der AWS CLI umzubenennen, müssen Sie aws s3 mv verwenden Befehl:

aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-1/directory2 --recursive

Hinweis :der --rekursiv -Argument verschiebt keine leeren „Verzeichnisse“ innerhalb des angegebenen S3-„Verzeichnisses“. Befehl) und entfernen Sie sie aus dem Quellverzeichnis (siehe Beispiele unten).

Leeres S3-„Verzeichnis“ erstellen

Um ein leeres S3-„Verzeichnis“ mit AWS CLI zu erstellen, müssen Sie das aws s3 put-object verwenden Befehl:

aws s3api put-object --bucket hands-on-cloud-example-1 --key directory_name/

Hinweis :der / Zeichen im Objektnamen ist erforderlich, um ein leeres Verzeichnis zu erstellen. Andernfalls erstellt der obige Befehl ein Dateiobjekt mit dem Namen directory_name .

Dateien zwischen S3-Buckets kopieren/verschieben

Um Dateien zwischen S3-Buckets mit AWS CLI zu kopieren, müssen Sie entweder den aws s3 cp oder aws s3 sync Befehl. Um Dateien zwischen S3-Buckets zu verschieben, müssen Sie aws s3 mv verwenden Befehl.

So kopieren Sie Dateien zwischen S3-Buckets innerhalb derselben AWS-Region:

aws s3 cp s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive

Wenn sich die Quell- und Ziel-S3-Buckets in unterschiedlichen AWS-Regionen befinden, müssen Sie --source-region verwenden und --region (angegebener Zielspeicherort des S3-Buckets) Argumente:

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

Um Objekte zwischen S3-Buckets innerhalb derselben Region zu verschieben, müssen Sie aws s3 mv verwenden Befehl:

aws s3 mv s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory --recursive

Wenn sich die Quell- und Ziel-S3-Buckets in unterschiedlichen AWS-Regionen befinden, müssen Sie --source-region verwenden und --region (angegebener Zielspeicherort des S3-Buckets) Argumente:

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

Hinweis :Sie können --storage-class verwenden und --sse Argumente zum Angeben der Speicherklasse und Verschlüsselungsmethode im Ziel-S3-Bucket

Hinweis :Sie können --include verwenden und --exclude Argumente, um nur bestimmte Dateien auszuwählen, die aus dem S3-Quell-Bucket kopiert/verschoben werden sollen

Hinweis :der --rekursiv -Argument kopiert/verschiebt keine leeren „Verzeichnisse“ innerhalb des angegebenen S3-Präfixes. Wenn Sie also ein vollständiges Kopieren/Verschieben von „Verzeichnissen“ erwarten, müssen Sie möglicherweise leere „Verzeichnisse“ im Zielverzeichnis neu erstellen (aws s3 put -Objekt Befehl). Siehe die Beispiele oben.

Um „Verzeichnisse“ zwischen S3-Buckets zu synchronisieren, müssen Sie aws s3 sync verwenden Befehl, zum Beispiel:

aws s3 sync s3://hands-on-cloud-example-1/directory s3://hands-on-cloud-example-2/directory

Hinweis :Sie können Argumente wie --storage-class verwenden , --sse , --include und --exclude mit aws s3 sync Befehl:

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

S3-Objekte löschen

Um S3-Objekte mit AWS CLI zu löschen, müssen Sie aws s3 rm verwenden Befehl:

aws s3 rm s3://hands-on-cloud-example-1/image.png

Hinweis :Sie können den --recursive verwenden , --include und --exclude Argumente mit dem aws s3 rm Befehl.

Generieren Sie vorsignierte URLs für das S3-Objekt

Um die vorsignierte URL für das S3-Objekt mit AWS CLI zu generieren, müssen Sie das aws s3 presign verwenden Befehl:

aws s3 presign s3://hands-on-cloud-example-1/image.png --expires-in 604800

Hinweis :Das Argument –expires-in definiert die Ablaufzeit der vorsignierten URL in Sekunden zwischen 3600 (min) und 604800 (max) Sekunden.

Jetzt können Sie die generierte vorsignierte URL verwenden, um das S3-Objekt mit einem Webbrowser oder wget herunterzuladen Befehl, zum Beispiel:

wget generated_presigned_url

Oder ersetzen Sie das S3-Objekt mit curl Befehl:

curl -H "Content-Type: image/png" -T image.png generated_presigned_url

Hinweis :Wenn Sie den erhalten, stimmt die von uns berechnete Anforderungssignatur nicht mit der von Ihnen bereitgestellten Signatur überein. Überprüfen Sie Ihren Schlüssel und Ihre Signaturmethode. Fehlermeldung, müssen Sie Ihren AWS Access Key und AWS Secret Key neu generieren. Der Hauptgrund für den Fehler ist, dass AWS-Anmeldeinformationen bestimmte Zeichen wie + enthalten , % , und / .

Zusammenfassung

In diesem Artikel haben wir die Verwendung von AWS CLI zur Verwaltung von Amazon S3-Buckets und -Objekten mit vielen Beispielen behandelt, die Sie bei Ihren täglichen AWS-Aktivitäten verwenden können.


Linux
  1. So installieren Sie AWS CLI unter Ubuntu 20.04 Focal Fossa Linux

  2. So installieren und verwenden Sie Flatpak unter Linux

  3. So installieren Sie MySQL 5.7 unter Amazon Linux

  4. So installieren Sie AWS CLI unter Ubuntu 20.04 LTS

  5. So installieren Sie awscli

So installieren und verwenden Sie phpMyAdmin unter Linux

So installieren Sie AWS CLI unter Debian 11 Bullseye Linux

So installieren Sie Rocky Linux 8 auf einer Amazon AWS Ec2-Instanz

So installieren und verwenden Sie WP CLI unter Linux

So installieren und verwenden Sie WP-CLI zur Verwaltung von WordPress

So installieren Sie AWS-CLI auf Ubuntu