大幅な変更 - AWS CLI バージョン 1 からバージョン 2 への移行 - AWS コマンドラインインターフェイス

Python 2.7、3.4、3.5 は AWS CLI バージョン 1 では非推奨です。詳細については、 「AWS CLI バージョンについて」 の「AWS CLI バージョン 1」セクションを参照してください。

大幅な変更 - AWS CLI バージョン 1 からバージョン 2 への移行

このトピックでは、AWS CLI バージョン 1 と AWS CLI バージョン 2 の間の動作の変更について説明します。この変更では、バージョン 1 と同じ動作をバージョン 2 で実行するために、スクリプトまたはコマンドを変更する必要があるものについて述べます。

トピック

AWS CLI バージョン 2 で、環境変数を使用してテキストファイルのエンコードを設定

デフォルトでは、テキストファイルはインストールされたロケールと同じエンコードを使用します。テキストファイルのエンコードをロケールと異なるように設定するには、AWS_CLI_FILE_ENCODING 環境変数を使用します。次の例では、Windows で UTF-8 を使用してテキストファイルを開くように CLI を設定します。

AWS_CLI_FILE_ENCODING=UTF-8

詳細については、「AWS CLI を設定するための環境変数」を参照してください。

AWS CLI バージョン 2 はデフォルトで base64 エンコードされた文字列としてバイナリパラメータを渡すようになりました

AWS CLI バージョン 1 では、あるコマンドの出力から別のコマンドの入力にバイナリパラメータを渡す場合に、常に中間処理を必要とせずに簡単にできるとは限りませんでした。base64 でエンコードされた文字列を必要とするコマンドもあれば、UTF8 エンコードのバイト文字列が必要なコマンドもあります。AWS CLI バージョン 2 では、バイナリパラメーターの処理の一貫性が向上するため、1 つのコマンドから別のコマンドへの値の受け渡しがより確実になります。

AWS CLI バージョン 2 では、デフォルトではすべてのバイナリ入力パラメータとバイナリ出力パラメータを base64 エンコード文字列として渡すようになりました。バイナリ入力を必要とするパラメータは、ドキュメントで blob (バイナリラージオブジェクト) として指定された型を持っています。AWS CLI バージョン 2 では、CLI パラメータにバイナリデータをファイルとして渡すために、次のプレフィックスを使用してファイルを指定できます。

  • file:// - AWS CLI は、ファイルコンテンツを base64 でエンコードされたテキストとして扱います。例: --some-param file://~/my/path/file-with-base64.txt

  • fileb:// - AWS CLI は、ファイルの内容をエンコードされていないバイナリとして扱います。例: --some-param fileb://~/my/path/file-with-raw-binary.bin

プロファイルの ~/.aws/config ファイルに次の行を指定すると、AWS CLI バージョン 2 に AWS CLI バージョン 1 の動作に戻すことができます。

cli_binary_format=raw-in-base64-out

また、コマンドラインにパラメータ --cli-binary-format raw-in-base64-out を含めることで、アクティブなプロファイル設定を上書きして、個々のコマンドの設定を元に戻すこともできます。

AWS CLI バージョン 1 の動作に戻し、file:// または fileb://を使用してバイナリパラメータのファイルを指定すると、AWS CLI はファイルの内容をエンコードされていない生のバイナリとして扱います。

AWS CLI バージョン 2 では、マルチパートコピーの実行時のファイルプロパティとタグの Amazon S3 の処理が改善されました

aws s3名前空間で AWS CLI バージョン 1 バージョンのコマンドを使用して、ある Amazon S3 バケットの場所から別の Amazon S3 バケットロケーションにファイルをコピーし、そのオペレーションで マルチパートコピーを使用する場合、ソースオブジェクトのファイルプロパティはコピー先にコピーされません。

デフォルトでは、マルチパートコピーを実行するs3名前空間の AWS CLI バージョン 2 コマンドは、すべてのタグと次のプロパティのセットがコピー元からコピー先に転送されるようになりました (content-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpiresmetadata)。

これにより、AWS CLI バージョン 1 を使用した場合、Amazon S3 エンドポイントへの追加の AWS API 呼び出しが行われる可能性があります。たとえば、HeadObjectGetObjectTagging、および PutObjectTagging が呼び出されます。

AWS CLI バージョン 2 コマンドでこのデフォルトの動作を変更する必要がある場合は、--copy-props パラメータを使用して次のいずれかのオプションを指定します。

  • default - デフォルト値。コピーに、ソースオブジェクトにアタッチされたすべてのタグと、マルチパートコピー以外に使用される --metadata-directive パラメータの次のプロパティが含まれることを指定します。content-typecontent-languagecontent-encodingcontent-dispositioncache-control, expiresmetadata

  • metadata-directive - --metadata-directive マルチパートコピー以外に使用されるパラメータによって包含されるプロパティのみがコピーに含まれることを指定します。タグはコピーされません。

  • none - コピーにソースオブジェクトのプロパティを含みません。

