Amazon EC2の仮想サーバ(インスタンス)から自身のメタ情報を取得する方法

Dogberry Cafe


Amazon EC2で起動した仮想サーバ(インスタンス)では、サーバの内部から、そのサーバ自身の各種メタデータ(MetaData)を取得することが出来ます。


自前でAMIをカスタマイズする際、インスタンスの起動時に割り振られる(確定する)データ(例えば、IPアドレスとかインスタンスIDとか。)については、事前に扱いを決めることは難しいかと思います。

例えば、インスタンスIDをサーバ自身が判別できることで、サーバ起動のタイミングや、サーバ稼働中に、Amazon EBSボリュームを(自動で)自分自身に割り当てられたり等もできたりします。


また、余談ですが、Amazon EC2では、ユーザがインスタンスの起動時に任意のデータ(UserData)をインスタンスに渡すことができ、そのデータをインスタンスの中で扱うことも可能です。
この場合も、以下で紹介するやり方で、メタデータだけではなく、ユーザデータも同様に取得することが可能です。(詳しい利用方法については別途)

メタデータ(ユーザデータ)の取得

データの取得は、サーバ内部からWeb経由(HTTP)で取得します。これはAmazon EC2が独自で持つRESTのAPIで、サーバから"169.254.169.254"へHTTPのGETメソッドでアクセスすることで取得できます。
Amazon EC2の仮想サーバのコマンドラインから、以下の要領で取得してみてください。

# curl http://169.254.169.254/latest/
dynamic
meta-data
user-data

この中で、"meta-deta"がメタデータ、"user-data"がユーザデータとなります。

# curl http://169.254.169.254/latest/user-data/

で、ユーザがインスタンスの起動時に定義した(渡した)データを取得できます。

# curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
ancestor-ami-ids
block-device-mapping/
hostname
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
placement/
public-hostname
public-ipv4
public-keys/
ramdisk-id
reservation-id

では、本題のメタデータの方を紹介。
取得できるパラメータは上記の通り、たくさんあります。
以下の要領で、続けてパラメータ名をつけていくことで、何かしらの値が取得できることになります。いくつか取得できる値を紹介します。
(一部、public-keysなどは、指定方法が少し違うため、以下を参照して下さい。)

# curl http://169.254.169.254/latest/meta-data/ami-id
ami-810657c4

AMIのID。

# curl http://169.254.169.254/latest/meta-data/instance-id
i-02688446

インスタンスのID。

# curl http://169.254.169.254/latest/meta-data/instance-type
m1.small

サーバのインスタンスタイプ。

# curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-162-154-117.us-west-1.compute.internal

サーバのホスト名(hostbame)。

# curl http://169.254.169.254/latest/meta-data/local-ipv4
10.162.154.117

サーバのプライベートIPアドレス。

# curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-west-1a

サーバの起動しているゾーン名(Availability Zone)。

# curl http://169.254.169.254/latest/meta-data/public-hostname
ec2-204-236-190-25.us-west-1.compute.amazonaws.com

サーバのパブリックDNSネーム。

# curl http://169.254.169.254/latest/meta-data/public-ipv4
204.236.190.25

サーバのパブリックIPアドレス。

# curl http://169.254.169.254/latest/meta-data/security-groups
default

サーバの所属しているセキュリティグループ。

# curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ephemeral0
root
swap

# curl http://169.254.169.254/latest/meta-data/block-device-mapping/ami
sda1
# curl http://169.254.169.254/latest/meta-data/block-device-mapping/root
/dev/sda1
# curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
sda2
# curl http://169.254.169.254/latest/meta-data/block-device-mapping/swap
sda3

サーバに接続されているディスクデバイス。

# curl http://169.254.169.254/latest/meta-data/public-keys/
0=test_key
# curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
# curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa AAAAB3NzaC1yc2EAAAAD.....(省略)..... test_key

KeyPairsで指定した、サーバに接続する際の公開鍵。
"0=test_key"などは、"0"を指定し取得したパラメータを上記のようにあわせて(/0/openssh-key)指定します。

まとめ


クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)