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

本文档仅适用于 Amazon CLI 版本 1。有关 Amazon CLI 版本 2 的相关文档,请参阅版本 2 用户指南

Amazon CLI 框架和输入文件

大多数 Amazon Command Line Interface (Amazon CLI) 命令接受来自文件的所有参数输入。可以使用 generate-cli-skeleton 选项生成这些模板。

关于 Amazon CLI 框架和输入文件

大多数 Amazon Command Line Interface (Amazon CLI) 命令支持使用 --cli-input-json 参数接受文件中的所有参数输入的功能。

这些相同的命令帮助提供 --generate-cli-skeleton 参数,以使用您可以编辑和填写的所有参数以 JSON 格式生成文件。然后,您可以带有相关 --cli-input-json 参数运行命令并指向填充的文件。

重要

多个 Amazon CLI 命令不直接映射到各个 Amazon API 操作,例如 aws s3 命令。此类命令不支持本主题中介绍的 --generate-cli-skeleton--cli-input-json 参数。如果您不知道特定命令是否支持这些参数,请运行以下命令,将 servicecommand 名称替换为您感兴趣的名称。

$ aws service command help

输出包含 Synopsis 部分,其中显示了指定的命令支持的参数。

$ aws iam list-users help ... SYNOPSIS list-users ... [--cli-input-json] ... [--generate-cli-skeleton <value>] ...

--generate-cli-skeleton 参数将导致命令无法运行,而是生成和显示您可以自定义的参数模板并用作以后命令的输入。生成的模板包含命令支持的所有参数。

--generate-cli-skeleton 参数接受以下值之一:

  • input – 生成的模板包括格式化为 JSON 的所有输入参数。这是默认值。

  • output – 生成的模板包括格式化为 JSON 的所有输出参数。

由于 Amazon CLI 本质上是围绕服务 API 的“包装程序”,骨架文件预计您会通过他们底层的 API 参数名称引用所有参数。该参数名称可能与 Amazon CLI 参数名称不同。例如,一个名为 Amazon CLI 的 user-name 参数可能映射到名为 Amazon 的 UserName 服务 API 参数(注意,更改后的大写字母和缺失的破折号)。我们建议您使用 --generate-cli-skeleton 选项,用“正确”的参数名称生成模板,以避免错误。您也可以引用服务的 API 参考指南,查看预期的参数名称。您可以从模板中删除不需要的和不想为其提供值的任何参数。

例如,如果您运行以下命令,它会为 Amazon Elastic Compute Cloud (Amazon EC2) 命令 run-instances 生成参数模板。

JSON

以下示例演示如何使用 input 参数的默认值 (--generate-cli-skeleton) 生成格式化为 JSON 的模板。

$ aws ec2 run-instances --generate-cli-skeleton
{ "DryRun": true, "ImageId": "", "MinCount": 0, "MaxCount": 0, "KeyName": "", "SecurityGroups": [ "" ], "SecurityGroupIds": [ "" ], "UserData": "", "InstanceType": "", "Placement": { "AvailabilityZone": "", "GroupName": "", "Tenancy": "" }, "KernelId": "", "RamdiskId": "", "BlockDeviceMappings": [ { "VirtualName": "", "DeviceName": "", "Ebs": { "SnapshotId": "", "VolumeSize": 0, "DeleteOnTermination": true, "VolumeType": "", "Iops": 0, "Encrypted": true }, "NoDevice": "" } ], "Monitoring": { "Enabled": true }, "SubnetId": "", "DisableApiTermination": true, "InstanceInitiatedShutdownBehavior": "", "PrivateIpAddress": "", "ClientToken": "", "AdditionalInfo": "", "NetworkInterfaces": [ { "NetworkInterfaceId": "", "DeviceIndex": 0, "SubnetId": "", "Description": "", "PrivateIpAddress": "", "Groups": [ "" ], "DeleteOnTermination": true, "PrivateIpAddresses": [ { "PrivateIpAddress": "", "Primary": true } ], "SecondaryPrivateIpAddressCount": 0, "AssociatePublicIpAddress": true } ], "IamInstanceProfile": { "Arn": "", "Name": "" }, "EbsOptimized": true }

生成命令框架

生成并使用参数框架文件

  1. 使用 --generate-cli-skeleton 参数运行命令以生成 JSON,并将输出定向到某个文件以保存它。

    JSON
    $ aws ec2 run-instances --generate-cli-skeleton input > ec2runinst.json
  2. 在文本编辑器中打开参数骨架文件,并删除任何不需要的参数。例如,您可以将模板缩减到以下内容。请确保在删除不需要的元素后,文件仍是有效的 JSON。

    JSON
    { "DryRun": true, "ImageId": "", "KeyName": "", "SecurityGroups": [ "" ], "InstanceType": "", "Monitoring": { "Enabled": true } }

    在此示例中,我们将 DryRun 参数设置为 true 以使用 Amazon EC2 空运行功能。通过此功能,您可以安全地测试命令,而无需实际创建或修改任何资源。

  3. 使用适合您的场景的值填入剩余的值。在本例中,我们提供要使用的 Amazon 系统映像 (AMI) 的实例类型、密钥名称、安全组和标识符。此示例假定默认的 Amazon 区域。AMI ami-dfc39aefus-west-2 区域中托管的 64 位 Amazon Linux 映像。如果您使用不同的区域,您必须查找正确 AMI ID 来使用

    JSON
    { "DryRun": true, "ImageId": "ami-dfc39aef", "KeyName": "mykey", "SecurityGroups": [ "my-sg" ], "InstanceType": "t2.micro", "Monitoring": { "Enabled": true } }
  4. 通过使用 file:// 前缀将完成的模板文件传递到 --cli-input-json 参数,使用填写的参数运行命令。Amazon CLI 将路径解释为相对于当前工作目录,因此,在以下仅显示文件名而不带路径的示例中,它将直接在当前工作目录中查找此文件。

    JSON
    $ aws ec2 run-instances --cli-input-json file://ec2runinst.json
    A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.

    空运行错误表明,JSON 格式正确且参数值有效。如果输出中报告了其他问题,请解决这些问题并重复上一步,直到显示“Request would have succeeded”消息。

  5. 现在,您可以将 DryRun 参数设置为 false 以禁用空运行。

    JSON
    { "DryRun": false, "ImageId": "ami-dfc39aef", "KeyName": "mykey", "SecurityGroups": [ "my-sg" ], "InstanceType": "t2.micro", "Monitoring": { "Enabled": true } }
  6. 运行此命令,run-instances 实际上会启动 Amazon EC2 实例并显示成功启动所生成的详细信息。输出格式由 --output 参数控制,与输入参数模板的格式分开。

    JSON
    $ aws ec2 run-instances --cli-input-json file://ec2runinst.json --output json
    { "OwnerId": "123456789012", "ReservationId": "r-d94a2b1", "Groups": [], "Instances": [ ...