share facebook facebook2 twitter menu hatena pocket slack

2015.06.10 WED

割当て済みIPアドレスをサブネット毎に表示するワンライナー(aws cli,jq)

WRITTEN BY三浦 剛慈

初期構築済みのAWSアカウント内で、使用済みIPアドレスを調べられるワンライナー書きました。
予めプライベートIPアドレスを決めてからEC2をlaunchする必要があるとき等に役立つと思います。

サブネット毎に、割当て済みプライベートIPアドレスがソートして表示されます。
VPCもサブネットもCIDRブロックでソートしています。

■ワンライナー

for vpcinf in `aws ec2 describe-vpcs|jq -r '.Vpcs[]|[.VpcId,.CidrBlock]|@csv'| 
sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n`; 
do 
vpcid=`echo $vpcinf|cut -d, -f 1`; 
echo "< " $vpcinf " >"; 
for subnetinf in `aws ec2 describe-subnets|jq -r '.Subnets[]|select(.VpcId==$vpc)|[.SubnetId,.CidrBlock]|@csv' --arg vpc $vpcid| 
sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n`; 
do 
subnetid=`echo $subnetinf|cut -d, -f 1`; 
echo "=== " $subnetinf " ==="; 
aws ec2 describe-network-interfaces|jq -r '.NetworkInterfaces[]|select(.SubnetId==$subnet)|[.Description,.PrivateIpAddress]|@csv' --arg subnet $subnetid| 
sed -e "s/"2",//g"|sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n; 
done 
done

■実行例

$ for vpcinf in `aws ec2 describe-vpcs|jq -r '.Vpcs[]|[.VpcId,.CidrBlock]|@csv'| 
> sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n`; 
> do 
> vpcid=`echo $vpcinf|cut -d, -f 1`; 
> echo "< " $vpcinf " >"; 
> for subnetinf in `aws ec2 describe-subnets|jq -r '.Subnets[]|select(.VpcId==$vpc)|[.SubnetId,.CidrBlock]|@csv' --arg vpc $vpcid| 
> sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n`; 
> do 
> subnetid=`echo $subnetinf|cut -d, -f 1`; 
> echo "=== " $subnetinf " ==="; 
> aws ec2 describe-network-interfaces|jq -r '.NetworkInterfaces[]|select(.SubnetId==$subnet)|[.Description,.PrivateIpAddress]|@csv' --arg subnet $subnetid| 
> sed -e "s/"2",//g"|sed -e "s/"//g"|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n; 
> done 
> done
< vpc-XXXXXXXXX,10.0.32.0/23 >
=== subnet-AAAAAAAA,10.0.32.0/28 ===
Primary network interface,10.0.32.10
=== subnet-BBBBBBBB,10.0.32.16/28 ===
Primary network interface,10.0.32.20
Primary network interface,10.0.32.21
Primary network interface,10.0.32.22
Primary network interface,10.0.32.29
=== subnet-CCCCCCCC,10.0.32.32/28 ===
Primary network interface,10.0.32.36
Primary network interface,10.0.32.37
=== subnet-DDDDDDDD,10.0.33.0/28 ===
Primary network interface,10.0.33.10
=== subnet-ead20983,10.0.33.16/28 ===
Primary network interface,10.0.33.22
Primary network interface,10.0.33.25
=== subnet-EEEEEEEE,10.0.33.32/28 ===
=== subnet-FFFFFFFF,10.0.36.0/27 ===
RDSNetworkInterface,10.0.36.17
RDSNetworkInterface,10.0.36.25
=== subnet-GGGGGGGG,10.0.36.32/27 ===
RDSNetworkInterface,10.0.36.60
=== subnet-HHHHHHHH,10.0.40.0/24 ===
Primary network interface,10.0.40.5
Primary network interface,10.0.40.6
ELB elb-hoge,10.0.40.7
ELB s-elb-aja-aaa,10.0.40.35
ELB elb-mojya,10.0.40.40
ELB s-elb-pepepe,10.0.40.46
ELB elb-oreno,10.0.40.124
ELB elb-watasino,10.0.40.135
ELB elb-minnano,10.0.40.136

“Primary network interface”はENIの説明なのでEC2,”RDSNetworkInterface”はRDS,”ELB “はELB、のそれぞれに割当てられていることになります。

元記事はこちら

koujiのblog : 割当て済みIPアドレスをサブネット毎に表示するワンライナー(aws cli,jq)