Abwärtskompatible Änderungen Migration von AWS CLI Version 1 auf Version 2 - AWS Command Line Interface

Python 2.7, 3.4 und 3.5 sind für AWS CLI-Version 1 veraltet. Weitere Informationen finden Sie im Abschnitt AWS CLI-Version 1 von Über die AWS CLI-Versionen.

Abwärtskompatible Änderungen Migration von AWS CLI Version 1 auf Version 2

In diesem Thema werden die Verhaltensunterschiede zwischen AWS CLI Version 1 und AWS CLI Version 2 beschrieben, aufgrund derer Sie möglicherweise Änderungen an Skripts oder Befehlen vornehmen müssen, um in Version 2 das gleiche Verhalten wie in Version 1 zu erhalten.

AWS CLI Version 2 verwendet jetzt Umgebungsvariable, um Textdateikodierung festzulegen

Standardmäßig verwenden Textdateien dieselbe Kodierung wie das installierte Gebietsschema. Verwenden Sie die Umgebungsvariable AWS_CLI_FILE_ENCODING, um die Kodierung für Textdateien so festzulegen, dass sie sich vom Gebietsschema unterscheiden. Das folgende Beispiel legt fest, dass die CLI Textdateien unter Windows mit UTF-8 öffnet.

AWS_CLI_FILE_ENCODING=UTF-8

Weitere Informationen finden Sie unter Umgebungsvariablen zum Konfigurieren der AWS CLI .

AWS CLI Version 2 übergibt jetzt standardmäßig binäre Parameter als base64-kodierte Zeichenfolgen

Mit AWS CLI Version 1 war es nicht immer einfach, binäre Parameter von der Ausgabe eines Befehls an die Eingabe eines anderen Befehls zu übergeben, ohne dass eine Zwischenverarbeitung erforderlich war. Einige Befehle erforderten base64-kodierte Zeichenfolgen, andere wiederum UTF8-kodierte Byte-Zeichenfolgen. AWS CLI Version 2 gestaltet die Handhabung von Binärparametern konsistenter, um eine zuverlässigere Übergabe von Werten von einem Befehl an einen anderen zu ermöglichen.

Standardmäßig übergibt der AWS CLI Version 2 nun alle binären Eingabe- und Ausgabeparameter als base64-kodierte Zeichenfolgen. Ein Parameter, der eine binäre Eingabe erfordert, wird in der Dokumentation als blob (Binary Large Object) angegeben. Damit Binärdaten als Datei an einen AWS CLI-Parameter übergeben werden können, ermöglicht es AWS CLI Version 2, die Datei mit den folgenden Präfixen anzugeben:

  • file:// – die AWS CLI behandelt den Dateiinhalt als base64-kodierten Text. Beispiel: --some-param file://~/my/path/file-with-base64.txt

  • fileb:// – Die AWS CLI behandelt den Dateiinhalt als unkodiertes Binary. Beispiel: --some-param fileb://~/my/path/file-with-raw-binary.bin

Sie können AWS CLI Version 2 anweisen, zum AWS CLI-Verhalten Version 1 zurückzukehren, indem Sie die folgende Zeile in der ~/.aws/config-Datei für ein Profil angeben.

cli_binary_format=raw-in-base64-out

Sie können auch die Einstellung für einen einzelnen Befehl rückgängig machen und dabei die aktive Profileinstellung überschreiben, indem Sie den Parameter --cli-binary-format raw-in-base64-out in die Befehlszeile aufnehmen.

Wenn Sie zum AWS CLI-Verhalten Version 1 zurückkehren und eine Datei für einen binären Parameter entweder mit file:// oder fileb:// angeben, behandelt die AWS CLI den Dateiinhalt als unkodiertes unformatiertes Binary.

AWS CLI Version 2 verbessert die Verarbeitung der Dateieigenschaften und Tags durch Amazon S3 bei mehrteiligen Kopien

