2013/10/05

CloudInitを使ってみた

Amazon Linuxで何気なくchkconfig --listしたら、見たこと無いやつがあった。

$ chkconfig --list
cloud-init      0:off   1:off   2:on    3:on    4:on    5:on    6:off
cloud-init-user-scripts 0:off   1:off   2:on    3:on    4:on    5:on    6:off

cloud-init?なんだそれ?

CloudInit[cloud-init is the Ubuntu package that handles early initialization of a cloud instance.]とのことで、元々Ubuntuのパッケージだったそうなんだけど、要はEC2インスタンスの初期起動時のお決まりのセットアップをスクリプト化しちゃうものらしい。なるほど便利そう。

CloudInitのスクリプトは、EC2インスタンスをLaunchするときの以下の画面、User Data枠に記載する。


例えばこんな感じ。
パッケージ全部をyum upgradeして、指定したパッケージを追加で入れて、かつコマンド実行する。今回はAWS-SDKがセットアップされた状態にしたかった。

#cloud-config
repo_upgrade: all
packages:
- ruby-devel
- rubygems
- gcc
- make
- libxml2-devel
- libxslt-devel
runcmd:
- [gem, install, nokogiri]
- [gem, install, aws-sdk]
- [sed, -i, 's/en_US/ja_JP/', /etc/sysconfig/i18n]
- [cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime]


EC2インスタンス起動後、ログを確認し、エラーが無いことを確認する。
# cat /var/log/cloud-init.log

どれどれ...

$ gem list --local

*** LOCAL GEMS ***
aws-sdk (1.20.0)
json (1.8.0)
mini_portile (0.5.1)
nokogiri (1.5.10)
uuidtools (2.1.4)

おおーちゃんと最初からAWS-ASKがセットアップ済みだー!これは便利!
大量に同じノードを展開したいときはオリジナルAMI作ってばら撒くほうが良いんだろうけど、いつも必ず最初にやるようなことはCloudInitにお任せしちゃうと楽だね!