AWS CLI バージョン 2 では、パラメータの URL http:// または https:// が自動的に取得されなくなりました。

AWS CLI バージョン 2 は、パラメータ値が http:// または https://で始まり、返されたコンテンツをパラメータの値として使用する際に、GET オペレーションを実行しなくなりました。URL を取得し、その URL から読み込んだ内容をパラメータの値として渡す必要がある場合は、curl または同様のツールを使用して URL の内容をローカルファイルにダウンロードすることをお勧めします。次に、file:// 構文を使用してそのファイルの内容を読み込み、パラメータの値として使用します。

たとえば、次のコマンドでは、http://www.google.com で見つかったページの内容を取得し、その内容をパラメータとして渡そうとしなくなりました。代わりに、リテラルテキスト文字列 https://google.com をパラメータとして渡します。

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

ウェブ URL の内容をパラメータとして取得して使用する場合は、バージョン 2 で次の操作を実行できます。

$ 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

前の例では、-o パラメータは、ソースファイルと同じ名前で現在のフォルダーにファイルを保存するよう curl に指示します。2 番目のコマンドは、ダウンロードしたファイルの内容を取得し、その内容を --policy-document の値として渡します。

AWS CLI バージョン 2 では、デフォルトですべての出力にページングプログラムが使用されます。

デフォルトでは、AWS CLI バージョン 2 はオペレーティングシステムのデフォルトのページャープログラムを介してすべての出力を返します。デフォルトでは、このプログラムは Linux および macOS では less プログラム、Windows では more プログラムです。これにより、出力を一度に 1 ページずつ表示することで、サービスからの大量の出力内を簡単に移動できます。ただし、スクリプトを実行しているときなどに、キーを押して各ページを取得することは不要で、すべての出力が必要な場合があります。これを行うには、AWS CLI バージョン 2 で別のページングプログラムを使用するか、まったく使用しないかを設定できます。そのためには、~/.aws/config ファイルに AWS_PAGER 環境変数または cli_pager 設定を含め、使用するコマンドを指定します。検索パスにあるコマンドを指定するか、コンピュータで使用可能なコマンドのフルパスとファイル名を指定できます。

以下の例に示すように、変数を空の文字列に設定することで、外部ページングプログラムの使用を完全に無効にすることができます。

~/.aws/config ファイルにオプションを設定する

以下の例は、default プロファイルの設定を示していますが、~/.aws/config ファイル内の任意のプロファイルにその設定を追加できます。

[default] cli_pager=

環境変数を設定する

Linux または macOS:

$ export AWS_PAGER=""

Windows の場合:

C:\> setx AWS_PAGER ""

AWS CLI バージョン 2 はすべてのタイムスタンプ出力値を ISO 8601 形式で返すようになりました

デフォルトでは、AWS CLI バージョン 2 はすべてのタイムスタンプ応答値を ISO 8601 形式 で返します。AWS CLI バージョン 1 では、コマンドが形式に関係なく HTTP API 応答によって返された、タイムスタンプ値を返しました。これは、サービスごとに異なる場合があります。

ISO 8601 形式のタイムスタンプは、次の例のようになります。最初の例は、時刻を UTC (協定世界時) で表し、時刻の後に Z を含めます。日付と時刻は T で区切られます。

2019-10-31T22:21:41Z

別のタイムゾーンを指定するには、Z ではなく、+ または - を指定し、目的のタイムゾーンが UTC より進んでいるまたは遅れている時間数を 2 桁の値として指定します。次の例では、前の例と同じ時刻を示していますが、UTC から 8 時間遅れている太平洋標準時刻に調整されています。

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

HTTP API レスポンスから返された形式でタイムスタンプを表示するには、.aws/config プロファイルに次の行を追加します。

cli_timestamp_format = wire

AWS CLI バージョン 2 では AWS CloudFormation デプロイの処理が改善され、変更はありません

AWS CLI バージョン 1 では、変更なしの AWS CloudFormation テンプレートをデプロイした場合、デフォルトでは AWS CLI はエラーコードで失敗しました。これをエラーとみなさず、スクリプトを続行したい場合は、これが問題になる可能性がありました。AWS CLI バージョン 1 では、0 を返し、スクリプトでエラーを引き起こさないフラグ-–no-fail-on-empty-changeset を追加することで、この問題を回避できます。

