AWS Subnet内で利用されていないIPを取得する(Pick up dynamically unused Private Ip Address from subnet on AWS )
普通に家で書いて、普通に実務で使ってるもの。
EC2のインスタンスに対して、空いているprivate IP をセカンダリIPとして設定したかったので、空いているIPを動的に取得してその値を用いる必要があった。
コードは以下。
今回は、ドカスカ立ち上がるEMRの中で空いているものを見つけるというもの
少しだけコード紹介
こちらは、EMRがマスターノードかそうでないか?を判定している。 今回は、ワーカーノードには必要のない処理だったのでこの処理を入れている。
isMaster=$(cat /emr/instance-controller/lib/info/instance.json | jq .isMaster) if ! "${isMaster}" ; then echo "slave server" exit 0 fi
ここで現在使っている、IPの一覧を取得してip.txtに保存
# consumed ip addres by others including self aws ec2 describe-network-interfaces | jq -r .[][] | grep "PrivateIpAddress" | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d':' -f 2 | tr -d \" | tr -d , | tr -d " " | sort | uniq > /tmp/ip.txt
対象のCIDRを取得して
cidr=$(ip r | awk '{print $ 1}' | grep '/')
CIDR内におけるブロードキャストIPを利用しているIPとして追加
ipcalc -b $cidr | cut -d'=' -f 2 >> /tmp/ip.txt
AWSにおいては、最初の4つと、ブロードキャストを除いて、一番後ろのIPは予約されているので、そちらも利用一覧に追加する
nmap -sL $cidr | awk '/Nmap scan report/{print $NF}' | tr -d '()' | sort -V | head -n 4 >> /tmp/ip.txt nmap -sL $cidr | awk '/Nmap scan report/{print $NF}' | tr -d '()' | sort -V | tail -n 1 >> /tmp/ip.txt
CIDRにてとりうるIPの全て
# list adresses nmap -sL $cidr | awk '/Nmap scan report/{print $NF}' | tr -d "()" > /tmp/ip_range.txt
あとはip_range.txtにあって、ip.txt似ないものを探している。
while ¥¥¥¥
gist連携やってみたかった