Amazon EC2のUser Dataにシバンを指定してスクリプトを実行する
シバンとは?
UNIXのスクリプトの1行目に最初に出てくる謎の文字「#!」。その名も「シバン」。2行目以降のスクリプトを読み込むインタプリタ(bashとかperlとか)を指定するおまじないです。
User Data指定時にスクリプトを実行する
Amazon EC2の起動時のUser Dataを指定するところで、このシバンを指定することによって記述された文字列をスクリプトとして実行することができます。
Apache+PHP+MySQL環境を構築する
User Dataでスクリプトを指定して、Apache+PHP+MySQLをインストールしたいと思います。以下をUser Dataに指定してインスタンスを起動してみます。簡単ですね。
#!/bin/bash sudo yum update -y sudo yum install httpd-devel httpd -y sudo yum install mysql-server mysql-devel mysql -y sudo yum install php-devel php -y sudo service mysqld start sudo service httpd start sudo chkconfig mysqld on sudo chkconfig httpd on
User Dataスクリプトのデバッグ
記述したスクリプトが正しく実行されているか確認したい場合、また、途中でスクリプトが落ちているかデバッグしたい場合、以下のように記述することでログで確認ができます。
#!/bin/bash -ex exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
User Dataの制限
スクリプトなら何でも記述できそうですが、いくつか制限があります。スクリプトのサイズ制限です。16KBとなっています。もし、これ以上大きいスクリプトを実行したければ、スクリプト内でS3やSimpleDBから長いスクリプトをダウンロードして実行する必要があります。
User Dataのセキュリティ
User Dataのスクリプトには、インスタンス毎に設定したパラメータなどを記述しますが、ここにパスワードを書くべきではありません。なぜならば、インスタンスにログインさえできれば、以下のURLからUser Data情報が取得できてしまうからです。
http://169.254.169.254/latest/user-data
もっと本格的にスクリプトを組みたい
User Dataに書くのでは足りず、複数のインタンスやサービスが連携するスクリプトをゴリゴリと書きたい場合は、AWS CloudFormationをおススメします。この説明については別の機会にて。
まとめ
今回は、EC2インスタンスを起動する際に指定できるUser Dataにシバン指定することで、スクリプトとして起動時に自動実行できることを学びました。