これが一般的なケースシナリオであるため、AWS CLI バージョン 2 では、デプロイによる変更がなく、オペレーションが空のチェンジセットを返す場合、正常に終了コード0 が返されるようになりました。

AWS CLI バージョン 2 では、元の動作に戻すには、新しいフラグを追加する必要があります --fail-on-empty-changeset

AWS CLI バージョン 2 では、Amazon S3 キーを一貫して使用しています

s3名前空間内の Amazon S3 カスタマイズコマンドで、パスの表示方法の一貫性が向上しました。AWS CLI バージョン 2 では、パスは常に関連するキーを基準にして表示されます。AWS CLI バージョン 1 は、絶対形式でパスを表示するときと、相対形式でパスを表示するときがありました。

AWS CLI バージョン 2 は、 us-east-1 リージョンに正しい Amazon S3 リージョンのエンドポイントを使用しています

us-east-1 リージョンを使用するように AWS CLI バージョン 1 を設定すると、AWS CLI は us-east-1 リージョンで物理的にホストされている s3.amazonaws.com グローバルエンドポイントを使用しました。AWS CLI バージョン 2 では、リージョンが指定されると、真のリージョンのエンドポイント s3.us-east-1.amazonaws.com を使用するようになりました。AWS CLI バージョン 2 でグローバルエンドポイントを強制的に使用するには、コマンドのリージョンを aws-global に設定します。

AWS CLI バージョン 2 は、デフォルトでリージョナル AWS STS エンドポイントを使用します

デフォルトでは、AWS CLI バージョン 2 は、現在設定されている AWS リージョンのリージョンエンドポイントにすべての AWS STS API リクエストを送信します。

デフォルトでは、AWS CLI バージョン 1 は AWS STS リクエストをグローバル AWS STS エンドポイントに送信します。この V1 のデフォルトの動作は、sts_regional_endpoint 設定を使用して制御できます。

AWS CLI バージョン 2 ではecr get-loginecr get-login-password に置き換えます。

AWS CLI バージョン 2 では、コマンドaws ecr get-login が新しいコマンドaws ecr get-login-password に置き換えられ、コンテナ認証との自動統合が向上します。

aws ecr get-login-password コマンドでは、プロセスリスト、シェル履歴、またはその他のログファイル内の認証情報が公開されるリスクが減ります。また、docker login コマンドとの互換性が向上し、自動化が向上します。

aws ecr get-login-password コマンドは、AWS CLI バージョン 1.17.10 以降および AWS CLI バージョン 2 で使用できます。以前の aws ecr get-login コマンドは、下位互換性を保つため、AWS CLI バージョン 1 でも使用できます。

aws ecr get-login-password コマンドを使用すると、パスワードを取得する以下のコードを置き換えることができます。

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

パスワードをシェルの履歴またはログに公開するリスクを減らすには、代わりに以下の例のコマンドを使用します。この例では、パスワードは docker login コマンドに直接パイプされ、そこで --password-stdin オプションによってパスワードパラメータに割り当てられます。

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

プラグインに対する AWS CLI バージョン 2 のサポートが変更されています。

AWS CLI バージョン 2 でのプラグインのサポートは完全に暫定的なものであり、安定した更新されたプラグインインターフェイスがリリースされるまで、ユーザーが AWS CLI バージョン 1 から移行できるようにすることを目的としています。AWS CLI バージョン 2 の将来のバージョンでは、特定のプラグインまたは CLI プラグインインターフェイスがサポートされる保証はありません。プラグインに依存している場合は、特定のバージョンの CLI にロックして、アップグレード時にプラグインの機能をテストしてください。

プラグインサポートを有効にするには、~/.aws/config[plugins] セクションを作成します。

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

[plugins] セクションで、cli_legacy_plugin_path 変数を定義し、その値を、プラグインモジュールが存在する Python サイトパッケージパスに設定することから始めます。次に、プラグインの名前 (plugin-name)、およびプラグインのソースコードを含む Python モジュールのファイル名 (plugin-module) を指定して、プラグインを設定できます。CLI は、各プラグインをロードするために、それぞれの plugin-module をインポートして awscli_initialize 関数を呼び出します。

AWS CLI バージョン 2 は「非表示」エイリアスをサポートしなくなりました

AWS CLI バージョン 2 では、バージョン 1 でサポートされていた次の非表示エイリアスはサポートされなくなりました。

以下の表の最初の列には、AWS CLI バージョン 2 を含むすべてのバージョンで動作するサービス、コマンド、およびパラメータが表示されます。2 番目の列には、AWS CLI バージョン 2 では動作しなくなったエイリアスを表示しています。

作業サービス、コマンド、パラメータ 廃止されたエイリアス
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