🎃
EC2 Windowsホスト名とプライベートIPアドレスを変換するbashスクリプト
EC2 Windows Server にある EC2Launch(Windows Server 2016 以前は EC2Config)というツールによって、ホスト名を固定に設定しない限り、自動的に設定される仕様になっています。そして、そのホスト名はプライベート IPv4 アドレスを16進数に変換されたものです。
a. コンピュータ名の設定
この設定を有効にすると (デフォルトでは無効になっています)、ブートごとに現在のホスト名が希望するホスト名と比較されます。ホスト名が一致しない場合、ホスト名はリセットされ、システムは必要に応じて再起動して、新しいホスト名を取得します。カスタムホスト名が指定されていない場合は、16 進形式のプライベート IPv4 アドレスを使用して生成されます。例えば、ip-AC1F4E6 などです。既存のホスト名が変更されないようにするには、この設定を有効にしないでください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/ec2launch-v2-settings.html#ec2launch-v2-ui
SSM Run Command などで EC2 Windows Server インスタンスのホスト名が出てきた場合、どの EC2 インスタンスなのかをすぐに把握することが難しいです。したがって、少しでも把握できるように、プライベート IPv4 アドレスと内部ホスト名(IP-xxxxxxxx
)を相互に変換するbashスクリプトを書いてみました。
#!/bin/bash
# プライベート IPv4 アドレスからホスト名を変換
function ip2host() {
local ipaddr=$1
local host="ip-"
for i in ${ipaddr//./ };
do
host="$host$(printf '%02X\n' $i)"
done
echo $host
}
# ホスト名からプライベート IPv4 アドレスを変換
function host2ip() {
local host=$1
local ipaddr=""
for i in $(echo $host | tr -d 'ip-' | fold -2);
do
ipaddr="$ipaddr$(printf "%02d\n" 0x$i)."
done
# 末尾の.を除去
echo ${ipaddr%.}
}
# 確認
ipaddr='10.20.30.40'
host='ip-0A141E28'
ip2host $ipaddr # ip-0A141E28
host2ip $host # 10.20.30.40
Discussion