

# AWS CLI バージョン 2 の新機能と変更点
<a name="cliv2-migration-changes"></a>

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

**Topics**
+ [AWS CLI バージョン 2 の新機能](#cliv2-migration-changes-features)
+ [AWS CLI バージョン 1 と AWS CLI バージョン 2 の間の重要な変更](#cliv2-migration-changes-breaking)

## AWS CLI バージョン 2 の新機能
<a name="cliv2-migration-changes-features"></a>

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

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

**[ウィザード](cli-usage-wizard.md)**  
ウィザードは AWS CLI バージョン 2 と共に使用できます。ウィザードの指示に従って、特定のコマンドを作成できます。

**[IAM Identity Center 認証IAM アイデンティティセンターの概念チュートリアル: AWS IAM アイデンティティセンター および Amazon S3AWS CLI の例](cli-configure-sso.md)**  
組織で AWS IAM アイデンティティセンター (IAM Identity Center) を使用している場合、ユーザーは Active Directory、組み込み IAM Identity Center ディレクトリ、または [IAM Identity Center に接続された別の IdP](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html) にサインインできます。次に、それらは、AWS CLI コマンドを実行できる AWS Identity and Access Management (IAM) ロールにマッピングされます。

**[自動プロンプト](cli-usage-parameters-prompting.md)**  
有効にした場合、AWS CLI バージョン 2 では、`aws` コマンドの実行時にコマンド、パラメータ、およびリソースのプロンプトを表示できます。

**[AWS CLI に対して公式の Amazon ECR Public イメージまたは Docker イメージを実行する](getting-started-docker.md)**  
AWS CLI の公式 Docker イメージは、AWS が直接サポートおよび維持する分離、移植性、およびセキュリティを提供します。これにより、インストールを自分で管理しなくても、コンテナベースの環境で AWS CLI バージョン 2 を使用できます。

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

**[`aws configure import`](cli-configure-files.md#cli-config-aws_configure_import)**  
AWS マネジメントコンソールから生成された重要な `.csv` 認証情報をインポートします。IAM ユーザー名と一致するプロファイル名を持つ `.csv` ファイルがインポートされます。

**[https://docs.aws.amazon.com/cli/latest/reference/configure/list-profiles.html](https://docs.aws.amazon.com/cli/latest/reference/configure/list-profiles.html)**  
設定したすべてのプロファイルの名前を一覧表示します。

**[YAML ストリーム出力形式](cli-usage-output-format.md#yaml-stream-output)**  
`yaml` および `yaml-stream` 形式では [YAML](https://yaml.org) 形式のメリットを活用します。また、データをユーザーにストリーミングすることで、大きなデータセットの表示の応答性を向上させます。クエリ全体がダウンロードされる前に、YAML データの表示および使用を開始できます。

**[DynamoDB 用の新しい高レベルの `ddb` コマンド](https://docs.aws.amazon.com/cli/latest/reference/ddb/index.html)**  
AWS CLI バージョン 2 には高レベルの Amazon DynamoDB コマンド [https://docs.aws.amazon.com/cli/latest/reference/api/latest/reference/ddb/put.html](https://docs.aws.amazon.com/cli/latest/reference/api/latest/reference/ddb/put.html) および [https://docs.aws.amazon.com/cli/latest/reference/api/latest/reference/ddb/select.html](https://docs.aws.amazon.com/cli/latest/reference/api/latest/reference/ddb/select.html) があります。これらのコマンドは、DynamoDB テーブルに項目を配置し、DynamoDB テーブルまたはインデックスを検索するためのシンプルなインターフェイスを提供します。

**[https://docs.aws.amazon.com/cli/latest/reference/logs/tail.html](https://docs.aws.amazon.com/cli/latest/reference/logs/tail.html)**  
AWS CLI バージョン 2 には、Amazon CloudWatch Logs グループのログを末尾にするカスタム `aws logs tail` コマンドがあります。デフォルトでは、このコマンドは過去 10 分間の関連するすべての CloudWatch Logs ストリームから、ログを返します。

**[高レベルの `s3` コマンドに対するメタデータのサポートを追加](cli-services-s3-commands.md#using-s3-commands-before-large)**  
AWS CLI バージョン 2 で、高レベルの `s3` コマンドに `--copy-props` パラメータが追加されました。このパラメータを使用すると、Amazon Simple Storage Service (Amazon S3) の追加のメタデータとタグを設定できます。

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

## AWS CLI バージョン 1 と AWS CLI バージョン 2 の間の重要な変更
<a name="cliv2-migration-changes-breaking"></a>

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

**Topics**
+ [テキストファイルのエンコードを設定するために環境変数を追加](#cliv2-migration-encodingenvvar)
+ [バイナリパラメータはデフォルトで base64 エンコードされた文字列として渡されるようになりました](#cliv2-migration-binaryparam)
+ [マルチパートコピーのファイルプロパティとタグの Amazon S3 処理が改善されました](#cliv2-migration-s3-copy-metadata)
+ [パラメータの `http://` または `https://` URL の自動取得の廃止](#cliv2-migration-paramfile)
+ [デフォルトですべての出力に使用されるページャー](#cliv2-migration-output-pager)
+ [タイムスタンプの出力値は ISO 8601 形式に標準化されています](#cliv2-migration-timestamp)
+ [変更のない、CloudFormation デプロイの処理の改善](#cliv2-migration-cfn)
+ [`us-east-1` リージョンの Amazon S3 エンドポイントのデフォルト動作を変更しました](#cliv2-migration-s3-regional-endpoint)
+ [リージョンの AWS STS エンドポイントのデフォルトの動作を変更しました](#cliv2-migration-sts-regional-endpoint)
+ [`ecr get-login` を削除し、`ecr get-login-password` に置き換えました](#cliv2-migration-ecr-get-login)
+ [AWS CLIプラグインに対する バージョン 2 のサポートが変更されます](#cliv2-migration-profile-plugins)
+ [非表示エイリアスのサポートを削除しました](#cliv2-migration-aliases)
+ [`api_versions` 設定ファイルの設定はサポートされていません](#cliv2-migration-api-versions)
+ [AWS CLI バージョン 2 は、署名 V4 のみを使用して Amazon S3 リクエストを認証します](#cliv2-migration-sigv4)
+ [AWS CLI バージョン 2 はページングパラメータとの整合性が高くなっています](#cliv2-migration-skeleton-paging)
+ [AWS CLI バージョン 2 は、すべてのコマンドで一貫性のあるリターンコードを提供します。](#cliv2-migration-return-codes)

### テキストファイルのエンコードを設定するために環境変数を追加
<a name="cliv2-migration-encodingenvvar"></a>

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

```
AWS_CLI_FILE_ENCODING=UTF-8
```

詳細については、「[Configuring environment variables for the AWS CLI](cli-configure-envvars.md)」を参照してください。

### バイナリパラメータはデフォルトで base64 エンコードされた文字列として渡されるようになりました
<a name="cliv2-migration-binaryparam"></a>

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

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

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

### マルチパートコピーのファイルプロパティとタグの Amazon S3 処理が改善されました
<a name="cliv2-migration-s3-copy-metadata"></a>

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

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

詳細については、「[マルチパートコピーのファイルプロパティとタグ](cli-services-s3-commands.md#using-s3-commands-before-tags)」を参照してください。

### パラメータの `http://` または `https://` URL の自動取得の廃止
<a name="cliv2-migration-paramfile"></a>

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` の値として渡します。

### デフォルトですべての出力に使用されるページャー
<a name="cliv2-migration-output-pager"></a>

AWS CLI バージョン 2 はデフォルトで、すべての出力をオペレーティングシステムのデフォルトページャープログラム経由で返します。このプログラムは Linux および macOS では [https://ss64.com/bash/less.html](https://ss64.com/bash/less.html) プログラム、Windows では [https://docs.microsoft.com/windows-server/administration/windows-commands/more](https://docs.microsoft.com/windows-server/administration/windows-commands/more) プログラムです。これにより、出力を一度に 1 ページずつ表示することで、サービスからの大量の出力内を移動できます。

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

### タイムスタンプの出力値は ISO 8601 形式に標準化されています
<a name="cliv2-migration-timestamp"></a>

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

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

### 変更のない、CloudFormation デプロイの処理の改善
<a name="cliv2-migration-cfn"></a>

デフォルトで、AWS CLI バージョン 1 では、変更を行わない 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 エンドポイントのデフォルト動作を変更しました
<a name="cliv2-migration-s3-regional-endpoint"></a>

`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 エンドポイントのデフォルトの動作を変更しました
<a name="cliv2-migration-sts-regional-endpoint"></a>

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

AWS CLI バージョン 1 の `1.42.0` 以前はデフォルトで、AWS STS リクエストをグローバル AWS STS エンドポイントに送信します。このバージョン 1 のデフォルト動作は、[https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html#cli-config-sts_regional_endpoints](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html#cli-config-sts_regional_endpoints) 設定を使用して制御できます。

`1.42.0` 以降のリリースでは、リージョンエンドポイントをデフォルトとして使用します。これらの新しいリリースから AWS CLI バージョン 2 に移行する場合、この動作は変更されません。

### `ecr get-login` を削除し、`ecr get-login-password` に置き換えました
<a name="cliv2-migration-ecr-get-login"></a>

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 リファレンスガイド」の「[https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login-password.html](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login-password.html)」を参照してください。

### AWS CLIプラグインに対する バージョン 2 のサポートが変更されます
<a name="cliv2-migration-profile-plugins"></a>

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` 関数を呼び出します。

### 非表示エイリアスのサポートを削除しました
<a name="cliv2-migration-aliases"></a>

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` 設定ファイルの設定はサポートされていません
<a name="cliv2-migration-api-versions"></a>

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

### AWS CLI バージョン 2 は、署名 V4 のみを使用して Amazon S3 リクエストを認証します
<a name="cliv2-migration-sigv4"></a>

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

### AWS CLI バージョン 2 はページングパラメータとの整合性が高くなっています
<a name="cliv2-migration-skeleton-paging"></a>

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

### AWS CLI バージョン 2 は、すべてのコマンドで一貫性のあるリターンコードを提供します。
<a name="cliv2-migration-return-codes"></a>

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

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