断开变化 – 迁移自 AWS CLI 版本 1 至版本2 - AWS Command Line Interface
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

断开变化 – 迁移自 AWS CLI 版本 1 至版本2

本主题描述了这个问题 AWS CLI 版本 1 和 AWS CLI 版本 2 这可能要求您更改脚本或命令,以在第1版中的第2版中获得相同的行为。

AWS CLI 版本 2 现在使用环境变量设置文本文件编码

默认情况下,文本文件使用与已安装的区域设置相同的编码。要将文本文件的编码设置为不同于区域设置,请使用 AWS_CLI_FILE_ENCODING 环境变量。下面的示例将 CLI 设置为在 Windows 上使用 UTF-8 打开文本文件。

AWS_CLI_FILE_ENCODING=UTF-8

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

AWS CLI 版本 2默认情况下, 现在将二进制参数作为 base64 编码字符串进行传递

AWS CLI 版本 1 并不总是能够在不需要一些中间处理的情况下,很轻松地将二进制参数从一个命令的输出传递到另一个命令的输入。需要一些命令 基础64-编码字符串,其他需要的UTF8编码字节字符串。 AWS CLI 版本 2 使得处理二进制参数更一致,以便从一个命令传递更可靠的值。

默认情况下,AWS CLI 版本 2 现在将所有二进制输入和二进制输出参数作为 base64 编码字符串进行传递。需要二进制输入的参数在文档中将其类型指定为 blob(二进制大型对象)。要将二进制数据作为文件传递给 CLI 参数,您可以通过 AWS CLI 版本 2 指定使用以下前缀的文件:

  • file:// – TheThethe AWS CLI 将文件内容视为Base64编码文本。例如:--some-param file://~/my/path/file-with-base64.txt

  • fileb:// – TheThethe AWS CLI 将文件内容视为未编码二进制。例如:--some-param fileb://~/my/path/file-with-raw-binary.bin

您可以告诉他们 AWS CLI 版本 2 要恢复到 AWS CLI 版本 1 行为 ~/.aws/config 配置文件文件。

cli_binary_format=raw-in-base64-out

您还可以通过在命令行中包含参数 --cli-binary-format raw-in-base64-out 来恢复单个命令的设置,覆盖活动配置文件设置。

如果您恢复到 AWS CLI 版本 1 为二进制参数指定一个文件并使用 file://fileb://、 AWS CLI 将文件内容视为未编码的原始二进制。

AWS CLI 版本 2 改进了执行分段复制时对文件属性和标签的 Amazon S3 处理

当您使用 AWS CLI 版本 1 在 aws s3 命名空间来从一个文件复制文件 Amazon S3 桶位置到另一个 Amazon S3 桶位置,以及操作使用 多部件副本,源对象不会复制来自源对象的文件属性。

默认情况下, AWS CLI 版本 2 命令 s3 执行多部件拷贝的命名空间现在将所有标签和以下属性集从源传输到目标拷贝: content-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpires,和 metadata.

这可能导致其他 AWS API调用 Amazon S3 如果您使用 AWS CLI 版本 1. 这些可能包括: HeadObjectGetObjectTagging,和 PutObjectTagging.

如果您需要更改此默认行为 AWS CLI 版本 2 命令,使用 --copy-props 指定以下选项之一的参数:

  • 默认 – 默认值。指定拷贝包括连接到源对象的所有标记,以及由 --metadata-directive 用于非多零件副本的参数: content-typecontent-languagecontent-encodingcontent-dispositioncache-controlexpires,和 metadata.

  • 元数据指令 – 指定拷贝仅包含由 --metadata-directive 用于非多零件副本的参数。它不会复制任何标签。

  • – 指定拷贝包括来自源对象的任何属性。

AWS CLI 版本 2 不再自动检索 http://https:// 参数的URL

TheThethe AWS CLI 版本 2 当参数值以 http://https://,然后使用返回的内容作为参数的值。如果您需要检索 URL 并将从该 URL 读取的内容作为参数值传递,我们建议您使用 curl 或类似的工具将 URL 的内容下载到本地文件。然后使用 file:// 语法读取该文件的内容,并将其用作参数的值。

例如,以下命令不再尝试检索在 http://www.google.com 中找到的页面的内容,并将这些内容作为参数传递。相反,它将文字文本字符串 https://google.com 作为参数传递。

$ aws ssm put-parameter --value http://www.google.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默认情况下, 会对所有输出使用分页程序。

