人生やまあり

大学卒業後IT会社に就職してITをやってます。

意外と知られてない?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を取得することができるんです。

例えばAWSAPIをたたいて、インスタンスのAMIを取得することでバックアップを取る場合、インスタンスIDを引数に設定する必要がありあす。そんな場合、この169.254.169.254を利用して、自分のインスタンスIDを取得して、簡単にバックアップを取得することができます。

例えば下記のような感じ。(rubySDKを利用。重要なところだけ抜粋。)

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を実行していろんな情報を取得してみてください^^