なるべく手間をかけずEC2インスタンスのPublic IPを取得してみた


よくEC2インスタンスを一時的に立てて作業をすることがあるのですが

  1. 公開するサービスでもないためElasticIPは不要
  2. とはいえ再起動時に割り振られるPublic IPを手間なく知りたい(AWSコンソールにいちいちログインしたくない)

という想いがありました。それを解消した備忘録。

ElasticIPによる課金

EIPで料金発生するパターンとしないパターン #AWS

ここに詳しく載ってますが、よくあるパターンとして

  • ElasticIPは割り当てた
  • 割り当てたEC2インスタンスは必要な時以外動かさない

という時は課金対象となります。このパターンだと、0.005USD / hourかかってしまいます。月3.6ドル、400円程度。少額とはいえ、EC2インスタンスを停止してコストを抑えようとしているのにElasticIPで課金されているようでは意味がありません。

ということで以下の通りの設定をしました。

起動スクリプトにPublic IPを出力、S3に配置する処理を記述

準備として以下を実施します。

  1. awscliのインストール(すでにされているインスタンスがほとんど)
  2. S3にデータ保存用のバケット作成
  3. 起動するEC2インスタンスにS3バケットへのアクセス権限をつける

起動スクリプト(ユーザーデータではない。再起動時に毎回実行して欲しいから)にメタデータを取得し、そのデータをS3に配置するようにします。

$ sudo vi /etc/rc.local

ファイルを開いたら、以下の処理を追記します。(ファイルの最後に記述されているexit 0の前に追記します)

curl http://169.254.169.254/latest/meta-data/public-ipv4/ > /tmp/ip.txt
aws s3 cp /tmp/ip.txt s3://xxx-xxxx-conf

これで再起動時に新しく割り振られたPublic IPがS3に保存されるので、それを自分のマシンから参照するだけです。

$ aws s3 cp s3://xxx-xxxx-conf/ip.txt - 2>/dev/null | head
54.236.XXX.YYY

これで無事Public IPアドレスが取得できました。