AWS CLI 中的骨架和输入文件 AWS CLI - AWS Command Line Interface

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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS CLI 中的骨架和输入文件 AWS CLI

大多数 AWS CLI 命令都接受文件中的所有参数输入。可以使用 generate-cli-skeleton 选项生成这些模板。

关于 AWS CLI 骨架和输入文件

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

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

重要

有几个 AWS CLI 命令不能直接映射到单个 AWS API操作,例如aws s3命令aws s3。此类命令不支持本主题中介绍的 --generate-cli-skeleton--cli-input-json 参数。如果您不知道特定命令是否支持这些参数,请运行以下命令,替换 service 以及 command 用你感兴趣的名字命名。

$ 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。

由于本质上 AWS CLI 是围绕服务的 “包装”API,因此骨架文件希望您通过其基础API参数名称来引用所有参数。这可能与 AWS CLI 参数名称不同。例如,名为的 AWS CLI 参数user-name可能映射到名为的 AWS 服务API参数UserName(请注意更改的大写和缺少的破折号)。我们建议您使用 --generate-cli-skeleton 选项,用“正确”的参数名称生成模板,以避免错误。您也可以参考服务的《API参考指南》以查看预期的参数名称。您可以从模板中删除不需要的和不想为其提供值的任何参数。

例如,如果您运行以下命令,它将为亚马逊弹性计算云 (AmazonEC2) 命令生成参数模板run-instances

JSON

以下示例说明如何使用--generate-cli-skeleton参数的默认值 (input) 生成格式为的模板。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参数的命令以生成,YAML然后将输出定向到文件进行保存。

    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) 的实例类型、密钥名称、安全组和标识符。此示例假设默认 AWS 区域。AMIami-dfc39aef是在该us-west-2地区托管的 64 位亚马逊 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 参数,使用填写的参数运行命令。将路径 AWS 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": [ ...