VPCのサブネットを抽出して、きれいに並べたい
tl;dr
aws ec2 describe-subnets --filter Name=vpc-id,Values=vpc-123456 \ --query "Subnets[*].[CidrBlock,(Tags[?Key=='Name'].Value)[0]]" \ --output text | sort -V
10.0.0.0/22 public-subnet-ap-northeast-1a 10.0.4.0/22 public-subnet-ap-northeast-1c 10.0.8.0/22 public-subnet-ap-northeast-1d 10.0.12.0/22 private-subnet-ap-northeast-1a 10.0.16.0/22 private-subnet-ap-northeast-1c 10.0.20.0/22 private-subnet-ap-northeast-1d
aws ec2 describe-subnets
タグを取り出すのがちょっとだるい
{ "Subnets": [ { "AvailabilityZone": "ap-northeast-1d", "AvailabilityZoneId": "apne1-az2", "AvailableIpAddressCount": 1019, "CidrBlock": "10.0.20.0/22", "State": "available", "SubnetId": "subnet-...", "VpcId": "vpc-....", "Tags": [ { "Key": "Name", "Value": "private-subnet-ap-northeast-1d" } ], }, ...
今回は指定したVPC内のサブネットと、その名前を取り出したかったので、CidrBlockと、Tags
の中の Key
が Name
である要素をフィルタしてきて、これは1つなので (正確には1つかゼロ)、リストの先頭をとってくる。
--query "Subnets[*].[CidrBlock,(Tags[?Key=='Name'].Value)[0]]"
sort -V
queryの中で sort_by を使ってソートも (きっと) できるけれど、さすがに辛いので、sort
を使う。
-V
は natural sort of (version) numbers within text ということで、ドットで区切られたバージョン番号をソートするオプションで、バージョン番号ではないけれど、ドットの後の数字で並べてくれるので、これでIPアドレス順に並んでくれる。