以前、「AWS:EC2インスタンスの情報を取得したいとき」ではEC2の情報取得をAWSCLIで一括で行う手法を書いた。今回はそれのVPC版となる。パラシ作成用などにどうぞ。
前提
- タグ:Nameを使って名前付与をしている
⇒タグNameを使ってない場合もコマンドの構文を少し変えれば対応は可能。
⇒.他のタグを使ってるときは、{Name:Tags[?Key==Name
].Value|[0]のところのNameをご自身の環境の値に変える - Cloudshellが望ましいが、AWSCLIがインストールされているマシンもおK
コマンド集
行が複数に分かれていますが、行の末尾に「\」で改行しているため、全行をまるごとコピーペーストしてもOKな状態にしています。
- VPCを一覧出力してCSVに出力
aws ec2 describe-vpcs --query 'Vpcs[].{Name:Tags[?Key==`Name`].Value|[0], VpcId:VpcId, CidrBlock:CidrBlock, OwnerId:OwnerId, Tenancy:InstanceTenancy, Ipv6CidrBlock:Ipv6CidrBlockAssociationSet[].Ipv6CidrBlock|[0], Ipv6Pool:Ipv6CidrBlockAssociationSet[].Ipv6Pool|[0]}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > vpclist.csv
vpclist.csvがカレントにできるので、それをダウンロード。
- サブネット一覧出力
aws ec2 describe-subnets --query 'Subnets[].{Name:Tags[?Key==`Name`].Value|[0], VpcId:VpcId, CidrBlock:CidrBlock, SubnetId:SubnetId, AZ:AvailabilityZone, MapPublicIpOnLaunch:MapPublicIpOnLaunch, State:State, OwnerId:OwnerId}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > subnetlist.csv
subnetlist.csvがカレントにできるので、それをダウンロード。
- ルートテーブルのルート一覧出力
CSVFILE=route-table.csv;\
echo "RouteTableId,Name,DestinationCidrBlock,GatewayId,NatGatewayId,VpcPeeringConnectionId,TransitGatewayId,NetworkInterfaceId,DestinationPrefixListId,InstanceId,State" > ${CSVFILE};\
aws ec2 describe-route-tables --query "RouteTables[].[RouteTableId,Tags[?Key=='Name']|[0].Value,Routes[].[DestinationCidrBlock,GatewayId,NatGatewayId,VpcPeeringConnectionId,TransitGatewayId,NetworkInterfaceId,DestinationPrefixListId,InstanceId,State]]" --output text | \
tr "\t" "," | sed -e 's/rtb*^/rtb*,/g' -e 's/^0/,,0/g' -e 's/^1/,,1/g' -e 's/^2/,,2/g' -e 's/^3/,,3/g' -e 's/^4/,,4/g' -e 's/^5/,,5/g' -e 's/^6/,,6/g' \
-e 's/^7/,,7/g' -e 's/^8/,,8/g' -e 's/^9/,,9/g' -e 's/^None/,,None/g' \
>> ${CSVFILE}
route-table.csvがカレントにできるので、それをダウンロード。
- インターネットゲートウェイの一覧出力
aws ec2 describe-internet-gateways --query 'InternetGateways[].{Name:Tags[?Key==`Name`].Value|[0], InternetGatewayId:InternetGatewayId, VpcId:Attachments[0].VpcId, OwnerId:OwnerId}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > igw.csv
igw.csvがカレントにできるので、それをダウンロード。
- NATゲートウェイの一覧出力
aws ec2 describe-nat-gateways --query 'NatGateways[].{Name:Tags[?Key==`Name`].Value|[0], NatGatewayId:NatGatewayId, VpcId:VpcId, SubnetId:SubnetId, NetworkInterfaceId:NatGatewayAddresses[0].NetworkInterfaceId}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > natgwlist.csv
natgwlist.csvがカレントにできるので、それをダウンロード。
- TransitGatewayの一覧出力
aws ec2 describe-transit-gateways --query 'TransitGateways[].{Name:Tags[?Key==`Name`].Value|[0], TGWID:TransitGatewayId, OwnerId:OwnerId, ASN:Options.AmazonSideAsn, AutoAcceptSharedAttachments:Options.AutoAcceptSharedAttachments, DefaultRouteTableAssociation:Options.DefaultRouteTableAssociation, AssociationDefaultRouteTableId:Options.AssociationDefaultRouteTableId, DefaultRouteTablePropagation:Options.DefaultRouteTablePropagation, PropagationDefaultRouteTableId:Options.PropagationDefaultRouteTableId, VpnEcmpSupport:Options.VpnEcmpSupport, DnsSupport:Options.DnsSupport, MulticastSupport:Options.MulticastSupport}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > tgwlist.csv
tgwlist.csvがカレントにできるので、それをダウンロード。
- TransitGateway アタッチメントの一覧出力
aws ec2 describe-transit-gateway-attachments --query 'TransitGatewayAttachments[].{Name:Tags[?Key==`Name`].Value|[0], TGWID:TransitGatewayAttachmentId, TGWAttachmentID:TransitGatewayAttachmentId, TGWID:TransitGatewayId, TGWOwnerID:TransitGatewayOwnerId, OwnerId:ResourceOwnerId, ResourceType:ResourceType, ResourceId:ResourceId, TGWRTBID:Association.TransitGatewayRouteTableId}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > tgwattchlist.csv
tgwattchlist.csvがカレントにできるので、それをダウンロード。
- TransitGateway ルートテーブルの一覧出力
aws ec2 describe-transit-gateway-route-tables --query 'TransitGatewayRouteTables[].{Name:Tags[?Key==`Name`].Value|[0], TGWRTBID:TransitGatewayRouteTableId, TGWID:TransitGatewayId, DefaultAssociationRouteTable:DefaultAssociationRouteTable, DefaultPropagationRouteTable:DefaultPropagationRouteTable}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > tgwrtblist.csv
tgwrtblist.csvがカレントにできるので、それをダウンロード。
- Elastic IPの一覧出力
aws ec2 describe-addresses --query 'Addresses[].{Name:Tags[?Key==`Name`].Value|[0], PublicIp:PublicIp, NetworkInterfaceId:NetworkInterfaceId, PublicIpv4Pool:PublicIpv4Pool}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > elasticips.csv
elasticips.csvがカレントにできるので、それをダウンロード。
- VPCエンドポイントの一覧出力
aws ec2 describe-vpc-endpoints --query 'VpcEndpoints[].{Name:Tags[?Key==`Name`].Value|[0],ServiceName:ServiceName,VpcEndpointId:VpcEndpointId,VpcId:VpcId,VpcEndpointType:VpcEndpointType}' \
| jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' | sort > vpcendpoint.csv
vpcendpoint.csvがカレントにできるので、それをダウンロード。
もし他にいいコマンドがあったらここに追記予定
参考
【AWS CLI】ネットワーク関連のリソース一覧取得
https://blog.serverworks.co.jp/aws-cli-network#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89-%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E6%9C%89%E3%82%8A-4
jq と JMESPath を同時に覚える
https://www.techscore.com/blog/2019/09/30/jq-%E3%81%A8-jmespath-%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB%E8%A6%9A%E3%81%88%E3%82%8B/
【AWS CLI】Transit Gateway関連の情報取得編
https://blog.serverworks.co.jp/aws-cli-tgw
【AWS CLI】Transit Gatewayのルートテーブルの詳細出力編
https://blog.serverworks.co.jp/aws-cli-tgw-route-table
【AWS CLI】全Route TableのRoute情報を取得する方法
https://blog.serverworks.co.jp/aws-cli-desribe-route-table
tr - 文字の変換や削除 - Linuxコマンド
https://webkaru.net/linux/tr-command/