繁体   English   中英

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

[英]Get a list of names and ARNs of instances using AWS CLI

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

ec2 describe-instances --region us-east-1

但是在输出中找不到ARN。

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

arn:aws:ec2:region:account-id:instance/instance-id
arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0

实际上 - 当我查看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 .

这将产生如下输出:

[
  {
    "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"
      }
    ]
  }
]

查看此示例 - 之前来自我在SO Docs中的条目。


实例具有大量元数据,这些元数据可以从对describe-instances的调用返回,但通常您只想查看基础知识。 您可以使用结合表输出的JMESPath查询以易于阅读的方式显示简明的实例信息。

aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType}"

-----------------------------------------------------
|                 DescribeInstances                 |
+-----------+---------------+----------+------------+
|    Id     |     Name      |  State   |   Type     |
+-----------+---------------+----------+------------+
|  i-abc123 |  None         |  stopped |  m3.large  |
|  i-def456 |  amazon linux |  stopped |  t2.micro  |
|  i-ghi789 |  proxy        |  running |  t2.micro  |
+-----------+---------------+----------+------------+

现在让我们一块一块地打破它。 首先,我们有 - --output table 这将生成响应的彩色表表示。 对于返回小数据集的命令或者已经过滤掉数据的命令,这通常最有用。

现在进入--query 这看起来很长,但实际上很简单。 第一部分是Reservations[].Instances[] 这将返回所有返回实例的展平列表。

查询的下一部分用.{}封装。 这样做是为列表中的每个项创建一个新的json对象,其中每个值都是要应用于源对象的JMESPath查询(在本例中为Instance)。 其中大多数都非常简单,但Name更复杂一些。

获取Name的完整查询是Tags[?Key == 'Name'].Value | [0] Tags[?Key == 'Name'].Value | [0] 第一部分, Tags[?Key == 'Name']正在实例的标签中搜索其键为Name的标签。 下半场.Value | [0] .Value | [0]正在选择每个标签的值,然后从列表中取出第一个项目(在这种情况下,只会有一个)。

你在桌子里想要的完全取决于你。 例如,如果要添加DNS信息,可以轻松添加新密钥DNS: PublicDnsName

aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType, DNS: PublicDnsName}"

--------------------------------------------------------------------------------------------------------
|                                           DescribeInstances                                          |
+--------------------------------------------------+-----------+---------------+----------+------------+
|                        DNS                       |    Id     |     Name      |  State   |   Type     |
+--------------------------------------------------+-----------+---------------+----------+------------+
|                                                  |  i-abc123 |  None         |  stopped |  m3.large  |
|                                                  |  i-def456 |  amazon linux |  stopped |  t2.micro  |
|  ec2-192-168-1-1.us-west-2.compute.amazonaws.com |  i-ghi789 |  proxy        |  running |  t2.micro  |
+--------------------------------------------------+-----------+---------------+----------+------------+

它很容易根据您想要的具体细节进行更改,并且不需要您安装其他工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM