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身份中心身份验证

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

自动提示

启用后, AWS CLI 版本 2 可以在您运行命令时提示您输入命令、参数和资源。aws

运行官方的 Amazon P ECR ublic 或 Docker 镜像 AWS CLI

的官方 Docker 镜像 AWS CLI 提供了 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 put和。ddb select这些命令提供了一个简化的界面,用于将项目放入 DynamoDB 表中以及在 DynamoDB 表或索引中进行搜索。

aws logs tail

AWS CLI 版本 2 有一个自定义aws logs tail命令,用于追踪 Amazon Logs 组的 CloudWatch 日志。默认情况下,该命令返回过去十分钟内所有关联 CloudWatch 日志流的日志。

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

AWS CLI 版本 2 将--copy-props参数添加到高级s3命令中。使用此参数,您可以为 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 存储桶位置复制到另一个 S3 存储桶位置,并且该操作使用分段复制时,源对象中的任何文件属性都不会复制到目标对象。

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

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

无法自动检索http://https://URLs获取参数

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

如果您需要检索并将URL内容传递到参数值中,我们建议您使用curl或类似的工具将的内容下载URL到本地文件。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 将文件保存在与源文件同名的当前文件夹中。第二个命令检索该下载文件的内容,并将内容作为 --policy-document 的值传递。

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

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

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

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

默认情况下, AWS CLI 版本 2 以 ISO860 1 格式返回所有时间戳响应值。在 AWS CLI 版本 1 中,命令以HTTPAPI响应返回的任何格式返回的时间戳值,可能因服务而异。

要以HTTPAPI响应返回的格式查看时间戳,请使用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

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

当您将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与容器身份验证的自动集成的aws ecr get-login-password命令。

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

aws ecr get-login-password命令在 1.17.10 及更高 AWS CLI 版本和 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 迁移,直到发布更新的稳定插件界面。无法保证版本 2 的 future 版本会支持特定的 AWS CLI 插件甚至插件接口。 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 加载每个插件。

已删除隐藏别名支持

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

在下表中,第一列显示了适用于所有版本(包括 AWS CLI 版本 2)的服务、命令和参数。第二列显示在 AWS CLI 版本 2 中不再起作用的别名。

有效的服务、命令和参数 过时的别名
认知身份-arns create-identity-pool open-id-connect-provider open-id-connect-provider-ar-ns
storagegateway describe-tapes tape-arns tape-ar-ns
存储网关。 describe-tape-archives.tape-arns tape-ar-ns
存储网关。 describe-vtl-devices。 vtl-device-arns vtl-device-ar-ns
存储网关。 describe-cached-iscsi-volumes.volume-arns volume-ar-ns
存储网关。 describe-stored-iscsi-volumes.volume-arns volume-ar-ns
route53domains.view-billing.start-time 开启
部署。 create-deployment-group.ec2-tag-set ec-2-tag-set
部署。 list-application-revisions.s3 bucket s-3-bucket
部署。 list-application-revisions.s3 键前缀 s-3-key-prefix
部署。 update-deployment-group.ec2-tag-set ec-2-tag-set
我是。 enable-mfa-device. 身份验证码 1 authentication-code-1
我是。 enable-mfa-device. 身份验证码 2 authentication-code-2
我是。 resync-mfa-device. 身份验证码 1 authentication-code-1
我是。 resync-mfa-device. 身份验证码 2 authentication-code-2
导入/导出。 get-shipping-label.street1 street-1
导入/导出。 get-shipping-label.street2 street-2
导入/导出。 get-shipping-label.street3 street-3
lambda.publish-version.code-sha256 code-sha-256
轻帆。 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配置文件设置调APIs用早期版本的 AWS 服务。现在,所有 AWS CLI 命令都调用端点当前支持的服务APIs的最新版本。

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

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

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

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

AWS CLI 版本 2 在所有命令中提供了更一致的返回码

与 AWS CLI 版本 1 相比,版本 2 在所有命令中更加一致,并且可以正确返回相应的退出代码。 AWS CLI 我们还添加了退出代码 252、253 和 254。有关退出代码的更多信息,请参阅命令行返回代码位于 AWS CLI

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