AWS CLI 第 2 版的新功能和變更 - AWS Command Line Interface

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

AWS CLI 第 2 版的新功能和變更

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

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 公共或碼頭圖像運行

AWS CLI 的官方 Docker 映像提供了 AWS 直接支援和維護的隔離性、可攜性和安全性。如此可讓您在以容器為基礎的環境中使用 AWS CLI 第 2 版,而不必自行管理安裝。

用戶端分頁程式

AWS CLI 第 2 版允許使用用戶端分頁程式進行輸出。根據預設,此功能會開啟並透過作業系統的預設分頁程式傳回所有輸出。

aws configure import

匯入從 AWS Management Console 產生的 .csv 憑證。系統會匯入 .csv 檔案,其設定檔名稱與 IAM 使用者名稱相符。

aws configure list-profiles

列出已配置的所有設定檔的名稱。

YAML 串流輸出格式

yamlyaml-stream 格式會利用 YAML 格式,同時透過將資料串流傳輸給您,提供更快的大型資料集檢視回應速度。您可以先開始檢視和使用 YAML 資料,再下載整體查詢。

新增 DynamoDB 的高階 ddb 命令

AWS CLI 第 2 版具有高階 Amazon DynamoDB 命令 ddb putddb select。這些命令提供簡化的界面,用於將項目放入 DynamoDB 資料表,以及在 DynamoDB 資料表或索引中進行搜尋。

aws logs tail

AWS CLI 第 2 版具有自訂 aws logs tail 命令,可用於對 Amazon CloudWatch Logs 群組的日誌執行 tail 指令。預設情況下,該命令會傳回過去十分鐘內來自所有關聯的 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 版之間的所有行為變更。這些變更可能需要您更新指令碼或命令,才能在第 2 版中獲得與在第 1 版中執行的相同行為。

已新增環境變數以設定文字檔案編碼

預設情況下,文字檔案使用與安裝的地區設定相同的編碼。Blob由於 AWS CLI 第 2 版使用嵌入式 Python 版本,PYTHONUTF8PYTHONIOENCODING 不支援環境變數。若要將文字檔案的編碼設定為與地區設定不同,請使用 AWS_CLI_FILE_ENCODING 環境變數。以下範例設定 AWS CLI 使用 Windows 上的 UTF-8 來開啟文字檔案。

AWS_CLI_FILE_ENCODING=UTF-8

如需詳細資訊,請參閱 要設定的環境變數 AWS CLI

預設情況下,會以 base64 編碼字串的格式傳遞二進位參數

在 AWS CLI 中,有些命令 base64 編碼字串,其他則需要 UTF-8 編碼的位元組字串。在 AWS CLI 第 1 版中,在兩個編碼字串類型之間傳遞資料通常需要一些中間處理。AWS CLI 第 2 版使處理二進位參數更加一致,這有助於更可靠地將值從一個命令傳遞到另一個命令。

預設情況下,AWS CLI 第 2 版會以 base64 編碼字串 blobs (二進位大型物件) 傳遞所有二進位輸入和二進位輸出參數。如需更多詳細資訊,請參閱 Blob

若要還原為 AWS CLI 第 1 版行為,請使用 cli_binary_format 檔案組態或 --cli-binary-format 參數。

改善 Amazon S3 針對分段副本的檔案屬性和標籤的處理

當您在 aws s3 命名空間中使用 AWS CLI 第 1 版命令,將檔案從一個 S3 儲存貯體位置複製到另一個位置,並且該操作使用分段副本時,不會將檔案屬性從來源物件複製到目的地物件。

預設情況下,AWS CLI 第 2 版中的相關命令會將所有標籤和部分屬性從來源傳輸到目的地副本。相較於 AWS CLI 第 1 版,這可能會導致對 Amazon S3 端點進行更多的 AWS API 呼叫。若要變更 AWS CLI 第 2 版中 s3 命令的預設行為,請使用 --copy-props 參數。

如需更多詳細資訊,請參閱 分段副本中的檔案屬性和標籤

不會為參數自動擷取 http://https:// URL

當參數值以 http://https:// 開頭時,AWS CLI 第 2 版不會執行 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

如果您需要擷取並使用 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 的數值。

預設情況下,對於所有輸出使用的分頁程式

根據預設,AWS CLI 第 2 版會透過作業系統的預設分頁程式傳回所有輸出。此程式是在 Linux 和 macOS 上的 less 程式,以及在 Windows 上的 more 程式。這可以透過一次顯示一個輸出頁面,讓您比較容易瀏覽來自服務的大量輸出。

您可以設定 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 版透過新增旗標 -–no-fail-on-empty-changeset (它會傳回 0) 以解決此問題。

因為這是常見的使用案例,所以在部署沒有造成任何變更,而且操作傳回空的變更集時,AWS CLI 第 2 版預設為傳回成功結束代碼 0

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

已變更 us-east-1 區域的區域性 Amazon S3 端點的預設行為

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

已變更區域性 AWS STS 端點的預設行為

預設情況下,AWS CLI 第 2 版會將所有 AWS Security Token Service (AWS STS) API 請求傳送至目前設定之 AWS 區域 的區域端點。

預設情況下,AWS CLI 第 1 版會將 AWS STS 請求傳送至全域 AWS STS 端點。您可以藉由使用 sts_regional_endpoints 設定,在第 1 版中控制此預設行為。

已移除 ecr get-login 並替換為 ecr get-login-password

AWS CLI 第 2 版使用 aws ecr get-login-password 命令取代 aws ecr get-login 命令,以改善與容器驗證的自動整合。

aws ecr get-login-password 命令可降低在程式清單、Shell 歷史記錄或其他日誌檔中公開憑證的風險。它也改善了與 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)

若要降低將密碼公開給 Shell 歷史記錄或日誌檔的風險,請改用下列範例命令。在此範例中,密碼會直接傳送到 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 第 1 版遷移,直到發行穩定、更新的外掛程式界面。無法保證在未來版本的 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),其中包含您的外掛程式的原始程式碼來設定外掛程式。AWS CLI 透過匯入其 plugin-module 並呼叫其 awscli_initialize 函數來載入每個外掛程式。

已移除隱藏別名支援

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

在下表中,第一欄會顯示在所有版本中運作的服務、命令和參數,包括 AWS CLI 第 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 版僅使用 Signature v4 驗證 Amazon S3 請求。

AWS CLI 第 2 版不支援以早期的簽章演算法加密傳送到 Amazon S3 端點的身分驗證服務請求。此簽署會在每個 Amazon S3 請求中自動執行,並且僅支援 Signature Version 4 簽署程序。您無法設定簽章版本。所有 Amazon S3 儲存貯體預先簽章的 URL 現在僅使用 Sigv4,最長有效期為一週。

AWS CLI 第 2 版與分頁參數更為一致

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

AWS CLI 第 2 版在所有命令中提供更一致的傳回代碼

相較於 AWS CLI 第 1 版,AWS CLI 第 2 版在所有命令中更加一致,並正確地傳回適當的結束代碼。我們也新增了結束代碼 252、253 和 254。如需結束代碼的詳細資訊,請參閱 從 AWS CLI 傳回碼

如果您依賴 AWS CLI 第 1 版使用傳回代碼值,我們建議檢查結束代碼以確保您獲得預期的值。