Amazon EC2の機能を詳しく見てみる(3)--インスタンスデータとAMI

小田逸郎(VA Linux Systems Japan)
2009-05-25 12:00:00
  • このエントリーをはてなブックマークに追加

 Amazon EC2互換のクラウドシステム作成を目指し、ここ数回はEC2そのものの各機能についてトピックごとに紹介しています。今回は、インスタンスの属性情報(インスタンスデータ)を取得するための機能と、インスタンスのルートパーティションのイメージである「Amazon Machine Image(AMI)」についてです。

インスタンスデータの取得

 インスタンス内部から、インスタンスの各種属性(インスタンスメタデータ)を、Webサービスを通して取得できます。また、インスタンス実行時に任意のユーザーデータを与えることができ、このユーザーデータもインスタンス内部からWebサービスを通して取得可能です。

 インスタンスメタデータ、ユーザーデータを取得するには、「http://169.254.169.254/2008-12-01/」に要求を投げます。「2008-12-01」の部分はバージョン番号ですが、ここに「latest」と書けば、最新のバージョン番号を指定したことになります。APIは、REST風になっており、前記URLに取得したメタデータ名を続けて指定します。応答は、単なる文字列で、curlなどのツールを使用して簡単に取得できます。

 以下に実行例を示します。(注: 改行を補っています)

# curl http://169.254.169.254/latest/
meta-data
user-data
# curl http://169.254.169.254/latest/user-data
valinux
# 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
security-groups
# curl http://169.254.169.254/latest/meta-data/ami-id
ami-045db96d
# curl http://169.254.169.254/latest/meta-data/ami-launch-index
0
# curl http://169.254.169.254/latest/meta-data/public-ipv4
72.44.56.54
# curl http://169.254.169.254/latest/meta-data/public-keys/
0=valinux
# 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 AAAAB3NzaC1yc2EAAAADAQABAAABAQCg2Zf/...(省略)

 sshログインのためにキーペアの作成インターフェースが用意されていることを前回説明しました。パブリックキーをインスタンスに格納するために、このインスタンスメタデータの機能が使われています。上記の実行例の中にもありますが、インスタンス実行時に指定したキーペア名に対応するパブリックキーは、「http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key」から取得できます。

 インスタンス起動時に以下のようなスクリプトを実行するようにしておきます。以下に実行例を示します(エラー処理など省略しています)。

#!/bin/bash
public_key_url=http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
public_key_file=/tmp/openssh_id.pub
authorized_keys=/root/.ssh/authorized_keys
curl --silent --fail -o $public_key_file $public_key_url
if [ $? -eq 0 -a -e $public_key_file ] ; then
    cat $public_key_file >> $authorized_keys
fi
chmod 600 $authorized_keys
rm -f $public_key_file

 ユーザーデータは、インスタンスの起動時に16KB以内ですが任意のものを渡すことができます(Base64エンコードしておく必要があります)。ユーザーデータを使用して、インスタンスの動きを制御できます。例えば、データベースサーバのインスタンスがマスターとして起動するかスレーブとして起動するかを、ユーザーデータで指定するようにすれば、わざわざマスター用のAMIとスレーブ用のAMIを用意しなくてもよくなります。

Amazon Machine Image(AMI)

  • 新着記事
  • 特集
  • ブログ