默认情况下,AWS CLI 版本 2 会通过操作系统的默认分页程序返回所有输出。Bydefaultthisprogramisthe less programonLinuxandmacOS,andthe more Windows上的计划。通过分页,系统可以一次一页地显示服务输出,从而让您能够更轻松地浏览大量输出。但是,您有时不想通过按键的方式来逐页获取输出,而想要一次性获得所有输出,例如当您运行脚本时。这时,您可以将 AWS CLI 版本 2 配置为使用其他分页程序或不使用分页程序。为此,请配置 AWS_PAGER 环境变量或 cli_pager 设置 ~/.aws/config 文件并指定要使用的命令。您可以指定搜索路径中的命令,或者指定计算机上可用的任何命令的完整路径和文件名。

要完全禁用外部分页程序,您可以将该变量设置为空字符串,如以下示例所示。

~/.aws/config 文件中设置选项

以下示例显示了 default 但您可以将设置添加到 ~/.aws/config 文件。

[default] cli_pager=

设置环境变量

Linux 或 macOS:

$ export AWS_PAGER=""

(Windows)

C:\> setx AWS_PAGER ""

AWS CLI 版本 2 现在返回 ISO 8601 格式的所有时间戳输出值。

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

ISO 8601 格式的时间戳与以下示例类似。第一个示例显示 协调世界时间(UTC) 包括 Z 之后。日期和时间由 分隔。T.

2019-10-31T22:21:41Z

要指定不同的时区,而非 Z,指定 +- 以及所需时区在UTC之前或之后的小时数,作为两位数值。以下示例显示的时间与上一个示例相同,但调整为太平洋标准时间(比 UTC 晚 8 小时):

2019-10-31T14:21:41-08

要查看以由 HTTP API 响应返回的格式表示的时间戳,请将以下行添加到您的 .aws/config 配置文件中。

cli_timestamp_format = wire

AWS CLI 版本 2 改进了对 AWS CloudFormation 部署的处理,从而导致不会发生任何更改

在 AWS CLI 版本 1,如果您部署 AWS CloudFormation 默认情况下,导致无更改的模板 AWS CLI 错误代码失败。如果您不认为这是一个错误,并希望您的脚本继续,这可能会成为一个问题。您可以在这个方面工作 AWS CLI 版本 1,通过添加标记 -–no-fail-on-empty-changeset 回报率 0 并且不会在脚本中造成错误。

因为这是常见的案例情景, AWS CLI 版本 2 现在默认返回成功退出代码 0 如果部署不会导致任何变更,且操作返回空ChanGeset。

在 AWS CLI 版本 2 中,要恢复到原始行为,您必须添加新标记 。--fail-on-empty-changeset.

AWS CLI 版本 2 以更一致的方式使用 Amazon S3 密钥

对于 Amazon S3 在 s3 Namespace,我们改进了如何显示路径的一致性。在 AWS CLI 版本 2 中,路径始终相对于相关键显示。TheThethe AWS CLI 版本 1 有时显示出绝对形式的路径,有时以相对形式显示。

AWS CLI 版本 2 使用正确的 Amazon S3 适用于 us-east-1 地区

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

AWS CLI 版本 2 使用地区 AWS STS 默认端点

默认情况下, AWS CLI 版本 2 发送全部 AWS STS 对当前配置的区域端点的API请求 AWS 地区。

默认情况下, AWS CLI 版本 1 发送 AWS STS 全球请求 AWS STS 端点。您可以使用 STS_区域_端点 设置。

AWS CLI 版本 2 替换 ecr get-login 带有 ecr get-login-password

TheThethe AWS CLI 版本 2 替换命令 aws ecr get-login 全新的 aws ecr get-login-password 可改善与container验证的自动集成的命令。

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

TheThethe 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 CLI 版本 2 完全临时并且旨在帮助用户从 AWS CLI 版本 1 在稳定、更新的插件接口之前,已发布插件接口。不保证某个特定的插件甚或是 CLI 插件接口在未来版本的 中受支持。AWS CLI 版本 2. 如果您依赖于插件,请务必锁定到特定版本的 CLI,并在升级时测试插件的功能。

要启用插件支持,请创建 [plugins] 在您的 ~/.aws/config.

[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),包含插件的源代码。CLI通过导入其中的每个插件来加载每个插件 plugin-module 并致电 awscli_initialize 功能。

AWS CLI 版本 2 不再支持“隐藏”别名

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