Esqueletos da AWS CLI e arquivos de entrada na AWS CLI - AWS Command Line Interface

Esqueletos da AWS CLI e arquivos de entrada na AWS CLI

A maioria dos comandos da AWS CLI aceita todas as entradas de parâmetros de um arquivo. Esses modelos podem ser gerados usando a opção generate-cli-skeleton.

Sobre esqueletos e arquivos de entrada da AWS CLI

A maioria dos comandos da AWS Command Line Interface (AWS CLI) aceita todas as entradas de parâmetros usando os parâmetros --cli-input-json e --cli-input-yaml .

Felizmente, esses mesmos comandos fornecem o parâmetro --generate-cli-skeleton para gerar um arquivo tanto no formato JSON ou YAML com todos os parâmetros que você pode editar e preencher. Depois, você pode executar o comando com o parâmetro relevante --cli-input-json ou --cli-input-yaml e apontar para o arquivo preenchido.

Importante

Vários comandos da AWS CLI não são mapeados diretamente para as operações individuais de API da AWS, como os comandos aws s3. Esses comandos não são compatíveis com os parâmetros --generate-cli-skeleton ou --cli-input-json e --cli-input-yaml descritos neste tópico. Se você souber se um comando específico é compatível com esses parâmetros, execute o comando a seguir, substituindo os nomes do serviço e do comando pelos quais você está interessado.

$ aws service command help

A saída inclui uma seção Synopsis que mostra os parâmetros compatíveis com o comando especificado.

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

O parâmetro --generate-cli-skeleton faz com que o comando não seja executado, mas, em vez disso, gere e exibe um modelo de parâmetro que você pode personalizar e usar como entrada em um comando posterior. O modelo gerado inclui todos os parâmetros compatíveis com o comando.

O parâmetro --generate-cli-skeleton aceita um dos seguintes valores:

  • input: o modelo gerado inclui todos os parâmetros de entrada formatados como JSON. Este é o valor padrão.

  • yaml-input: o modelo gerado inclui todos os parâmetros de entrada formatados como YAML.

  • output: o modelo gerado inclui todos os parâmetros de saída formatados como JSON. No momento, não é possível solicitar os parâmetros de saída como YAML.

Como a AWS CLI é essencialmente um “wrapper” em torno da API de serviço, o arquivo de esqueleto espera que você faça referência a todos os parâmetros pelo nome do parâmetro da API subjacente. Isso provavelmente é diferente do nome do parâmetro da AWS CLI. Por exemplo, um parâmetro da AWS CLI chamado user-name pode ser mapeado para o parâmetro da API do serviço da AWS chamado UserName (observe a capitalização alterada e o traço ausente). Recomendamos usar a opção --generate-cli-skeleton para gerar o modelo com os nomes de parâmetro “corretos” a fim de evitar erros. Você também pode fazer referência ao Guia de referência da API do serviço para ver os nomes de parâmetro esperados. É possível excluir quaisquer parâmetros do modelo que não sejam necessários e para os quais você não deseja fornecer um valor.

Por exemplo, se você executar o seguinte comando, ele gerará o modelo de parâmetro para o comando run-instances do Amazon Elastic Compute Cloud (Amazon EC2).

JSON

O exemplo a seguir mostra como gerar um modelo formatado em JSON usando o valor padrão (input) para o --generate-cli-skeleton parâmetro.

$ 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 }
YAML

O exemplo a seguir mostra como gerar um modelo formatado em YAML usando o valor yaml-input para o parâmetro --generate-cli-skeleton.

