AWS CLI バージョン 2 の新機能と変更点 - AWS Command Line Interface

AWS CLI バージョン 2 の新機能と変更点

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

AWS CLI バージョン 2 の新機能

AWS CLI バージョン 2 は、AWS CLI の最新メジャーバージョンであり、最新機能をすべてサポートしています。バージョン 2 で導入された一部の機能は、バージョン 1 との下位互換性がないため、これらの機能にアクセスするには、アップグレードする必要があります。主な機能は以下のとおりです。

Python インタプリタは不要です

AWS CLI バージョン 2 では Python を別途インストールする必要はありません。組み込みバージョンが含まれています。

ウィザード

ウィザードは AWS CLI バージョン 2 と共に使用できます。ウィザードの指示に従って、特定のコマンドを作成できます。

IAM Identity Center 認証

組織で AWS IAM Identity Center (IAM Identity Center) を使用している場合、ユーザーは Active Directory、組み込み IAM Identity Center ディレクトリ、または IAM Identity Center に接続された別の IdP にサインインできます。次に、それらは、AWS CLI コマンドを実行できる AWS Identity and Access Management (IAM) ロールにマッピングされます。

自動プロンプト

有効にした場合、AWS CLI バージョン 2 では、aws コマンドの実行時にコマンド、パラメータ、およびリソースのプロンプトを表示できます。

AWS CLI に対して公式の Amazon ECR Public イメージまたは Docker イメージを実行する

AWS CLI の公式 Docker イメージは、AWS が直接サポートおよび維持する分離、移植性、およびセキュリティを提供します。これにより、インストールを自分で管理しなくても、コンテナベースの環境で AWS CLI バージョン 2 を使用できます。

クライアント側のページャー

AWS CLI バージョン 2 では、出力にクライアント側のページャープログラムを使用できます。デフォルトでは、この機能がオンになり、オペレーティングシステムのデフォルトのページャープログラムを介してすべての出力を返します。

aws configure import

AWS Management Consoleから生成された重要な .csv 認証情報をインポートします。IAM ユーザー名と一致するプロファイル名を持つ .csv ファイルがインポートされます。

aws configure list-profiles

設定したすべてのプロファイルの名前を一覧表示します。

YAML ストリーム出力形式

yaml および yaml-stream 形式では YAML 形式のメリットを活用します。また、データをユーザーにストリーミングすることで、大きなデータセットの表示の応答性を向上させます。クエリ全体がダウンロードされる前に、YAML データの表示および使用を開始できます。

DynamoDB 用の新しい高レベルの ddb コマンド

AWS CLI バージョン 2 には高レベルの Amazon DynamoDB コマンド ddb put および ddb select があります。これらのコマンドは、DynamoDB テーブルに項目を配置し、DynamoDB テーブルまたはインデックスを検索するためのシンプルなインターフェイスを提供します。

aws logs tail

AWS CLI バージョン 2 には、Amazon CloudWatch Logs グループのログを末尾にするカスタム aws logs tail コマンドがあります。デフォルトでは、このコマンドは過去 10 分間の関連するすべての CloudWatch Logs ストリームから、ログを返します。

高レベルの s3 コマンドに対するメタデータのサポートを追加

AWS CLI バージョン 2 で、高レベルの s3 コマンドに --copy-props パラメータが追加されました。このパラメータを使用すると、Amazon Simple Storage Service (Amazon S3) の追加のメタデータとタグを設定できます。

AWS_REGION

AWS CLI バージョン 2 には、AWS_REGION と呼ばれる、AWS SDK 互換環境変数があります。この変数は、リクエストの送信先となる AWS リージョン を指定します。これは、AWS_DEFAULT_REGION 環境変数を上書きします (AWS CLI にのみに適用されます)。

AWS CLI バージョン 1 と AWS CLI バージョン 2 の間の重要な変更

このセクションでは、AWS CLI バージョン 1 と AWS CLI バージョン 2 の間の動作におけるすべての変更について説明します。これらの変更では、バージョン 1 と同じ動作をバージョン 2 で実行するために、スクリプトまたはコマンドを更新する必要がある場合があります。

テキストファイルのエンコードを設定するために環境変数を追加

デフォルトでは、blob のテキストファイルはインストールされたロケールと同じエンコードを使用します。AWS CLI バージョン 2 では Python の組み込みバージョンを使用しているため、PYTHONUTF8PYTHONIOENCODING 環境変数はサポートされていません。テキストファイルのエンコードをロケールと異なるように設定するには、AWS_CLI_FILE_ENCODING 環境変数を使用します。次の例では、Windows で UTF-8 を使用してテキストファイルを開くように AWS CLI を設定します。

AWS_CLI_FILE_ENCODING=UTF-8

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

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

AWS CLI では、base64 でエンコードされた文字列を必要とするコマンドもあれば、UTF-8 エンコードのバイト文字列が必要なコマンドもあります。AWS CLI バージョン 1 では、2 つのエンコードされた文字列型間でデータを渡すには、多くの場合、中間処理が必要でした。AWS CLI バージョン 2 では、バイナリパラメータの処理の一貫性が向上するため、1 つのコマンドから別のコマンドに、より確実に値を受け渡すことができます。

AWS CLI バージョン 2 では、デフォルトですべてのバイナリ入力パラメータとバイナリ出力パラメータが base64 でエンコードされた文字列 blobs (バイナリラージオブジェクト) として渡されます 詳細については、「blob」を参照してください。

