Änderungen brechen — Migrieren vonAWS CLIVersion 1 - AWS Command Line Interface

Python 2.7, 3.4 und 3.5 werden für dasAWS CLIVersion 1 veröffentlicht. Weitere Informationen finden Sie unterAWS CLIAbschnitt Version 1 vonInformationen über dieAWS CLIVersionenaus.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Änderungen brechen — Migrieren vonAWS CLIVersion 1

In diesem Thema werden die Verhaltensunterschiede zwischenAWS CLIVersion 1 undAWS CLIIn Version 2 müssen Sie möglicherweise Änderungen an Skripts oder Befehlen vornehmen, um in Version 2 das gleiche Verhalten wie in Version 1 zu erhalten.

AWS CLIVersion 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 CLIVersion 2 übergibt jetzt standardmäßig binäre Parameter standardmäßig als base64-kodierte Zeichenfolgen

AWS CLIIn 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 sind erforderlichbase64-codierte Strings, andere benötigten UTF8-kodierte Byte-Strings.AWS CLIVersion 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 ist dieAWS CLIIn Version 2 übergibt jetzt 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. Um binäre Daten als Datei an eineAWS CLI-Parameter verwendet, wird derAWS CLIIn Version 2 können Sie die Datei mit den folgenden Präfixen angeben:

  • file://— DieAWS CLIbehandelt den Dateiinhalt als base64-kodierten Text. Beispiel: --some-param file://~/my/path/file-with-base64.txt

  • fileb://— DieAWS CLIbehandelt den Dateiinhalt als unkodiertes Binary. Beispiel: --some-param fileb://~/my/path/file-with-raw-binary.bin

Sie können dieAWS CLIVersion 2 verwenden, um zumAWS CLIVerhalten von Version 1, indem Sie die folgende Zeile in der~/.aws/config-Datei für ein Profil.

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 zumAWS CLI-Verhalten 1 und geben Sie eine Datei für einen binären Parameter entweder mitfile://oder .fileb://, dieAWS CLIbehandelt den Dateiinhalt als unkodiertes rohes Binary.

AWS CLIVersion 2 verbessert die Amazon S3 Handhabung der Dateieigenschaften und Tags durch, wenn mehrteilige Kopien durchgeführt werden

Wenn Sie dieAWS CLIVersion 1 von Befehlen in deraws s3-Namespace, um eine Datei von einem Amazon S3 Bucket-Speicherort in einen anderen Amazon S3-Bucket-Speicherort zu kopieren, und dieser Vorgang verwendetmehrteilige Kopie, werden keine Dateieigenschaften aus dem Quellobjekt in das Zielobjekt kopiert.

Standardmäßig ist dieAWS CLI-Befehle der Version 2 ims3-Namespace, der mehrteilige Kopien ausführen, übertragen jetzt alle Tags und die folgenden Eigenschaften von der Quelle an die Zielkopie:content-type,content-language,content-encoding,content-disposition,cache-control,expires, undmetadata.

Dies kann zu zusätzlichenAWS-API-Aufrufe an den Amazon S3 Endpunkt, die nicht durchgeführt worden wären, wenn SieAWS CLIVersion 1. Dies sind beispielsweise: HeadObject, GetObjectTagging und PutObjectTagging.

Wenn Sie dieses Standardverhalten inAWS CLI-Befehle der Version 2 verwenden, verwenden Sie die--copy-props-Parameter verwenden, um eine der folgenden Optionen anzugeben:

  • 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.

  • -Metadaten-Richtlinie— Gibt an, dass die Kopie nur die Eigenschaften enthält, die von der--metadata-directive-Parameter für Nicht-mehrteilige Kopien verwendet. Es werden keine Tags kopiert.

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

AWS CLIruft Version 2 nicht mehr automatischhttp://oder .https://URLs für Parameter

DieAWS CLIführt keine GET-Operation mehr durch, wenn ein Parameterwert mithttp://oder .https://und 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 CLIVersion 2 verwendet standardmäßig ein Auslagerungsprogramm für die gesamte Ausgabe.