Wenn Sie die AWS CLI-Version Version 1 von Befehlen im aws s3-Namespace verwenden, um eine Datei von einem Amazon-S3-Bucket-Speicherort an einen anderen Amazon-S3-Bucket-Speicherort zu kopieren und wenn dieser Vorgang eine mehrteilige Kopie verwendet, werden keine Dateieigenschaften aus dem Quellobjekt in das Zielobjekt kopiert.

Standardmäßig übertragen die AWS CLI-Befehle Version 2 im s3-Namespace, die mehrteilige Kopien ausführen, jetzt alle Tags und die folgenden Eigenschaften von der Quelle in die Zielkopie: content-type, content-language, content-encoding, content-disposition, cache-control, expires und metadata.

Dies kann zu zusätzlichen AWS-API-Aufrufen des Amazon-S3-Endpunkts führen, die bei Verwendung von AWS CLI Version 1 nicht durchgeführt worden wären. Dies sind beispielsweise: HeadObject, GetObjectTagging und PutObjectTagging.

Wenn Sie dieses Standardverhalten in AWS CLI-Befehlen Version 2 ändern müssen, geben Sie mit dem Parameter --copy-props eine der folgenden Optionen an:

  • default – Der Standardwert. Gibt an, dass die Kopie alle an das Quellobjekt angehängten Tags und die Eigenschaften enthält, die durch den --metadata-directive-Parameter für nicht mehrteilige Kopien verwendet werden: content-type, content-language, content-encoding, content-disposition, cache-control, expires und metadata.

  • metadata-directive – Gibt an, dass die Kopie nur die Eigenschaften enthält, die von dem Parameter --metadata-directive für nicht mehrteilige Kopien verwendet werden. Es werden keine Tags kopiert.

  • none – Gibt an, dass die Kopie keine der Eigenschaften des Quellobjekts enthält.

AWS CLI Version 2 ruft http://- oder https://-URLs für Parameter nicht mehr automatisch ab

AWS CLI Version 2 führt keine GET-Operation mehr durch, wenn ein Parameterwert mit http:// oder https:// beginnt, um dann den zurückgegebenen Inhalt als Wert des Parameters zu verwenden. Wenn Sie eine URL abrufen und den von dieser URL gelesenen Inhalt als Wert eines Parameters übergeben müssen, empfehlen wir Ihnen curl oder ein ähnliches Tool, um den Inhalt der URL in eine lokale Datei herunterzuladen. Verwenden Sie dann die file://-Syntax, um den Inhalt dieser Datei zu lesen und sie als Wert des Parameters zu verwenden.

Mit dem folgenden Befehl wird beispielsweise nicht mehr versucht, den Inhalt der Seite abzurufen, der unter http://www.google.com gefunden wird, und diesen Inhalt als Parameter zu übergeben. Stattdessen wird die literale Textzeichenfolge https://google.com als Parameter übergeben.

$ aws ssm put-parameter --value http://www.google.com --name prod.microservice1.db.secret --type String 2

Wenn Sie wirklich den Inhalt einer Web-URL als Parameter abrufen und verwenden möchten, können Sie in Version 2 Folgendes tun.

$ curl https://my.example.com/mypolicyfile.json -o mypolicyfile.json $ aws iam put-role-policy --policy-document file://./mypolicyfile.json --role-name MyRole --policy-name MyReadOnlyPolicy

Im vorherigen Beispiel weist der -o-Parameter curl an, die Datei im aktuellen Ordner mit demselben Namen wie die Quelldatei zu speichern. Der zweite Befehl ruft den Inhalt dieser heruntergeladenen Datei ab und übergibt den Inhalt als Wert von --policy-document.

AWS CLI Version 2 verwendet standardmäßig ein Auslagerungsprogramm für die gesamte Ausgabe.

