EC2起動時にサービス投入までに定型作業がある場合など、毎度同じコマンドを打つのが面倒になってきたので調べました
User Dataというのを使えば出来る模様
Amazon LinuxのCloudInitによって起動時に実行されるスクリプトを定義できるようです
下記3通り
今回は「テキストで直にコマンドを入力」する方法をやってみます
起動スクリプトの登録
気づきにくいけど「Advanced Detail」ってところに入力します
User Data欄に入力を行います
#!/bin/bash sh /root/setup.sh
#!/bin/bash
を一行目に入れないとちゃんと動いてくれませんでした
この箇所に入力したものをスクリプトとして実行してくれるっていう感じかと思われます
後は起動時に実行されるのを待つだけ
実行されている時にプロセス見たら下記のようになりました
root 843 0.0 0.3 115396 1936 ? Ss 18:16 0:00 /bin/bash /etc/rc.d/rc 3 root 1352 0.0 0.3 115396 1836 ? S 18:17 0:00 \_ /bin/bash /etc/rc3.d/S99cloud-init-user-scripts start root 1353 0.1 2.5 214692 15380 ? S 18:17 0:00 \_ /usr/bin/python2.6 /usr/bin/cloud-init-run-module once-per-instance user-scripts execute run-parts /var/lib/cloud/data/scripts root 1354 0.0 0.2 115128 1568 ? S 18:17 0:00 \_ /bin/bash /usr/bin/run-parts /var/lib/cloud/data/scripts root 1358 0.0 0.2 115128 1244 ? S 18:17 0:00 \_ /bin/bash /var/lib/cloud/data/scripts/part-000 root 1360 0.0 0.2 115128 1444 ? S 18:17 0:00 | \_ sh /root/setup.sh root 1359 0.0 0.1 113428 972 ? S 18:17 0:00 \_ awk -v progname=/var/lib/cloud/data/scripts/part-000 progname {????? print progname ":\n"????? progname="";???? }???? { print; }
/var/lib/cloud/data/scripts/part-000の中身を見てみると
#!/bin/bash sh /root/setup.sh
User Dataで定義したスクリプトが記述してありました
ここから読み込んで実行しているようですね
setup.shの中にサービス用のスクリプトを書いてAMI化しておけば毎回同じ作業をしなくて済みます
text直で書くと16kbまでの制限があるようですがその制限にも掛からないです
そもそもそんなに自動作業増えるならAMI作り直せっていう話でもありそうですが...
主に揮発性ディスクに対する操作などが入っている場合はこういう形で実行するのは有効なのかなと思います
あとはこの一連の流れをコマンドラインから実行できるようにしておけば簡単にサービスへの投入が出来ますね