AWS:如何找到与特定子网关联的实例列表?

AWS:如何找到与特定子网关联的实例列表?

AWS 现在为每个启动的实例创建一个默认 VPC 和默认子网。 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/default-vpc.html

您可以通过 UI 或 CLI 查看子网列表

$ aws ec2 describe-subnets
{
    "Subnets": [
    ...
    ]
}

但是每个子网的信息不包含与其关联的实例列表。

{
        "AvailabilityZone": "us-east-1d",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "172.30.2.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": true,
        "State": "available",
        "SubnetId": "<subnet_id>",
        "VpcId": "<vpc_id>",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": []
},

如何获取与子网关联的实例列表?

答案1

这是一个针对两个子网进行查询的示例。

aws ec2 describe-instances --filters 'Name=subnet-id,Values=[subnet-12345678,subnet-90abcdef]'

答案2

一种选择是从实例中检索映射 - 例如

$ aws ec2 describe-instances | grep subnet
                "SubnetId": "<subnet_id>",
                        "SubnetId": "<subnet_id>",
                "SubnetId": "<subnet_id>",
                        "SubnetId": "<subnet_id>",
                "SubnetId": "<subnet_id>",
                        "SubnetId": "<subnet_id>",
                ...

这似乎很笨拙 - 既然亚马逊已经维护了这个映射,为什么他们不能使用子网 ID 作为密钥而不是实例来公开它?还是我在这里遗漏了什么?

答案3

您可以采用@Id2ndR 的答案并将其传送到 jq:

aws ec2 describe-instances\
   --filters 'Name=subnet-id,Values=[subnet-12345678,subnet-90abcdef]'\
| jq -r  '.Reservations[].Instances[] | .InstanceId'

获取实例 ID 的“纯”列表。

或者类似这样:

aws ec2 describe-instances\
    --filters 'Name=subnet-id,Values=[subnet-12345678,subnet-90abcdef]'\
| jq -r  '.Reservations[].Instances[] | 
  (.Tags[]//[]|select(.Key=="Name")|.Value) as $name_tag | 
  (.Tags[]//[]|select(.Key=="Stack")|.Value) as $stack | 
  (.Tags[]//[]|select(.Key=="FQDN")|.Value) as $fqdn_tag | "\(.InstanceId)\t\. 
  (.LaunchTime)\t\($fqdn_tag)\t\(.PublicDnsName)\t\($name_tag)\t\($stack)"'`

以获取更多信息。

相关内容