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)"'`
以获取更多信息。