cloud.cfgはモジュールを用いて動作を行う。
モジュールにより、実行頻度(Module frequency)が異なる。
■基本
cloud-initは /var/lib/cloud/scripts 内にあるスクリプトを、
cloud-init起動時(インスタンスの起動時)に実行する。
この中には以下の4つのディレクトリが存在する。
per-once
per-instance
per-boot
vendor
これらのディレクトリに実行権限のついたファイルを置いておくとそれぞれのタイミングで実行される。
【per-onceディレクトリ】
マシンイメージに対して1度だけ実行されるスクリプトを格納する。
実行されたかどうかは /var/lib/cloud/sem の下にファイルがあるかどうかで確認可能。
【per-instanceディレクトリ】
インスタンスに対して一度だけ実行されるスクリプトを格納する。
実行されたかどうかは /var/lib/cloud/instance/sem 以下のファイルで確認可能。
※/var/lib/cloud/sem ではない点が注意
/var/lib/cloud/instance というディレクトリは
/var/lib/cloud/instances/#{instance-id} というディレクトリのsymlinkになっており、
インスタンスからスナップショットをとってそこから新しいインスタンスを起動した場合(=AMIから展開した場合)などは、instance-idが別になるので再実行されるという仕組みになっている。
【per-bootディレクトリ】
インスタンスの起動の度に実行されるスクリプトを格納する。
監視に仕組みやクラスタに入るためのブートストラップなどで使う。
【vendorディレクトリ】
ユーザ定義のスクリプトを実行するためのスクリプト格納する。
■モジュールの実行頻度(Module frequency)について
以下が存在する。
【per_instance】
インスタンスに対して一度だけ実行されるモジュール。
つまり、EC2新規作成時(AMIからの展開含む)に実行される。
【always,per always】 ※per-bootに相当(すると思われる)
インスタンス起動のたびに実行されるモジュール。
【once-per-instance】 ※per-onceに相当(すると思われる)
マシンイメージ(AMI)に対して1度だけ実行されるモジュール。おそらくAMI作成時に実行される。