$ aws ec2 run-instances --generate-cli-skeleton yaml-input
BlockDeviceMappings: # The block device mapping entries. - DeviceName: '' # The device name (for example, /dev/sdh or xvdh). VirtualName: '' # The virtual device name (ephemeralN). Ebs: # Parameters used to automatically set up Amazon EBS volumes when the instance is launched. DeleteOnTermination: true # Indicates whether the EBS volume is deleted on instance termination. Iops: 0 # The number of I/O operations per second (IOPS) that the volume supports. SnapshotId: '' # The ID of the snapshot. VolumeSize: 0 # The size of the volume, in GiB. VolumeType: st1 # The volume type. Valid values are: standard, io1, gp2, sc1, st1. Encrypted: true # Indicates whether the encryption state of an EBS volume is changed while being restored from a backing snapshot. KmsKeyId: '' # Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer managed KMS key under which the EBS volume is encrypted. NoDevice: '' # Suppresses the specified device included in the block device mapping of the AMI. ImageId: '' # The ID of the AMI. InstanceType: c4.4xlarge # The instance type. Valid values are: t1.micro, t2.nano, t2.micro, t2.small, t2.medium, t2.large, t2.xlarge, t2.2xlarge, t3.nano, t3.micro, t3.small, t3.medium, t3.large, t3.xlarge, t3.2xlarge, t3a.nano, t3a.micro, t3a.small, t3a.medium, t3a.large, t3a.xlarge, t3a.2xlarge, m1.small, m1.medium, m1.large, m1.xlarge, m3.medium, m3.large, m3.xlarge, m3.2xlarge, m4.large, m4.xlarge, m4.2xlarge, m4.4xlarge, m4.10xlarge, m4.16xlarge, m2.xlarge, m2.2xlarge, m2.4xlarge, cr1.8xlarge, r3.large, r3.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r4.large, r4.xlarge, r4.2xlarge, r4.4xlarge, r4.8xlarge, r4.16xlarge, r5.large, r5.xlarge, r5.2xlarge, r5.4xlarge, r5.8xlarge, r5.12xlarge, r5.16xlarge, r5.24xlarge, r5.metal, r5a.large, r5a.xlarge, r5a.2xlarge, r5a.4xlarge, r5a.8xlarge, r5a.12xlarge, r5a.16xlarge, r5a.24xlarge, r5d.large, r5d.xlarge, r5d.2xlarge, r5d.4xlarge, r5d.8xlarge, r5d.12xlarge, r5d.16xlarge, r5d.24xlarge, r5d.metal, r5ad.large, r5ad.xlarge, r5ad.2xlarge, r5ad.4xlarge, r5ad.8xlarge, r5ad.12xlarge, r5ad.16xlarge, r5ad.24xlarge, x1.16xlarge, x1.32xlarge, x1e.xlarge, x1e.2xlarge, x1e.4xlarge, x1e.8xlarge, x1e.16xlarge, x1e.32xlarge, i2.xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i3.large, i3.xlarge, i3.2xlarge, i3.4xlarge, i3.8xlarge, i3.16xlarge, i3.metal, i3en.large, i3en.xlarge, i3en.2xlarge, i3en.3xlarge, i3en.6xlarge, i3en.12xlarge, i3en.24xlarge, i3en.metal, hi1.4xlarge, hs1.8xlarge, c1.medium, c1.xlarge, c3.large, c3.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge, c4.large, c4.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c5.large, c5.xlarge, c5.2xlarge, c5.4xlarge, c5.9xlarge, c5.12xlarge, c5.18xlarge, c5.24xlarge, c5.metal, c5d.large, c5d.xlarge, c5d.2xlarge, c5d.4xlarge, c5d.9xlarge, c5d.18xlarge, c5n.large, c5n.xlarge, c5n.2xlarge, c5n.4xlarge, c5n.9xlarge, c5n.18xlarge, cc1.4xlarge, cc2.8xlarge, g2.2xlarge, g2.8xlarge, g3.4xlarge, g3.8xlarge, g3.16xlarge, g3s.xlarge, g4dn.xlarge, g4dn.2xlarge, g4dn.4xlarge, g4dn.8xlarge, g4dn.12xlarge, g4dn.16xlarge, cg1.4xlarge, p2.xlarge, p2.8xlarge, p2.16xlarge, p3.2xlarge, p3.8xlarge, p3.16xlarge, p3dn.24xlarge, d2.xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, f1.2xlarge, f1.4xlarge, f1.16xlarge, m5.large, m5.xlarge, m5.2xlarge, m5.4xlarge, m5.8xlarge, m5.12xlarge, m5.16xlarge, m5.24xlarge, m5.metal, m5a.large, m5a.xlarge, m5a.2xlarge, m5a.4xlarge, m5a.8xlarge, m5a.12xlarge, m5a.16xlarge, m5a.24xlarge, m5d.large, m5d.xlarge, m5d.2xlarge, m5d.4xlarge, m5d.8xlarge, m5d.12xlarge, m5d.16xlarge, m5d.24xlarge, m5d.metal, m5ad.large, m5ad.xlarge, m5ad.2xlarge, m5ad.4xlarge, m5ad.8xlarge, m5ad.12xlarge, m5ad.16xlarge, m5ad.24xlarge, h1.2xlarge, h1.4xlarge, h1.8xlarge, h1.16xlarge, z1d.large, z1d.xlarge, z1d.2xlarge, z1d.3xlarge, z1d.6xlarge, z1d.12xlarge, z1d.metal, u-6tb1.metal, u-9tb1.metal, u-12tb1.metal, u-18tb1.metal, u-24tb1.metal, a1.medium, a1.large, a1.xlarge, a1.2xlarge, a1.4xlarge, a1.metal, m5dn.large, m5dn.xlarge, m5dn.2xlarge, m5dn.4xlarge, m5dn.8xlarge, m5dn.12xlarge, m5dn.16xlarge, m5dn.24xlarge, m5n.large, m5n.xlarge, m5n.2xlarge, m5n.4xlarge, m5n.8xlarge, m5n.12xlarge, m5n.16xlarge, m5n.24xlarge, r5dn.large, r5dn.xlarge, r5dn.2xlarge, r5dn.4xlarge, r5dn.8xlarge, r5dn.12xlarge, r5dn.16xlarge, r5dn.24xlarge, r5n.large, r5n.xlarge, r5n.2xlarge, r5n.4xlarge, r5n.8xlarge, r5n.12xlarge, r5n.16xlarge, r5n.24xlarge. Ipv6AddressCount: 0 # [EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Ipv6Addresses: # [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface. - Ipv6Address: '' # The IPv6 address. KernelId: '' # The ID of the kernel. KeyName: '' # The name of the key pair. MaxCount: 0 # [REQUIRED] The maximum number of instances to launch. MinCount: 0 # [REQUIRED] The minimum number of instances to launch. Monitoring: # Specifies whether detailed monitoring is enabled for the instance. Enabled: true # [REQUIRED] Indicates whether detailed monitoring is enabled. Placement: # The placement for the instance. AvailabilityZone: '' # The Availability Zone of the instance. Affinity: '' # The affinity setting for the instance on the Dedicated Host. GroupName: '' # The name of the placement group the instance is in. PartitionNumber: 0 # The number of the partition the instance is in. HostId: '' # The ID of the Dedicated Host on which the instance resides. Tenancy: dedicated # The tenancy of the instance (if the instance is running in a VPC). Valid values are: default, dedicated, host. SpreadDomain: '' # Reserved for future use. RamdiskId: '' # The ID of the RAM disk to select. SecurityGroupIds: # The IDs of the security groups. - '' SecurityGroups: # [default VPC] The names of the security groups. - '' SubnetId: '' # [EC2-VPC] The ID of the subnet to launch the instance into. UserData: '' # The user data to make available to the instance. AdditionalInfo: '' # Reserved. ClientToken: '' # Unique, case-sensitive identifier you provide to ensure the idempotency of the request. DisableApiTermination: true # If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. DryRun: true # Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. EbsOptimized: true # Indicates whether the instance is optimized for Amazon EBS I/O. IamInstanceProfile: # The IAM instance profile. Arn: '' # The Amazon Resource Name (ARN) of the instance profile. Name: '' # The name of the instance profile. InstanceInitiatedShutdownBehavior: stop # Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). Valid values are: stop, terminate. NetworkInterfaces: # The network interfaces to associate with the instance. - AssociatePublicIpAddress: true # Indicates whether to assign a public IPv4 address to an instance you launch in a VPC. DeleteOnTermination: true # If set to true, the interface is deleted when the instance is terminated. Description: '' # The description of the network interface. DeviceIndex: 0 # The position of the network interface in the attachment order. Groups: # The IDs of the security groups for the network interface. - '' Ipv6AddressCount: 0 # A number of IPv6 addresses to assign to the network interface. Ipv6Addresses: # One or more IPv6 addresses to assign to the network interface. - Ipv6Address: '' # The IPv6 address. NetworkInterfaceId: '' # The ID of the network interface. PrivateIpAddress: '' # The private IPv4 address of the network interface. PrivateIpAddresses: # One or more private IPv4 addresses to assign to the network interface. - Primary: true # Indicates whether the private IPv4 address is the primary private IPv4 address. PrivateIpAddress: '' # The private IPv4 addresses. SecondaryPrivateIpAddressCount: 0 # The number of secondary private IPv4 addresses. SubnetId: '' # The ID of the subnet associated with the network interface. InterfaceType: '' # The type of network interface. PrivateIpAddress: '' # [EC2-VPC] The primary IPv4 address. ElasticGpuSpecification: # An elastic GPU to associate with the instance. - Type: '' # [REQUIRED] The type of Elastic Graphics accelerator. ElasticInferenceAccelerators: # An elastic inference accelerator to associate with the instance. - Type: '' # [REQUIRED] The type of elastic inference accelerator. TagSpecifications: # The tags to apply to the resources during launch. - ResourceType: network-interface # The type of resource to tag. Valid values are: client-vpn-endpoint, customer-gateway, dedicated-host, dhcp-options, elastic-ip, fleet, fpga-image, host-reservation, image, instance, internet-gateway, launch-template, natgateway, network-acl, network-interface, reserved-instances, route-table, security-group, snapshot, spot-instances-request, subnet, traffic-mirror-filter, traffic-mirror-session, traffic-mirror-target, transit-gateway, transit-gateway-attachment, transit-gateway-route-table, volume, vpc, vpc-peering-connection, vpn-connection, vpn-gateway. Tags: # The tags to apply to the resource. - Key: '' # The key of the tag. Value: '' # The value of the tag. LaunchTemplate: # The launch template to use to launch the instances. LaunchTemplateId: '' # The ID of the launch template. LaunchTemplateName: '' # The name of the launch template. Version: '' # The version number of the launch template. InstanceMarketOptions: # The market (purchasing) option for the instances. MarketType: spot # The market type. Valid values are: spot. SpotOptions: # The options for Spot Instances. MaxPrice: '' # The maximum hourly price you're willing to pay for the Spot Instances. SpotInstanceType: one-time # The Spot Instance request type. Valid values are: one-time, persistent. BlockDurationMinutes: 0 # The required duration for the Spot Instances (also known as Spot blocks), in minutes. ValidUntil: 1970-01-01 00:00:00 # The end date of the request. InstanceInterruptionBehavior: terminate # The behavior when a Spot Instance is interrupted. Valid values are: hibernate, stop, terminate. CreditSpecification: # The credit option for CPU usage of the T2 or T3 instance. CpuCredits: '' # [REQUIRED] The credit option for CPU usage of a T2 or T3 instance. CpuOptions: # The CPU options for the instance. CoreCount: 0 # The number of CPU cores for the instance. ThreadsPerCore: 0 # The number of threads per CPU core. CapacityReservationSpecification: # Information about the Capacity Reservation targeting option. CapacityReservationPreference: none # Indicates the instance's Capacity Reservation preferences. Valid values are: open, none. CapacityReservationTarget: # Information about the target Capacity Reservation. CapacityReservationId: '' # The ID of the Capacity Reservation. HibernationOptions: # Indicates whether an instance is enabled for hibernation. Configured: true # If you set this parameter to true, your instance is enabled for hibernation. LicenseSpecifications: # The license configurations. - LicenseConfigurationArn: '' # The Amazon Resource Name (ARN) of the license configuration.

