cloud-initで起動時に任意のスクリプトを実行する(CentOS6)cloud-initでUser Dataを使ってEC2を
最初に起動した時のみ
の記事に引き続き、cloud-initでスクリプトを実行してみます。

今回の設定ファイルは次の通りです。

# cat /etc/cloud/cloud.cfg
manage_etc_hosts: localhost
user: root
disable_root: false
ssh_genkeytypes: [ rsa, dsa ]

cloud_init_modules:
- resizefs
- update_etc_hosts
- ssh

cloud_final_modules:
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user

追加した内容は下記となります。

  • scripts-per-once
    • /var/lib/cloud/scripts/per-once/以下のスクリプトを実行
  • scripts-per-boot
    • /var/lib/cloud/scripts/per-boot/以下のスクリプトを実行
  • scripts-per-instance
    • /var/lib/cloud/scripts/per-instance/以下のスクリプトを実行

そして、スクリプトが起動されるタイミングを確認するため次のようにスクリプトを配置しました。

# cd /var/lib/cloud/scripts
# tree `pwd`
/var/lib/cloud/scripts
├── per-boot
│ └── per-boot.sh
├── per-instance
│ └── per-instance.sh
└── per-once
└── per-once.sh

各スクリプトは下記の通りです。

・per-boot.sh

#!/bin/sh
echo per-boot : `date` >> /tmp/per-xxx.txt

・per-instance.sh

#!/bin/sh
echo per-instance: `date` >> /tmp/per-xxx.txt

・per-once.sh

#!/bin/sh
echo per-once : `date` >> /tmp/per-xxx.txt

実際にEC2を起動して挙動を確認します。

▼ 初期起動の場合

# cat /tmp/per-xxx.txt
per-once : 2013年 1月 3日 木曜日 17:30:16 JST
per-boot : 2013年 1月 3日 木曜日 17:30:16 JST
per-instance: 2013年 1月 3日 木曜日 17:30:16 JST

※ すべてのスクリプトが実行されています。

▼ リブートした場合

# cat /tmp/per-xxx.txt
per-once : 2013年 1月 3日 木曜日 17:30:16 JST
per-boot : 2013年 1月 3日 木曜日 17:30:16 JST
per-instance: 2013年 1月 3日 木曜日 17:30:16 JST
per-boot : 2013年 1月 3日 木曜日 17:32:24 JST

※ per-bootのみ実行されています。

▼ AMIにしてから起動した場合

# cat /tmp/per-xxx.txt
per-once : 2013年 1月 3日 木曜日 17:30:16 JST
per-boot : 2013年 1月 3日 木曜日 17:30:16 JST
per-instance: 2013年 1月 3日 木曜日 17:30:16 JST
per-boot : 2013年 1月 3日 木曜日 17:32:24 JST
per-boot : 2013年 1月 3日 木曜日 17:44:08 JST

※ per-instanceも実行されると思っていましたがper-bootのみという結果になりました。

per-instanceの挙動がまだ微妙ですが、yum -y update等最初にEC2を起動した時のみ実行したい処理は、
per-onceを利用すればいいことがわかります。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら