

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 第 2 AWS CLI 版中的新功能和變更
<a name="cliv2-migration-changes"></a>

本主題說明第 1 AWS CLI 版和第 2 AWS CLI 版之間行為的新功能和變更。這些變更可能需要您更新指令碼或命令，才能在第 2 版中獲得與在第 1 版中執行的相同行為。

**Topics**
+ [AWS CLI 第 2 版新功能](#cliv2-migration-changes-features)
+ [中斷第 1 AWS CLI 版和第 2 AWS CLI 版之間的變更](#cliv2-migration-changes-breaking)

## AWS CLI 第 2 版新功能
<a name="cliv2-migration-changes-features"></a>

 AWS CLI 第 2 版是 的最新主要版本， AWS CLI 並支援所有最新的功能。由於在第 2 版中推出的某些功能無法回溯至第 1 版，因此您必須升級才能存取這些功能。重要功能如下所示：

**不需要 Python 解譯器**  
第 2 AWS CLI 版不需要另外安裝 Python。它包括一個嵌入式版本。

**[精靈](cli-usage-wizard.md)**  
您可以搭配 第 2 AWS CLI 版使用精靈。該精靈會逐步引導您建構某些命令。

**[IAM Identity Center 驗證IAM Identity Center 概念教學課程： AWS IAM Identity Center 和 Amazon S3AWS CLI 範例](cli-configure-sso.md)**  
如果您的組織使用 AWS IAM Identity Center (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)**  
啟用時，第 2 AWS CLI 版會在您執行 命令時提示您輸入`aws`命令、參數和資源。

**[執行 的官方 Amazon ECR Public 或 Docker 映像 AWS CLI](getting-started-docker.md)**  
的官方 Docker 映像 AWS CLI 提供 AWS 直接支援和維護的隔離性、可攜性和安全性。如此一來，您就可以在容器型環境中使用 第 2 AWS CLI 版，而無需自行管理安裝。

**[用戶端分頁程式](cli-usage-pagination.md#cli-usage-pagination-clientside)**  
第 2 AWS CLI 版提供使用用戶端分頁程式進行輸出。根據預設，此功能會開啟並透過作業系統的預設分頁程式傳回所有輸出。

**[`aws configure import`](cli-configure-files.md#cli-config-aws_configure_import)**  
匯入從 AWS 管理主控台產生的 `.csv` 憑證。系統會匯入 `.csv` 檔案，其設定檔名稱與 IAM 使用者名稱相符。

**[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)**  
第 2 AWS CLI 版具有高階 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)**  
第 2 AWS CLI 版具有自訂`aws logs tail`命令，可追蹤 Amazon CloudWatch Logs 群組的日誌。預設情況下，該命令會傳回過去十分鐘內來自所有關聯的 CloudWatch Logs 串流的日誌。

**[為高階 `s3` 命令新增中繼資料支援](cli-services-s3-commands.md#using-s3-commands-before-large)**  
第 2 AWS CLI 版會將 `--copy-props` 參數新增至高階`s3`命令。使用此參數，您可以為 Amazon Simple Storage Service (Amazon S3) 設定更多的中繼資料和標籤。

**[`AWS_REGION`](cli-configure-envvars.md#envvars-list-AWS_REGION)**  
第 2 AWS CLI 版有一個 SDK AWS 相容的環境變數，稱為 `AWS_REGION`。此變數會指定 AWS 區域 要傳送請求的 。它會覆寫 `AWS_DEFAULT_REGION` 環境變數，該變數僅適用於 AWS CLI。

## 中斷第 1 AWS CLI 版和第 2 AWS CLI 版之間的變更
<a name="cliv2-migration-changes-breaking"></a>

本節說明第 1 AWS CLI 版和第 2 AWS CLI 版之間行為的所有變更。這些變更可能需要您更新指令碼或命令，才能在第 2 版中獲得與在第 1 版中執行的相同行為。

**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 版僅使用 Signature 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` 環境變數。下列範例會將 設定為 AWS CLI 在 Windows `UTF-8` 上使用 開啟文字檔案。

```
AWS_CLI_FILE_ENCODING=UTF-8
```

如需詳細資訊，請參閱 [設定 的環境變數 AWS CLI](cli-configure-envvars.md)。

### 預設情況下，會以 base64 編碼字串的格式傳遞二進位參數
<a name="cliv2-migration-binaryparam"></a>

在 中 AWS CLI，某些命令需要 [base64](https://wikipedia.org/wiki/Base64) 編碼的字串，而其他命令則需要 UTF-8-encoded的位元組字串。在 AWS CLI 版本 1 中，在兩種編碼字串類型之間傳遞資料通常需要一些中繼處理。第 2 AWS CLI 版讓處理二進位參數更加一致，這有助於更可靠地將值從一個命令傳遞到另一個命令。

根據預設， AWS CLI 版本 2 會將所有二進位輸入和二進位輸出參數傳遞為 base64 編碼字串 `blobs`（二進位大型物件）。如需詳細資訊，請參閱[Blob](cli-usage-parameters-types.md#parameter-type-blob)。

若要還原到第 1 AWS CLI 版行為，請使用 `cli\$1binary\$1format` 檔案組態或 `--cli-binary-format` 參數。

### 改善 Amazon S3 針對分段副本的檔案屬性和標籤的處理
<a name="cliv2-migration-s3-copy-metadata"></a>

當您使用 `aws s3` 命名空間中的 AWS CLI 版本 1 命令將檔案從一個 S3 儲存貯體位置複製到另一個儲存貯體，且該操作使用[分段複製](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CopyingObjctsMPUapi.html)時，不會將來源物件中的檔案屬性複製到目的地物件。

根據預設， AWS CLI 版本 2 中的對應命令會將所有標籤和部分屬性從來源傳輸到目的地複本。相較於第 1 AWS CLI 版，這可能會導致對 Amazon S3 端點進行更多的 AWS API 呼叫。若要變更 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>

當參數值以 `http://`或 開頭時，第 2 AWS CLI 版不會執行`GET`操作`https://`，也不會使用傳回的內容做為參數值。因此，相關聯的命令列選項`cli_follow_urlparam`會從第 2 AWS CLI 版中移除。

如果您需要擷取 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
```

如果您需要擷取並使用 Web 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` 將檔案以與來源檔案相同的名稱儲存在目前的資料夾中。第二個命令會擷取該下載檔案的內容，並將內容傳遞作為 `--policy-document` 的數值。

### 預設情況下，對於所有輸出使用的分頁程式
<a name="cliv2-migration-output-pager"></a>

根據預設，第 2 AWS CLI 版會透過作業系統的預設分頁程式傳回所有輸出。此程式是在 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) 程式。這可以透過一次顯示一個輸出頁面，讓您比較容易瀏覽來自服務的大量輸出。

您可以設定第 2 AWS CLI 版使用不同的分頁程式，或完全不使用。如需詳細資訊，請參閱[用戶端分頁程式](cli-usage-pagination.md#cli-usage-pagination-clientside)。

### 時間戳記輸出值會標準化為 ISO 8601 格式
<a name="cliv2-migration-timestamp"></a>

根據預設，第 2 AWS CLI 版會以 [ISO 8601 格式](https://wikipedia.org/wiki/ISO_8601)傳回所有時間戳記回應值。在第 1 AWS CLI 版中，命令會以 HTTP API 回應傳回的任何格式傳回時間戳記值，這可能因服務而異。

若要以 HTTP API 回應傳回的格式查看時間戳記，請使用您的 `config` 檔案中的 `wire` 值。如需詳細資訊，請參閱 `cli\$1timestamp\$1format`。

### 改善未造成任何變更的 CloudFormation 部署處理
<a name="cliv2-migration-cfn"></a>

根據預設，在第 1 AWS CLI 版中，如果您部署的 CloudFormation 範本不會造成任何變更，則 會 AWS CLI 傳回失敗的錯誤碼。如果您不認為這是錯誤，並希望指令碼繼續進行，將會發生問題。您可以透過新增 旗標 來解決第 1 AWS CLI 版中的問題`-–no-fail-on-empty-changeset`，該旗標會傳回 `0`。

由於這是常見的使用案例，因此當部署未造成任何變更，且操作傳回空的變更集`0`時，第 2 AWS CLI 版預設會傳回 的成功結束碼。

若要還原為原始的行為，請新增旗標 `--fail-on-empty-changeset`。

### 已變更 `us-east-1` 區域的區域性 Amazon S3 端點的預設行為
<a name="cliv2-migration-s3-regional-endpoint"></a>

當您將AWS CLI 版本 1 設定為使用 `us-east-1`區域時， AWS CLI 會使用實際託管在 `us-east-1`區域中的全域`s3.amazonaws.com`端點。指定區域`s3.us-east-1.amazonaws.com`時，第 2 AWS CLI 版會使用真正的區域端點。若要強制 AWS CLI 版本 2 使用全域端點，您可以將命令的區域設定為 `aws-global`。

### 變更區域 AWS STS 端點的預設行為
<a name="cliv2-migration-sts-regional-endpoint"></a>

根據預設， AWS CLI 版本 2 會將 all AWS Security Token Service (AWS STS) API 請求傳送至目前設定的 區域端點 AWS 區域。

根據預設， `1.42.0` 第 1 AWS CLI 版的任何 版本都會將請求傳送至 AWS STS 全域 AWS STS 端點。您可以藉由使用 [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 版中控制此預設行為。

如果您從這些較新版本遷移到第 2 AWS CLI 版，則 或之後的任何版本`1.42.0`都會使用區域端點做為預設值，此行為保持不變。

### 已移除 `ecr get-login` 並替換為 `ecr get-login-password`
<a name="cliv2-migration-ecr-get-login"></a>

第 2 AWS CLI 版會將 命令取代`aws ecr get-login`為 `aws ecr get-login-password`命令，以改善與容器身分驗證的自動化整合。

`aws ecr get-login-password` 命令可降低在程式清單、Shell 歷史記錄或其他日誌檔中公開憑證的風險。它也改善了與 `docker login` 命令的相容性，以獲得更好的自動化。

此`aws ecr get-login-password`命令適用於 1.17.10 AWS CLI 版和更新版本，以及 第 2 AWS CLI 版。舊版 `aws ecr get-login` 命令仍可在 AWS CLI 版本 1 中使用，以便回溯相容。

您可以使用 `aws ecr get-login-password` 命令取代用於擷取密碼的下列程式碼。

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

若要降低將密碼公開給 Shell 歷史記錄或日誌檔的風險，請改用下列範例命令。在此範例中，密碼會直接傳送到 `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>

第 2 AWS CLI 版中的外掛程式支援完全是暫時性的，旨在協助使用者從第 1 AWS CLI 版遷移，直到發行穩定且更新的外掛程式界面為止。不保證未來版本 AWS CLI 2 將支援特定外掛程式，甚至 AWS CLI 外掛程式界面。如果您依賴外掛程式，請務必鎖定 的特定版本， AWS 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`)，其中包含您的外掛程式的原始程式碼來設定外掛程式。會透過匯入 `plugin-module`並呼叫其 `awscli_initialize`函數來 AWS CLI 載入每個外掛程式。

### 已移除隱藏別名支援
<a name="cliv2-migration-aliases"></a>

AWS CLI 第 2 版不再支援第 1 版中支援的下列隱藏別名。

在下表中，第一欄顯示可在所有版本中運作的服務、命令和參數，包括第 2 AWS CLI 版。第二欄顯示不再適用於第 2 AWS CLI 版的別名。


| 運作的服務、命令和參數 | 過時的別名 | 
| --- | --- | 
| 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 服務 APIs。所有 AWS CLI 命令現在都會呼叫端點目前支援之服務 APIs 的最新版本。

### AWS CLI 第 2 版僅使用 Signature v4 來驗證 Amazon S3 請求
<a name="cliv2-migration-sigv4"></a>

第 2 AWS CLI 版不支援舊版簽章演算法，以密碼編譯方式驗證傳送至 Amazon S3 端點的服務請求。此簽署會在每個 Amazon S3 請求中自動執行，並且僅支援 [Signature Version 4 簽署程序](https://docs.aws.amazon.com/AmazonS3/latest/userguide/reference_aws-signing.html)。您無法設定簽章版本。所有 Amazon S3 儲存貯體預先簽章的 URL 現在僅使用 Sigv4，最長有效期為一週。

### AWS CLI 第 2 版與分頁參數更一致
<a name="cliv2-migration-skeleton-paging"></a>

在 AWS CLI 版本 1 中，如果您在命令列指定分頁參數，則自動分頁會如預期關閉。但是，當您使用具有 `‐‐cli-input-json` 參數的檔案指定分頁參數，而自動分頁未關閉時，可能會導致非預期的輸出。無論您如何提供參數，第 2 AWS CLI 版都會關閉自動分頁。

### AWS CLI 第 2 版在所有命令中提供更一致的傳回代碼
<a name="cliv2-migration-return-codes"></a>

 AWS CLI 與版本 AWS CLI 1 相比，版本 2 在所有命令中更為一致，並正確傳回適當的結束程式碼。我們也新增了結束代碼 252、253 和 254。如需結束代碼的詳細資訊，請參閱 [AWS CLI 中的命令列傳回碼](cli-usage-returncodes.md)。

如果您依賴 AWS CLI 版本 1 如何使用傳回碼值，建議您檢查結束碼，以確保您取得預期的值。