
Amazon EC2の機能を詳しく見てみる(3)--インスタンスデータとAMI
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を用意しなくてもよくなります。