从文件加载 AWS CLI 参数 - AWS Command Line Interface
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

从文件加载 AWS CLI 参数

有些参数需要文件名作为变量,AWS CLI 将从这些变量中加载数据。其他参数允许您将参数值指定为在命令行上键入的文本或从文件中读取的文本。无论文件是必需的还是可选的,您都必须对文件进行正确编码,以便 AWS CLI 能够理解它。该文件的编码必须与读取系统的默认区域设置相匹配。您可以通过使用 Python locale.getpreferredencoding() 方法来确定这一点。

注意

默认情况下,Windows PowerShell 将文本输出为 UTF-16,这与许多 Linux 系统使用的 UTF-8 冲突。我们建议您使用 -Encoding ascii 您的Powershell Out-File 以确保 AWS CLI 可以读取所生成的文件。

有时,从文件加载参数值(而不是尝试将其全部键入为命令行参数值)很方便,例如当参数为复杂的 JSON 字符串时。要指定包含该值的文件,请按以下格式指定文件 URL。

file://complete/path/to/file

前两个斜杠“/”字符是规范的一部分。如果所需的路径以“/”开头,结果为三个斜杠字符:。file:///folder/file.

URL 提供包含实际参数内容的文件的路径。

注意

对于本就要求指定 URI 的参数(例如标识 AWS CloudFormation 模板 URI 的参数),将自动禁用该行为。

您也可以通过将以下行添加到 CLI 配置文件来禁用该行为。

cli_follow_urlparam = false

以下示例中的文件路径被解读为相对于当前工作目录。

Linux 或 macOS

// Read from a file in the current directory $ aws ec2 describe-instances --filters file://filter.json // Read from a file in /tmp $ aws ec2 describe-instances --filters file:///tmp/filter.json

(Windows)

// Read from a file in C:\temp C:\> aws ec2 describe-instances --filters file://C:\temp\filter.json

TheThethe file:// 前缀选项支持UNIX样式扩展,包括“~/","./和",../“”。在Windows上,~/“”表达式展开到用户目录,存储在 %USERPROFILE% 环境变量。例如,在 Windows 10 上,您通常在 下有一个用户目录。C:\Users\User Name\.

仍必须对作为另一个 JSON 文档的值嵌入的 JSON 文档进行转义。

$ aws sqs create-queue --queue-name my-queue --attributes file://attributes.json

attributes.json

{ "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws-cn:sqs:us-west-2:0123456789012:deadletter\", \"maxReceiveCount\":\"5\"}" }

二进制文件

对于将二进制数据用作参数的命令,请使用 fileb:// 前缀指定该数据为二进制内容。接受二进制数据的命令包括:

  • aws ec2 run-instances--user-data 参数。

  • aws s3api put-object--sse-customer-key 参数。

  • aws kms decrypt--ciphertext-blob 参数。

以下示例使用 Linux 命令行工具生成一个二进制 256 位 AES 密钥,然后将该密钥提供给 Amazon S3 以对上载的文件服务器端进行加密。

$ dd if=/dev/urandom bs=1 count=32 > sse.key 32+0 records in 32+0 records out 32 bytes (32 B) copied, 0.000164441 s, 195 kB/s $ aws s3api put-object --bucket my-bucket --key test.txt --body test.txt --sse-customer-key fileb://sse.key --sse-customer-algorithm AES256 { "SSECustomerKeyMD5": "iVg8oWa8sy714+FjtesrJg==", "SSECustomerAlgorithm": "AES256", "ETag": "\"a6118e84b76cf98bf04bbe14b6045c6c\"" }

远程文件

TheThethe AWS CLI 还支持从网络上托管的文件中加载参数 http://https:// URL。下面的示例引用存储在 Amazon S3 存储桶中的一个文件。这将允许您从任何计算机访问参数文件,但它的确要求容器可公开访问。

$ aws ec2 run-instances --image-id ami-12345678 --block-device-mappings http://my-bucket.s3.amazonaws.com/filename.json

前面的示例假定 filename.json 文件包含以下 JSON 数据。

[ { "DeviceName": "/dev/sdb", "Ebs": { "VolumeSize": 20, "DeleteOnTermination": false, "VolumeType": "standard" } } ]

有关引用包含更复杂 JSON 格式参数的文件的更多示例,请参阅附加 IAM 管理的政策 IAM 用户.