AWS Command Line Interface
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

从 JSON 输入文件生成 CLI 骨架和输入参数

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

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

重要

有多个 AWS CLI 命令不直接映射到各个 AWS API 操作,例如 aws s3 命令。此类命令不支持此页面上讨论的 --generate-cli-skeleton--cli-input-json 参数。如果您对特定命令是否支持这些参数有任何疑问,请运行以下命令,将 servicecommand 名称替换为您感兴趣的名称:

$ aws service command help

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

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

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

$ 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 参数的命令,并将输出定向到某一文件以保存它。

    $ aws ec2 run-instances --generate-cli-skeleton > ec2runinst.json
  2. 在文本编辑器中打开参数骨架文件,并删除任何不需要的参数。例如,您可以将其缩减到以下内容。

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

    在本示例中,我们将 DryRun 参数保留设置为 true 以使用 EC2 的空运行功能,这让您可以安全地测试命令而不实际创建或修改任何资源。

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

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

    $ 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 格式正确且参数值有效。如果输出中报告了任何其他问题,请解决这些问题并重复以上步骤,直至显示“请求应已成功”消息。

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

    { "DryRun": false, "ImageId": "ami-dfc39aef", "KeyName": "mykey", "SecurityGroups": [ "my-sg" ], "InstanceType": "t2.micro", "Monitoring": { "Enabled": true } }
  6. 现在,当您运行此命令时,run-instances 实际上会启动 EC2 实例并显示成功启动所生成的详细信息。

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