意外と知られてない?AWS EC2上で169.254.169.254にアクセスして、IPやホスト名、VPC情報などを取得する方法。
<スポンサードリンク>
意外と知られていないAWS EC2のインスタンスIDやホスト名、AMI-IDなどの情報を、EC2インスタンス内から取得する方法を紹介。
どんなことができるのか
詳しい説明は後にして、とりあえず試しに
curl http://169.254.169.254/latest/meta-data/instance-id/
とEC2インスタンスから実行してみましょう。
実行すると、
$ curl 169.254.169.254/latest/meta-data/instance-id/ i-577f7355
実はこんな簡単にインスタンスIDを取得することができるんです。
例えばAWSのAPIをたたいて、インスタンスのAMIを取得することでバックアップを取る場合、インスタンスIDを引数に設定する必要がありあす。そんな場合、この169.254.169.254を利用して、自分のインスタンスIDを取得して、簡単にバックアップを取得することができます。
例えば下記のような感じ。(rubyのSDKを利用。重要なところだけ抜粋。)
require 'aws-sdk' insId = `curl -s 169.254.169.254/latest/meta-data/instance-id/` option = { :instance_id => insId, :description => "Backup of #{insId} (#{insId}) at #{DateTime.now.strftime("%Y%m%d-%H%M%S"}", :name => "backup-#{insId}-#{DateTime.now.strftime("%Y%m%d-%H%M%S")}", :no_reboot => true } new_image = ec2.create_image( option )
これで簡単にAMI取得によるバックアップを取得することができます。
インスタンスID以外に169.254.169.254を利用して様々な情報を取得することができます。取得可能な情報は「curl http://169.254.169.254/latest/meta-data/」と実行してみると、簡単に参照できます。
$ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname instance-action instance-id instance-type kernel-id local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups
みなさんもcurl 169.254.169.254を実行していろんな情報を取得してみてください^^