Standardmäßig gibt AWS CLI Version 2 die gesamte Ausgabe über das Standard-Pager-Programm Ihres Betriebssystems zurück. Standardmäßig ist dieses Programm das less-Programm unter Linux und macOS und das more-Programm unter Windows. Dies kann es Ihnen erleichtern, durch umfangreiche Ausgabe eines Service zu navigieren, indem Sie diese Ausgabe seitenweise anzeigen. Manchmal möchten Sie jedoch die gesamte Ausgabe, ohne zum Aufruf jeder Seite eine Taste drücken zu müssen, z. B. wenn Sie Skripts ausführen. Hierzu können Sie die AWS CLI Version 2 so konfigurieren, dass sie ein anderes oder gar kein Auslagerungsprogramm verwendet. Konfigurieren Sie dazu entweder die Umgebungsvariable AWS_PAGER oder die Einstellung cli_pager in Ihrer ~/.aws/config-Datei und geben Sie den gewünschten Befehl an. Sie können einen Befehl angeben, der sich in Ihrem Suchpfad befindet, oder den vollständigen Pfad und Dateinamen für jeden auf dem Computer verfügbaren Befehl angeben.

Sie können die gesamte Verwendung eines externen Auslagerungsprogramms vollständig deaktivieren, indem Sie die Variable auf eine leere Zeichenfolge setzen, wie in den folgenden Beispielen gezeigt.

Durch Festlegen einer Option in der ~/.aws/config-Datei

Im folgenden Beispiel wird die Einstellung für das default-Profil veranschaulicht, Sie können die Einstellung aber jedem beliebigen Profil in Ihrer ~/.aws/config-Datei hinzufügen.

[default] cli_pager=

Durch Festlegen einer Umgebungsvariablen

Linux oder macOS:

$ export AWS_PAGER=""

Windows:

C:\> setx AWS_PAGER ""

AWS CLI Version 2 gibt jetzt alle Zeitstempel-Ausgabewerte im ISO 8601-Format zurück.

AWS CLI Version 2 gibt standardmäßig alle Zeitstempel-Antwortwerte im ISO 8601-Format zurück. In AWS CLI Version 1 gaben Befehle Zeitstempelwerte in einem Format zurück, das von der HTTP-API-Antwort zurückgegeben wurde, was von Service zu Service variieren konnte.

Gemäß ISO 8601 formatierte Zeitstempel sehen wie die folgenden Beispiele aus. Das erste Beispiel zeigt die Zeit in der Zeitzone Coordinated Universal Time (UTC) an, indem nach der Zeit ein Z eingeschlossen wird. Datum und Uhrzeit werden durch ein getrenn T.

2019-10-31T22:21:41Z

Um eine andere Zeitzone anzugeben, geben Sie anstelle des Z ein + oder - und die Anzahl der Stunden, die die gewünschte Zeitzone vor oder hinter UTC liegt, als zweistelligen Wert an. Das folgende Beispiel zeigt die gleiche Zeit wie das vorherige Beispiel, aber angepasst an die Pacific Standard Time, die acht Stunden hinter der UTC-Zeit liegt.

2019-10-31T14:21:41-08

Um Zeitstempel im Format anzuzeigen, das von der HTTP-API-Antwort zurückgegeben wird, fügen Sie Ihrem .aws/config-Profil die folgende Zeile hinzu.

cli_timestamp_format = wire

AWS CLI Version 2 verbessert die Handhabung von AWS CloudFormation-Bereitstellungen, die zu keinen Änderungen führen

Wenn Sie in AWS CLI Version 1 eine AWS CloudFormation-Vorlage bereitgestellt haben, die zu keiner Änderung führte, ist die AWS CLI standardmäßig mit einem Fehlercode fehlgeschlagen. Dies könnte ein Problem darstellen, wenn Sie dies nicht als Fehler betrachten und möchten, dass Ihr Skript fortgesetzt wird. Sie könnten dies in AWS CLI Version 1 umgehen, indem Sie das Flag -–no-fail-on-empty-changeset hinzufügen, das 0 zurückgibt und keinen Fehler in Ihrem Skript verursacht.