Gerar um esqueleto de comando

Para gerar e usar um arquivo de esqueleto de parâmetro
  1. Execute o comando com o parâmetro --generate-cli-skeleton para produzir tanto JSON quanto YAML e direcionar a saída a um arquivo para salvá-lo.

    JSON
    $ aws ec2 run-instances --generate-cli-skeleton input > ec2runinst.json
    YAML
    $ aws ec2 run-instances --generate-cli-skeleton yaml-input > ec2runinst.yaml
  2. Abra o arquivo de esqueleto do parâmetro em seu editor de texto e remova os parâmetros que não são mais necessários. Por exemplo, você pode reduzir o modelo ao indicado a seguir. Verifique se o arquivo ainda é JSON ou YAML válido depois de remover os elementos que não são necessários.

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

    Neste exemplo, deixamos o parâmetro DryRun definido como true para usar o recurso de simulação do Amazon EC2. Esse recurso permite que você teste com segurança o comando sem realmente criar ou modificar nenhum recursos.

  3. Preencha os valores restantes com valores apropriados para seu cenário. Neste exemplo, fornecemos o tipo de instância, o nome da chave, o grupo de segurança e o identificador da imagem de máquina da Amazon (AMI) que devem ser usados. Este exemplo assume a região padrão da AWS. A AMI ami-dfc39aef é uma imagem de 64 bits do hospedada na região us-west-2. Se você usar uma região diferente, será necessário encontrar o ID da AMI correta para usar.

    JSON
    { "DryRun": true, "ImageId": "ami-dfc39aef", "KeyName": "mykey", "SecurityGroups": [ "my-sg" ], "InstanceType": "t2.micro", "Monitoring": { "Enabled": true } }
    YAML
    DryRun: true ImageId: 'ami-dfc39aef' KeyName: 'mykey' SecurityGroups: - 'my-sg' InstanceType: 't2.micro' Monitoring: Enabled: true
  4. Execute o comando com os parâmetros concluídos passando o arquivo do modelo concluído para o parâmetro --cli-input-json ou --cli-input-yaml usando o prefixo file://. A AWS CLI interpreta o caminho a ser associado ao diretório de trabalho atual, de forma que o exemplo a seguir que exibe somente o nome do arquivo sem nenhum caminho seja procurado pelo arquivo diretamente no diretório de trabalho atual.

    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.
    YAML
    $ aws ec2 run-instances --cli-input-yaml file://ec2runinst.yaml
    A client error (DryRunOperation) occurred when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.

    O erro de simulação indica que JSON ou YAML está formado corretamente e os valores de parâmetro são válidos. Se outros problemas forem relatados na saída, corrija-os e repita a etapa anterior até que a mensagem “Request would have succeeded“ seja exibida.

  5. Agora você pode definir o parâmetro DryRun como false para desativar a simulação.

    JSON
    { "DryRun": false, "ImageId": "ami-dfc39aef", "KeyName": "mykey", "SecurityGroups": [ "my-sg" ], "InstanceType": "t2.micro", "Monitoring": { "Enabled": true } }
    YAML
    DryRun: false ImageId: 'ami-dfc39aef' KeyName: 'mykey' SecurityGroups: - 'my-sg' InstanceType: 't2.micro' Monitoring: Enabled: true
  6. Execute o comando, e run-instances realmente iniciará uma instância do Amazon EC2 e exibirá os detalhes gerados pelo início bem-sucedido. O formato da saída é controlado pelo parâmetro --output, separadamente do formato do modelo de parâmetro de entrada.

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