使用AWS CLI获取实例的名称和ARN列表

dim*_*mid 2 amazon-web-services aws-cli

我想得到一个特定区域中所有实例的简单列表,每个记录应包括id,ARN和实例名称.我试过用了

ec2 describe-instances --region us-east-1
Run Code Online (Sandbox Code Playgroud)

但是在输出中找不到ARN.

Dav*_*ple 6

如果在您的用例中可以通过了解区域,帐户ID +实例ID来构建ARN:

arn:aws:ec2:region:account-id:instance/instance-id
arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0
Run Code Online (Sandbox Code Playgroud)

实际上 - 当我看到JSON响应时,OwnerId似乎包含了account-id从结果中构造它describe-instances应该相当简单.

编辑:jq用于构造您正在寻找的输出的示例:

aws ec2 describe-instances --region us-east-1 | jq -r '.Reservations[] | .OwnerId as $OwnerId | ( .Instances[] | { "ARN": "arn:aws:ec2:\(.Placement.AvailabilityZone[:-1]):\($OwnerId):instance/\(.InstanceId)", "AvailabilityZone": "\(.Placement.AvailabilityZone)", InstanceId, PublicDnsName, PrivateDnsName, Tags} )' | jq -s .
Run Code Online (Sandbox Code Playgroud)

这将产生如下输出:

[
  {
    "ARN": "arn:aws:ec2:us-east-1:123456789012:instance/i-0a9842b2da1xxxxxx",
    "AvailabilityZone": "us-east-1a",
    "InstanceId": "i-0a9842b2da1xxxxxx",
    "PublicDnsName": "ec2-72-32-69-225.compute-1.amazonaws.com",
    "PrivateDnsName": "ip-10-0-0-68.ec2.internal",
    "Tags": [
      {
        "Value": "my-beanstalk",
        "Key": "elasticbeanstalk:environment-name"
      },
      {
        "Value": "awseb-e-emiwxxxxxx-stack",
        "Key": "aws:cloudformation:stack-name"
      }
    ]
  },
  {
    "ARN": "arn:aws:ec2:us-east-1:123456789012:instance/i-0a9842b2ca1xxxxxx",
    "AvailabilityZone": "us-east-1a",
    "InstanceId": "i-0a9842b2ca1xxxxxx",
    "PublicDnsName": "ec2-72-32-69-226.compute-1.amazonaws.com",
    "PrivateDnsName": "ip-10-0-0-69.ec2.internal",
    "Tags": [
      {
        "Value": "my-beanstalk-2",
        "Key": "elasticbeanstalk:environment-name"
      },
      {
        "Value": "awseb-e-emizxxxxxx-stack",
        "Key": "aws:cloudformation:stack-name"
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)