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

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 结合使用。此向导将引导您构建某些命令。

Amazon IAM Identity Center (successor to Amazon Single Sign-On)

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

自动提示

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

Docker

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 使用返回代码值的方式,建议检查退出代码以确保您获得了预期的值。