Der Standardwert für istAWS CLIgibt 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. Dazu können Sie dieAWS CLIVersion 2 verwendet, um ein anderes oder gar kein Auslagerungsprogramm zu verwenden. 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/configfile

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 CLIgibt jetzt alle Zeitstempel-Ausgabewerte im ISO 8601-Format zurück.

Der Standardwert für istAWS CLIgibt Version 2 alle Zeitstempel-Antwortwerte in derISO 860format. In :AWS CLIIn 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 T getrennt.

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 CLIVersion 2 verbessert die Handhabung vonAWS CloudFormation-Bereitstellungen, die zu keiner Änderung führen

In :AWS CLIVersion 1, wenn Sie eineAWS CloudFormation-Vorlage, die zu keiner Änderung führte, ist standardmäßig dieAWS CLIist 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 umgehenAWS CLIVersion 1, indem Sie das Flag-–no-fail-on-empty-changesetdie zurückgibt0und verursacht keinen Fehler in Ihrem Skript.

Da dies das übliche Fallszenario ist, wird dieAWS CLIVersion 2 gibt nun standardmäßig einen erfolgreichen Exit-Code von0Wenn durch die Bereitstellung keine Änderung bewirkt wurde und der Vorgang ein leeres Changeset zurückgibt.

In :AWS CLIVersion 2, um zum ursprünglichen Verhalten zurückzukehren, müssen Sie das neue Flag hinzufügen--fail-on-empty-changeset.

AWS CLIVersion 2 verwendet Amazon S3 Schlüssel konsistenter

Für die Amazon S3 -Anpassungsbefehle ims3-Namespace wurde die Konsistenz der Darstellung von Pfaden verbessert. In derAWS CLIIn Version 2 werden Pfade immer in Relation zum relevanten Schlüssel angezeigt. DieAWS CLIzeigte Pfade manchmal im absoluten und manchmal im relativen Format.

AWS CLIVersion 2 verwendet den richtigen regionalen Amazon S3 Endpunkt fürus-east-1Region

Wenn SieAWS CLIVersion 1 verwenden, um dieus-east-1-Region, dieAWS CLIverwendet die globales3.amazonaws.com-Endpunkt, der physisch imus-east-1Region.AWS CLIVersion 2 verwendet jetzt den echten regionalen Endpunkts3.us-east-1.amazonaws.com, wenn diese Region angegeben ist. So erzwingen Sie dieAWS CLIUm den globalen Endpunkt zu verwenden, können Sie die Region für einen Befehl aufaws-global.

AWS CLIVersion 2 verwendet regionaleAWS STS-Endpunkte standardmäßig

Der Standardwert für istAWS CLIVersion 2 sendetAWS STS-API-Anforderungen an den regionalen Endpunkt für die aktuell konfigurierteAWSRegion :

Der Standardwert für istAWS CLIVersion 1 sendetAWS STSAnforderungen an die globaleAWS STS-Endpunkt. Sie können dieses Standardverhalten in V1 mithilfe der Einstellung sts_regional_endpoints steuern.

AWS CLIVersion 2 ersetztecr get-loginmitecr get-login-password

DieAWS CLIVersion 2 ersetzt den Befehlaws ecr get-loginmit dem neuenaws 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.

Dieaws ecr get-login-password-Befehl ist imAWS CLIVersion 1.17.10 und höher, und dieAWS CLIVersion 2. Der ältereaws ecr get-login-Befehl ist weiterhin in derAWS CLIVersion 1 für die Abwärtskompatibilität.

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 CLIVersion 2 ändert sich

Plugin-Unterstützung in derAWS CLIVersion 2 ist vollständig provisorisch und soll Benutzern helfen, vonAWS CLIVersion 1, 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 derAWS CLIVersion 2. 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 Plugin-Unterstützung 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 awscli_initialize-Funktion importiert und seine plugin-module-Funktion aufruft.

AWS CLIVersion 2 unterstützt keine „versteckten“ Aliase mehr

AWS CLIunterstü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ßlichAWS CLIVersion 2. In der zweiten Spalte wird der Alias angezeigt, der in nicht mehr funktioniert.AWS CLIVersion 2

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