Amazon CLI 版本 2 中的新功能和变化 - Amazon Command Line Interface
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon CLI 版本 2 中的新功能和变化

本主题介绍 Amazon CLI 版本 1 和 Amazon CLI 版本 2 之间的新功能和行为变化。这些变化可能要求您更新脚本或命令,以便在版本 2 中获得与版本 1 中相同的行为。

Amazon CLI 版本 2 新功能

Amazon CLI 版本 2 是 Amazon CLI 的最新主版本,支持所有最新功能。版本 2 中引入的某些功能无法向后兼容版本 1,您必须升级才能访问这些功能。这些特征如下所示:

不需要 Python 解释器

Amazon CLI 版本 2 不需要单独安装 Python。它包括一个嵌入式版本。

向导

您可以将向导与 Amazon CLI 版本 2 结合使用。此向导将引导您构建某些命令。

IAM Identity Center 身份验证

如果您的企业使用 Amazon IAM Identity Center(IAM Identity Center),则用户可以登录到 Active Directory、内置 IAM Identity Center 目录或连接到 IAM Identity Center 的其他 IdP。然后,它们映射到允许您运行 Amazon CLI 命令的 Amazon Identity and Access Management (IAM) 角色。

自动提示

如果启用,当您运行 aws 命令时,Amazon CLI 版本 2 可以提示您输入命令、参数和资源。

通过官方 Amazon ECR Public 映像或 Docker 映像运行 Amazon CLI

Amazon CLI 的官方 Docker 映像提供 Amazon 直接支持和维护的隔离、可移植性和安全性。这样,您可以在基于容器的环境中使用 Amazon CLI 版本 2,而无需自行管理安装。

客户端分页程序

Amazon CLI 版本 2 支持使用客户端分页程序处理输出。原定设置情况下,此功能处于启用状态,并通过操作系统的原定设置分页程序返回所有输出。

aws configure import

导入从 Amazon Web Services Management Console生成的 .csv 凭证。将导入一个配置文件名称与 IAM 用户名匹配的 .csv 文件。

aws configure list-profiles

列出您已经配置的所有配置文件的名称。

YAML 流输出格式

yamlyaml-stream 格式利用 YAML 格式,同时通过向您流式传输数据,使您在查看大型数据集时的响应能力更高。您可以在整个查询下载之前开始查看和使用 YAML 数据。

适用于 DynamoDB 的新的高级 ddb 命令

Amazon CLI 版本 2 具有高级 Amazon DynamoDB 命令 ddb putddb select。这些命令提供了一个简化的界面,用于将项目放入 DynamoDB 表中以及在 DynamoDB 表或索引中进行搜索。

aws logs tail

Amazon CLI 版本 2 具有自定义 aws logs tail 命令,用于跟踪 Amazon CloudWatch 日志组的日志。原定设置情况下,该命令从过去十分钟内所有关联的 CloudWatch Logs 流返回日志。

添加了对高级 s3 命令的元数据支持

Amazon CLI 版本 2 将 --copy-props 参数添加到高级 s3 命令中。使用此参数,您可以为 Amazon Simple Storage Service (Amazon S3) 配置其他元数据和标签。

AWS_REGION

Amazon CLI 版本 2 有一个与 Amazon SDK 兼容的环境变量,名为 AWS_REGION。此变量指定要向其发送请求的 Amazon Web Services 区域。它覆盖 AWS_DEFAULT_REGION 环境变量,该变量仅适用于 Amazon CLI。

Amazon CLI 版本 1 和 Amazon CLI 版本 2 之间的突破性更改

本节介绍 Amazon CLI 版本 1 和 Amazon CLI 版本 2 之间行为方面的所有变化。这些变化可能要求您更新脚本或命令,以便在版本 2 中获得与版本 1 中相同的行为。

添加了用于设置文本文件编码的环境变量

原定设置情况下,Blob的文本文件使用与已安装的区域设置相同的编码。由于 Amazon CLI 版本 2 使用的是 Python 的嵌入式版本,因此,不支持 PYTHONUTF8PYTHONIOENCODING 环境变量。要将文本文件的编码设置为不同于区域设置,请使用 AWS_CLI_FILE_ENCODING 环境变量。下面的示例将 Amazon CLI 设置为在 Windows 上使用 UTF-8 打开文本文件。

AWS_CLI_FILE_ENCODING=UTF-8

有关更多信息,请参阅用于配置 Amazon CLI 的环境变量

原定设置情况下,二进制参数作为 base64 编码字符串进行传递

在 Amazon CLI 中,有些命令需要使用 base64 编码的字符串,其他命令则需要使用 UTF-8 编码的字节字符串。在 Amazon CLI 版本 1 中,在两种编码字符串类型之间传递数据通常需要一些中间处理。Amazon CLI 版本 2 使处理二进制参数更加一致,从而有助于更可靠地将值从一个命令传递到另一个命令。

原定设置情况下,Amazon CLI 版本 2 将所有二进制输入和二进制输出参数作为 base64 编码字符串 blobs(二进制大型对象)进行传递。有关更多信息,请参阅Blob

要恢复为 Amazon CLI 版本 1 行为,请使用 cli_binary_format 文件配置或 --cli-binary-format 参数。

改进了执行分段复制时 Amazon S3 处理文件属性和标签的方式

当您使用 aws s3 命名空间中的 Amazon CLI 版本 1 命令将文件从一个 S3 存储桶位置复制到另一个存储桶位置,并且该操作使用分段复制时,源对象中的任何文件属性都不会复制到目标对象。

原定设置情况下,Amazon CLI 版本 2 中的相应命令将所有标签和某些属性从源副本传输到目标副本。与 Amazon CLI 版本 1 相比较,这可能会导致对 Amazon S3 端点进行更多 Amazon API 调用。要更改 Amazon CLI 版本 2 中 s3 命令的原定设置行为,请使用 --copy-props 参数。

有关更多信息,请参阅分段复制中的文件属性和标签

不自动检索 http://https:// URL 以获取参数

当参数值以 http://https:// 开头,但不使用返回的内容作为参数值时,Amazon CLI 版本 2 不执行 GET 操作。因此,将从 Amazon CLI 版本 2 中删除关联的命令行选项 cli_follow_urlparam

如果您需要检索 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 的值传递。

原定设置情况下,使用分页程序处理所有输出

原定设置情况下,Amazon CLI 版本 2 会通过操作系统的原定设置分页程序返回所有输出。此程序是 Linux 或 macOS 上的 less 程序,以及 Windows 上的 more 程序。这样,通过一次一页显示服务的输出,从而帮助您浏览大量输出。

您可以将 Amazon CLI 版本 2 配置为使用其他分页程序或根本不使用分页程序。有关更多信息,请参阅客户端分页程序

时间戳输出值标准化为 ISO 8601 格式

原定设置情况下,Amazon CLI 版本 2 以 ISO 8601 格式返回所有时间戳响应值。在 Amazon CLI 版本 1 中,命令以 HTTP API 响应返回的任何格式返回时间戳值,而格式可能因服务而异。

要查看以由 HTTP API 响应返回的格式表示的时间戳,请在 config 文件中使用 wire 值。有关更多信息,请参阅cli_timestamp_format

改进了 CloudFormation 部署的处理,而这不会导致任何更改

原定设置情况下,在 Amazon CLI 版本 1 中,如果您部署的 Amazon CloudFormation 模板未导致任何更改,则 Amazon CLI 返回失败错误代码。如果您不认为这是一个错误,并希望您的脚本继续运行,这可能导致出现问题。在 Amazon CLI 版本 1 中,可以通过添加返回 0 的标志 -–no-fail-on-empty-changeset 来解决此问题。

因为这是常见使用案例,所以,当部署没有导致更改并且操作返回空更改集时,Amazon CLI 版本 2 原定设置为返回成功的退出代码 0

要恢复到原始行为,请添加标志 --fail-on-empty-changeset

更改了区域 Amazon S3 端点对于 us-east-1 区域的原定设置行为

当您将 Amazon CLI 版本 1 配置为使用 us-east-1 区域时,Amazon CLI 使用物理托管在 us-east-1 区域中的全局 s3.amazonaws.com 端点。Amazon CLI 版本 2 会在指定区域时使用真正的区域端点 s3.us-east-1.amazonaws.com。要强制 Amazon CLI 版本 2 使用全局终端节点,您可以将命令的区域设置为 aws-global

已更改区域 Amazon STS 端点的原定设置行为

原定设置情况下,Amazon CLI 版本 2 会将所有 Amazon Security Token Service (Amazon STS) API 请求发送到当前配置的 Amazon Web Services 区域的区域端点。

原定设置情况下,Amazon CLI 版本 1 将 Amazon STS 请求发送到全局 Amazon STS 端点。您可以使用 sts_regional_endpoints 设置来控制版本 1 中的此原定设置行为。

ecr get-login 已删除并替换为 ecr get-login-password

Amazon CLI 版本 2 将 aws ecr get-login 命令替换为 aws ecr get-login-password 命令,以改进与容器身份验证的自动集成。

aws ecr get-login-password 命令可降低在进程列表、shell 历史记录或其他日志文件中公开您的凭证的风险。它还提高了与 docker login 命令的兼容性,从而改善自动化处理的效果。

aws ecr get-login-password 命令在 Amazon CLI 版本 1.17.10 及更高版本以及 Amazon CLI 版本 2 中提供。为保持向后兼容性,较早的 aws ecr get-login 命令仍在 Amazon 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

有关更多信息,请参阅《Amazon CLI 版本 2 参考指南》中的 aws ecr get-login-password

Amazon CLI 版本 2 对插件的支持会不断变化

Amazon CLI 版本 2 中的插件支持完全是暂时的,目的是在发布更新的稳定版插件接口之前帮助用户从 Amazon CLI 版本 1 进行迁移。不保证某个特定的插件甚或是 Amazon CLI 插件接口在未来版本的 Amazon CLI 版本 2 中受支持。如果您依赖于插件,请务必锁定到 Amazon 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) 的文件名,对插件进行配置。Amazon CLI 会通过导入插件的 plugin-module 并调用插件的 awscli_initialize 函数来加载每个插件。

已删除隐藏别名支持

Amazon CLI 版本 2 不再支持版本 1 中支持的以下隐藏别名。

在下表中,第一列显示适用于所有版本(包括 Amazon CLI 版本 2)的服务、命令和参数。第二列显示不再适用于 Amazon 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 配置文件设置

Amazon CLI 版本 2 不支持通过使用 api_versions 配置文件设置调用较早版本的 Amazon 服务 API。所有 Amazon CLI 命令现在可调用终端节点当前支持的服务 API 的最新版本。

Amazon CLI 版本 2 仅使用签名 v4 对 Amazon S3 请求进行身份验证

Amazon CLI 版本 2 不支持使用较早的签名算法对发送到 Amazon S3 端点的服务请求进行加密身份验证。这种签名会在每个 Amazon S3 请求中自动发生,但仅支持签名版本 4 签名流程。您无法配置签名版本。现在,所有 Amazon S3 存储桶预签名 URL 都只使用 Sigv4,最长有效期为一周。

Amazon CLI 版本 2 与分页参数更一致

在 Amazon CLI 版本 1 中,如果您在命令行上指定分页参数,则会按预期关闭自动分页。但是,当您使用带有 ‐‐cli-input-json 参数的文件指定分页参数时,并不会关闭自动分页,这可能会导致意外输出。无论您如何提供参数,Amazon CLI 版本 2 都会关闭自动分页。

Amazon CLI 版本 2 在所有命令间提供了更一致的返回代码

与 Amazon CLI 版本 1 相比,Amazon CLI 版本 2 在所有命令间更加一致,并正确返回适当的退出代码。我们还添加了退出代码 252、253 和 254。有关退出代码的更多信息,请参阅从 Amazon CLI 返回代码

如果您依赖于 Amazon CLI 版本 1 使用返回代码值的方式,建议检查退出代码以确保您获得了预期的值。