下記のようにcloud-initで、EC2起動時にいろいろな処理を行う方法を紹介してきました。

cloud-initでEBSのリサイズを起動時に自動で行う(CentOS6)
cloud-initで"/etc/hosts"にホスト名を追加を自動で行う(CentOS6)
cloud-initでKey Pairの公開鍵をEC2起動時に自動で.ssh/authorized_keysに登録する(CentOS6)

今回は、起動時に任意のスクリプトを実行する設定を試してみます。

○設定ファイルの調整とリブート

cloud_init_modulesにbootcmdを追加し、実行するスクリプトもbootcmdでリスト形式で(複数)指定します。

# cat /etc/cloud/cloud.cfg
manage_etc_hosts: localhost
user: root
disable_root: false
ssh_genkeytypes: [ rsa, dsa ]
ssh_pwauth: yes
bootcmd:
 - echo $INSTANCE_ID > /tmp/instance_id.txt

cloud_init_modules:
 - bootcmd
 - resizefs
 - update_etc_hosts
 - ssh
...

設定できたらリブートします。

# reboot

○スクリプトのとログの確認

cloud-initのスクリプトを見るとbootcmd実行直前にシェル変数(INSTANCE_ID)にインスタンスIDが
セットされていたのですが、下記より確認することができました。

# cat /tmp/instance_id.txt
i-7aa8c079

ログも下記の通りです。

# cat /var/log/cloud-init.log
...
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] cloud-init[INFO]: cloud-init start running: Fri, 28 Dec 2012 07:55:16 +0000. up 8.41 seconds
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: searching for data source in ['DataSourceNoCloudNet', 'DataSourceConfigDriveNet', 'DataSourceOVFNet', 'DataSourceE]
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] DataSourceEc2.py[DEBUG]: removed the following from metadata urls: ['http://instance-data:8773']
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] DataSourceEc2.py[DEBUG]: Using metadata source: 'http://169.254.169.254'
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] DataSourceEc2.py[DEBUG]: crawl of metadata service took 0s
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: found data source DataSourceEc2
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] cloud-init[DEBUG]: found data source: DataSourceEc2
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: handling bootcmd with freq=None and args=[]
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: handling resizefs with freq=None and args=[]
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] cc_resizefs.py[DEBUG]: resizing root filesystem (type=ext4, maj=202, min=65)
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: handling update_etc_hosts with freq=None and args=[]
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] cc_update_etc_hosts.py[DEBUG]: managing 127.0.1.1 in /etc/hosts
Dec 28 16:55:16 ip-10-0-0-51 [CLOUDINIT] __init__.py[DEBUG]: handling ssh with freq=None and args=[]

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