EC2 User Data について (色々自動設定してみるの巻)
今までEC2を何気なく作成していましたが、そろそろ「User Data」なるものを
使ってみようと思ったのでメモ。
これのことです。
インスタンス起動時にやりたい処理(ホスト名設定など)をUser Dataに記述
しておけば、起動時に色々設定してくれる優れものです!
シェバン(#!/bin/bash)を先頭に書き、yum -y install httpd などと書いておくと
Apacheがインストールされます。
#!/bin/bash yum -y install httpd
的な。。
ここまではよくある話で、そもそも、んなもん、Apacheインストール済みのAMI
作成しとけばー!?、と色々な記事を見て思っておりました。
それはさておき、個人的に面倒くさいのは、インスタンス起動後のホスト名設定とDNS設定。
これを実現するUser Dataを作ってみました。
前提
・/etc/bashrc、~/.bash_profile に AWS関連の環境変数が記述してあること。
http://xoxo-infra.hatenablog.com/entry/2013/02/08/013002
・VPCを使っていること。
・R53でプライベートIPを管理していること。
http://xoxo-infra.hatenablog.com/entry/2013/02/12/221955
・route53 コマンドがインストールされていること。
http://xoxo-infra.hatenablog.com/entry/2013/02/28/195446
・インターネットに出れること(NATサーバ経由でも可)
※R53はインターネット経由でアクセスする為。
となります。
設定するUser Data
#!/bin/sh HOST=web001 # ENV DOMAIN_ID=XXXXXXXXXXXXXXXX WORK_DIR=/home/user LOG=${WORK_DIR}/init.log . /etc/bashrc . ${WORK_DIR}/.bash_profile CFG=/etc/sysconfig/network # HostName /bin/cp -p ${CFG} ${CFG}.`date -I` /bin/sed -e 's/HOSTNAME/#HOSTNAME/g' -e '/#HOSTNAME/a\HOSTNAME='${HOST}'' ${CFG}.`date -I` > ${CFG} /bin/hostname ${HOST} # Tag INS_ID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id` /opt/aws/bin/ec2-create-tags ${INS_ID} -t Name=${HOST} > ${LOG} 2>&1 # IP IP=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4` /usr/bin/route53 add_record ${DOMAIN_ID} ${HOST}.test.domain. A ${IP} 300 >> ${LOG} 2>&1 exit
HOST= は設定したいホスト名、
DOMAIN_ID= は管理しているプライベート用ドメインのID
${HOST}.test.domain. はプライベート用ドメイン名に
読み替えて下さい。
# HostName の箇所は、デフォルトで/etc/sysconfig/networkに設定されているHOSTNAMEを
コメントアウト、その後、コメントアウトした下の行に HOSTNAME=web001 を設定しています。
# Tag の箇所は、curlで自身のインスタンスIDを取得し、Nameタグにホスト名を付与しています。
# IP は同じく、curlで自身のプライベートIPを取得し、R53に登録しています。
見切れてますがこんな感じです。
あとは通常通り、インスタンス作成すればホスト名&DNS設定が完了した状態で
起動されます!
curl -s http://169.254.169.254/latest/meta-data で自身の情報を色々取れるので、
自由度は高いですね。(というか便利!)
管理するインスタンス数が少ない場合、chefとかcapibaraとかでやる手間のほうが面倒
だったりするかと思うので、数台の管理には使えるかなぁ。。
・参考
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
http://understeer.hatenablog.com/entry/2012/07/19/123050
以上です。