EC2 Windowsホスト名とプライベートIPアドレスを変換するbashスクリプト

1 min read読了の目安(約1200字

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