Da dies das übliche Fallszenario ist, gibt AWS CLI nun standardmäßig einen erfolgreichen Beendigungscode von 0 Version 2 zurück, wenn durch die Bereitstellung keine Änderung bewirkt wurde und die Operation ein leeres Changeset zurückgibt.

Um in AWS CLI Version 2 zum ursprünglichen Verhalten zurückzukehren, müssen Sie das neue Flag --fail-on-empty-changeset hinzufügen.

AWS CLI Version 2 verwendet Amazon-S3-Schlüssel einheitlicher

Für die Amazon-S3-Anpassungsbefehle im s3-Namespace wurde die Konsistenz der Darstellung von Pfaden verbessert. In AWS CLI Version 2 werden Pfade immer in Relation zum relevanten Schlüssel angezeigt. AWS CLI Version 1 zeigte Pfade manchmal im absoluten und manchmal im relativen Format.

AWS CLI Version 2 verwendet den korrekten regionalen Amazon-S3-Endpunkt für us-east-1-Region

Wenn Sie AWS CLI Version 1 für die Verwendung der Region us-east-1 konfigurieren, verwendet die AWS CLI den globalen Endpunkt s3.amazonaws.com, der physisch in der Region us-east-1 gehostet wurde. AWS CLI verwendet nun den echten regionalen Endpunkt s3.us-east-1.amazonaws.com, wenn diese Region angegeben wird. Um die AWS CLI Version 2 dazu zu zwingen, den globalen Endpunkt zu verwenden, können Sie die Region für einen Befehl auf aws-global setzen.

AWS CLI Version 2 verwendet standardmäßig regionale AWS STS-Endpunkte

Standardmäßig sendet AWS CLI Version 2 alle AWS STS-API-Anforderungen an den regionalen Endpunkt für die aktuell konfigurierte AWS-Region.

Standardmäßig sendet AWS CLI Version 1 alle AWS STS-Anforderungen an den regionalen AWS STS-Endpunkt. Sie können dieses Standardverhalten in V1 mithilfe der Einstellung sts_regional_endpoints steuern.

AWS CLI Version 2 ersetzt ecr get-login mit ecr get-login-password

Die AWS CLI Version 2 ersetzt den Befehl aws ecr get-login durch den neuen Befehl aws ecr get-login-password, der die automatisierte Integration mit der Containerauthentifizierung verbessert.

Der Befehl aws ecr get-login-password verringert das Risiko, dass Ihre Anmeldeinformationen in der Prozessliste, dem Shellverlauf oder anderen Protokolldateien offengelegt werden. Er verbessert außerdem die Kompatibilität mit dem Befehl docker login und ermöglicht eine bessere Automatisierung.

Der Befehl aws ecr get-login-password ist in AWS CLI Version 1.17.10 und höher und AWS CLIVersion 2 verfügbar. Der ältere aws ecr get-login-Befehl ist aus Gründen der Abwärtskompatibilität weiterhin in der AWS CLI Version 1 verfügbar.

Mit dem Befehl aws ecr get-login-password können Sie den folgenden Code ersetzen, mit dem ein Passwort abgerufen wird.

$(aws ecr get-login --no-include-email)

Verwenden Sie stattdessen den folgenden Beispielbefehl, um das Risiko zu verringern, das Passwort für den Shellverlauf oder die Protokolle offenzulegen. In diesem Beispiel wird das Kennwort direkt an den Befehl docker login übergeben, wo es durch die Option --password-stdin dem Password-Parameter zugewiesen wird.

aws ecr get-login-password | docker login --username AWS --password-stdin MY-REGISTRY-URL

AWS CLI-Support Version 2 für Plugins ändert sich

