早いところchefやpuppetといった自動化ツールを使いこなせるようになりたいところだけど、まずはAWS標準で実装できるものが他に無いものか確認していたところ、ようやくcloud-initについて概要が理解できた。
cloud-init パッケージは、Canonical によって構築されたオープンソースアプリケーションであり、Amazon EC2 などのクラウドコンピューティング環境で Linux イメージをブートストラップするときに使用されます。Amazon Linux にはカスタマイズされたバージョンの cloud-init が含まれています。これにより、起動時のインスタンスに対するアクションを指定することができます。インスタンスの起動時に、ユーザーデータフィールドを使用して必要なアクションを cloud-init に渡すことができます。つまり、さまざまなユースケースに対して共通の AMI を使用し、起動時にその AMI を動的に設定できます。また、Amazon Linux は cloud-init を使用して、ec2-user アカウントの初期設定を実行します。ひとまずAmazon LinuxかUbuntuのAMIにデフォルトで導入されているらしい。まずはAmazon Linuxで挙動を確認してみる。
# ls -la /etc/rc3.d/*cloud* lrwxrwxrwx 1 root root 26 7月 26 15:51 /etc/rc3.d/S50cloud-init-local -> ../init.d/cloud-init-local lrwxrwxrwx 1 root root 20 7月 26 15:51 /etc/rc3.d/S51cloud-init -> ../init.d/cloud-init lrwxrwxrwx 1 root root 22 7月 26 15:51 /etc/rc3.d/S52cloud-config -> ../init.d/cloud-config lrwxrwxrwx 1 root root 21 6月 11 16:51 /etc/rc3.d/S98cloud-final -> ../init.d/cloud-final
「#cloud-config」以外にも「#cloud-boothook」があるらしく、boothook指定しておけばネットワーク以外の各種サービスが起動する前(上記S50のタイミング)で動作させることもできるらしい。ひとまずcloud-configで初期設定すべき推奨を早めに決めておきたい。
このあたりのページに詳しく書いてありました。
Amazon EC2(Linux)システム管理で知らないとハマる5つの環境設定
CDP:Bootstrapパターンでcloud-initとcloud-boothookの活用!
CloudInit を使って Amazon EC2 のホスト名を自動的に設定する