本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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流输出格式
-
yaml
和yaml-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 中相同的行为。
主题
- 添加了用于设置文本文件编码的环境变量
- 原定设置情况下,二进制参数作为 base64 编码字符串进行传递
- 改进了执行分段复制时 Amazon S3 处理文件属性和标签的方式
- 无法自动检索http://或https://URLs获取参数
- 原定设置情况下,使用分页程序处理所有输出
- 时间戳输出值标准化为 ISO 8601 格式
- 改进了对未 CloudFormation 进行任何更改的部署的处理
- 更改了区域 Amazon S3 端点对于 us-east-1 区域的原定设置行为
- 更改了区域 AWS STS 终端节点的默认行为
- ecr get-login 已删除并替换为 ecr get-login-password
- AWS CLI 版本 2 对插件的支持正在发生变化
- 已删除隐藏别名支持
- 不支持 api_versions 配置文件设置
- AWS CLI 版本 2 仅使用签名 v4 对亚马逊 S3 请求进行身份验证
- AWS CLI 版本 2 与分页参数更加一致
- AWS CLI 版本 2 在所有命令中提供了更一致的返回码
添加了用于设置文本文件编码的环境变量
原定设置情况下,Blob的文本文件使用与已安装的区域设置相同的编码。由于 AWS CLI 版本 2 使用嵌入式版本的 Python,因此不支持PYTHONUTF8
和PYTHONIOENCODING
环境变量。要将文本文件的编码设置为不同于区域设置,请使用 AWS_CLI_FILE_ENCODING
环境变量。以下示例将设置 AWS CLI 为在 Windows UTF-8
上使用打开文本文件。
AWS_CLI_FILE_ENCODING=UTF-8
有关更多信息,请参阅 为配置环境变量 AWS CLI。
原定设置情况下,二进制参数作为 base64 编码字符串进行传递
在中 AWS CLI,有些命令需要 base64
默认情况下, 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
more
您可以将 AWS CLI 版本 2 配置为使用其他寻呼程序或根本不使用任何寻呼程序。有关更多信息,请参阅 客户端分页程序。
时间戳输出值标准化为 ISO 8601 格式
默认情况下, AWS CLI 版本 2 以 ISO860
要以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 使用返回码值的方式,我们建议您检查退出代码以确保获得预期的值。