Der Plugin-Support in der AWS CLI Version 2 ist vollständig provisorisch und soll Benutzern helfen, von AWS CLI Version 1 zu migrieren, bis eine stabile, aktualisierte Plugin-Schnittstelle freigegeben wird. Es gibt keine Garantie, dass ein bestimmtes Plugin oder selbst die CLI-Plug-in-Schnittstelle in zukünftigen Versionen der AWS CLI Version 2 unterstützt wird. Wenn Sie sich auf Plugins verlassen, stellen Sie sicher, dass Sie eine bestimmte Version der CLI sperren und die Funktionalität Ihres Plugins testen, wenn Sie ein Upgrade durchführen.

Um Plug-In-Support zu aktivieren, erstellen Sie einen [plugins]-Abschnitt in Ihrer ~/.aws/config.

[plugins] cli_legacy_plugin_path = <path-to-plugins>/python3.7/site-packages <plugin-name> = <plugin-module>

Im Abschnitt [plugins] definieren Sie zunächst die Variable cli_legacy_plugin_path und setzen ihren Wert auf den Pfad der Python-Websitepakete, in dem sich Ihr Plugin-Modul befindet. Dann können Sie ein Plugin konfigurieren, indem Sie einen Namen für das Plugin (plugin-name) und den Dateinamen des Python-Moduls (plugin-module) angeben, das den Quellcode für Ihr Plugin enthält. Die CLI lädt jedes Plugin, indem sie seine plugin-module-Funktion importiert und seine awscli_initialize-Funktion aufruft.

AWS CLI Version 2 unterstützt keine „versteckten“ Aliase mehr

AWS CLI Version 2 unterstützt die folgenden versteckten Aliase nicht mehr, die in Version 1 unterstützt wurden.

In der folgenden Tabelle werden in der ersten Spalte der Service, Befehl und Parameter angezeigt, die in allen Versionen funktionieren, einschließlich AWS CLI Version 2. In der zweiten Spalte wird der Alias angezeigt, der in AWS CLI Version 2 nicht mehr funktioniert.

Funktionierender Service, Befehl und Parameter Veralteter Alias
cognito-identity create-identity-pool open-id-connect-provider-arns open-id-connect-provider-ar-ns
storagegateway describe-tapes tape-arns tape-ar-ns
storagegateway.describe-tape-archives.tape-arns tape-ar-ns
storagegateway.describe-vtl-devices.vtl-device-arns vtl-device-ar-ns
storagegateway.describe-cached-iscsi-volumes.volume-arns volume-ar-ns
storagegateway.describe-stored-iscsi-volumes.volume-arns volume-ar-ns
route53domains.view-billing.start-time start
deploy.create-deployment-group.ec2-tag-set ec-2-tag-set
deploy.list-application-revisions.s3-bucket s-3-bucket
deploy.list-application-revisions.s3-key-prefix s-3-key-prefix
deploy.update-deployment-group.ec2-tag-set ec-2-tag-set
iam.enable-mfa-device.authentication-code1 authentication-code-1
iam.enable-mfa-device.authentication-code2 authentication-code-2
iam.resync-mfa-device.authentication-code1 authentication-code-1
iam.resync-mfa-device.authentication-code2 authentication-code-2
importexport.get-shipping-label.street1 street-1
importexport.get-shipping-label.street2 street-2
importexport.get-shipping-label.street3 street-3
lambda.publish-version.code-sha256 code-sha-256
lightsail.import-key-pair.public-key-base64 public-key-base-64
opsworks.register-volume.ec2-volume-id ec-2-volume-id

AWS CLI Version 2 unterstützt nicht mehr die api_versions-Einstellung der Konfigurationsdatei

AWS CLI Version 2 unterstützt nicht mehr das Aufrufen älterer Versionen von AWS-Service-APIs mithilfe der api_versions-Konfigurationsdatei-Einstellung. Alle AWS CLI-Befehle rufen nun die neueste Version der Service-APIs auf, die derzeit vom Endpunkt unterstützt werden.