AWS CLI バージョン 1 の動作に戻すには、cli_binary_format ファイル設定または --cli-binary-format パラメータを使用します。

マルチパートコピーのファイルプロパティとタグの Amazon S3 処理が改善されました

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

デフォルトでは、AWS CLI バージョン 2 の対応するコマンドでは、すべてのタグとプロパティの一部を送信元から送信先のコピーに転送します。AWS CLI バージョン 1 と比較した場合、これによりさらに多くの AWS API コールが Amazon S3 エンドポイントに対して行われる可能性があります。AWS CLI バージョン 2 で s3 コマンドのデフォルト動作を変更するには、--copy-props パラメータを使用します。

詳細については、「マルチパートコピーのファイルプロパティとタグ」を参照してください。

パラメータの http:// または https:// URL の自動取得の廃止

AWS CLI バージョン 2 では、パラメータ値が http:// または https:// で始まる場合は GET オペレーションは実行されず、返されたコンテンツはパラメータの値として使用されません。その結果、関連するコマンドラインのオプション cli_follow_urlparam が AWS CLI バージョン 2 から削除されます。

URL を取得し、その URL の内容をパラメータの値に渡す必要がある場合は、curl または同様のツールを使用して URL の内容をローカルファイルにダウンロードすることをお勧めします。次に、file:// 構文を使用してそのファイルの内容を読み込み、パラメータの値として使用します。

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

$ aws ssm put-parameter \ --value http://www.example.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 はデフォルトで、すべての出力をオペレーティングシステムのデフォルトページャープログラム経由で返します。このプログラムは Linux および macOS では less プログラム、Windows では more プログラムです。これにより、出力を一度に 1 ページずつ表示することで、サービスからの大量の出力内を移動できます。

別のページングプログラムを使用するか、まったく使用しないように AWS CLI バージョン 2 を設定できます。詳細については、「クライアント側のページャー」を参照してください。

タイムスタンプの出力値は ISO 8601 形式に標準化されています

AWS CLI バージョン 2 はデフォルトで、すべてのタイムスタンプレスポンス値を ISO 8601 形式で返します。AWS CLI バージョン 1 では、コマンドによって返されるタイムスタンプ値が HTTP API レスポンスによって返された値の形式になっており、これはサービスによって異なる可能性がありました。

HTTP API レスポンスから返された形式でタイムスタンプを表示するには、config ファイルで値 wire を使用します。詳細については、「cli_timestamp_format」を参照してください。

変更のない、CloudFormation デプロイの処理の改善

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

これは一般的なユースケースであるため、AWS CLI バージョン 2 では、デプロイによって変更が行われず、オペレーションが空の変更セットを返す場合、デフォルトで正常終了コード 0 が返されます。

元の動作に戻すには、フラグ --fail-on-empty-changeset を追加します。

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 STS エンドポイントのデフォルトの動作を変更しました

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

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

ecr get-login を削除し、ecr 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 ecr get-login-password」を参照してください。

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

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

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

[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) を指定して、プラグインを設定できます。AWS CLI は、各プラグインをロードするために、それぞれの plugin-module をインポートして awscli_initialize 関数を呼び出します。

非表示エイリアスのサポートを削除しました

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

api_versions 設定ファイルの設定はサポートされていません

AWS CLI バージョン 2 では、api_versions 設定ファイルの設定を使用した、古いバージョンの AWS のサービス API コールがサポートさません。すべての AWS CLI コマンドは、エンドポイントで現在サポートされている最新バージョンのサービス API を呼び出すようになりました。

AWS CLI バージョン 2 は、署名 V4 のみを使用して Amazon S3 リクエストを認証します

AWS CLI バージョン 2 では、Amazon S3 エンドポイントに送信されるサービスリクエストを暗号化的に認証するための以前の署名アルゴリズムはサポートされていません。この署名は、すべての Amazon S3 リクエストで自動的に行われます。また、署名バージョン 4 の署名プロセスのみがサポートされています。署名バージョンを設定することはできません。すべての Amazon S3 バケット署名済み URL は SigV4 のみを使用し、最大有効期間は 1 週間になりました。

AWS CLI バージョン 2 はページングパラメータとの整合性が高くなっています

AWS CLI バージョン 1 では、コマンドラインでページ分割パラメータを指定すると、自動ページ分割が想定どおりにオフになります。ただし、‐‐cli-input-json パラメータを指定したファイルを使用してページ分割パラメータを指定する場合、自動ページ分割がオフになっていないため、予期しない出力が発生する可能性があります。AWS CLI バージョン 2 では、パラメータの指定方法に関係なく、自動ページ分割がオフになります。

AWS CLI バージョン 2 は、すべてのコマンドで一貫性のあるリターンコードを提供します。

AWS CLI バージョン 2 はすべてのコマンドでより高い一貫性があり、AWS CLI バージョン 1 と比較した場合、適切な終了コードを正しく返します。また、終了コード 252、253、254 を追加しました。終了コードの詳細については、「AWS CLI でのコマンドラインのリターンコード」を参照してください。

AWS CLI バージョン 1 によるリターンコード値の使用方法に関する依存関係がある場合は、終了コードをチェックして、予期している値を取得していることを確認するようお勧めします。