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.