この記事の内容
AmazonECで利用可能な「ユーザーデータ」を利用してWebサーバをサクッと立てちゃおうというお話です。
本来であればイケてるプロビジョニングツールで自動化すべきなのでしょうが、ノウハウの蓄積ができていないのでこんな不様な事になってます。
逆に言えば、新たに学習コストを掛けない方法でもある程度の自動化ができるということ...なのだろうか?
検証環境
Amazon Linux AMI 2016.03.0 (HVM)で動作確認しました
手順
EC2インスタンスのセットアップについては通常の流れと同じだが、
「3.インスタンスの設定」画面で「高度な詳細」をクリックし、ユーザーデータ関連の設定を以下のように行う。
- ユーザーデータ: 「テキストで」を選択
- テキストエリアに以下のシェルスクリプトの内容をコピペする
- やっていることの説明でコメント入れてますが、実際に使うときは英文にするか消すかしておいたほうが無難(エンコーディングの問題でうまくいかないのかな?)
※当然EC2インスタンスがインターネットへ接続可能なことが前提。
user-data.sh
#!/bin/bash
HOST_F=hostname.domainname
HOST_S=hostname
# ホスト名の変更
sed -ie "s/localhost\.localdomain/${HOST_F}/g" /etc/sysconfig/network
# hostsに自分のホスト名を追加する
ip addr show | grep "inet.*eth0" | awk {'print $2'} | sed -e 's/\(.*\)\/.*$/\1/g' | xargs -I{} echo "{} ${HOST_F} ${HOST_S}" >> /etc/hosts
# タイムゾーンの変更
sed -ie 's/ZONE=\"UTC\"/ZONE=\"Asia\/Tokyo\"/g' /etc/sysconfig/clock
sed -ie 's/UTC=true/UTC=false/g' /etc/sysconfig/clock
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# ロケールの変更
sed -ie 's/en_US\.UTF-8/ja_JP\.UTF-8/g' /etc/sysconfig/i18n
# 管理用ユーザの追加
perl -e "print crypt('password', '\$6\$sa');" | xargs -I{} useradd -u 1000 -b /home/manager -d /home/manager -s /bin/bash --password {} manager
# 管理用ユーザを公開鍵認証できるように設定
mkdir /home/manager/.ssh
cp /home/ec2-user/.ssh/authorized_keys /home/manager/.ssh/authorized_keys
chmod 600 /home/manager/.ssh/authorized_keys
chmod 700 /home/manager/.ssh
chown -R manager:manager /home/manager/.ssh
# 管理用ユーザにsudo権限を与える
cp /etc/sudoers.d/cloud-init /etc/sudoers.d/manager
sed -ie 's/ec2-user/manager/g' /etc/sudoers.d/manager
# Webサーバ用ユーザの追加
useradd -u 1050 -b /home/httpd -d /home/httpd -s /sbin/nologin apache
# rpmを最新化
yum -y update
# 必要なパッケージを入れる
yum -y install gcc zlib-devel ncurses-devel pcre-devel libcurl-devel libxml2-devel
# ソースをダウンロードしてくる
wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.18.tar.gz -O /usr/local/src/httpd-2.4.18.tar.gz
wget http://ftp.riken.jp/net/apache/apr/apr-1.5.2.tar.gz -O /usr/local/src/apr-1.5.2.tar.gz
wget http://ftp.riken.jp/net/apache/apr/apr-util-1.5.4.tar.gz -O /usr/local/src/apr-util-1.5.4.tar.gz
# 展開&コンパイル&インストール
cd /usr/local/src
tar -xvzf httpd-2.4.18.tar.gz
tar -xvzf apr-1.5.2.tar.gz && mv apr-1.5.2 httpd-2.4.18/srclib/apr
tar -xvzf apr-util-1.5.4.tar.gz && mv apr-util-1.5.4 httpd-2.4.18/srclib/apr-util
cd httpd-2.4.18
./configure --prefix=/usr/local/httpd-2.4.18 --enable-mods-shared=all --with-mpm=prefork
make clean && make -j2 && make install
# シンボリックリンクを貼る
ln -s /usr/local/httpd-2.4.18 /usr/local/apache2
# PATHに追加
echo "export PATH=\$PATH:/usr/local/apache2/bin" >> ~/.bash_profile
source ~/.bash_profile
# apacheのバージョンその他確認
apachectl -V >> /tmp/apache.ver
# apachectlをinit.d下にコピーしてchkconfigで制御できるようにする
cp -p /usr/local/src/httpd-2.4.18/support/apachectl /etc/init.d/httpd
chmod 755 /etc/init.d/httpd
sed -ie '17a# chkconfig: 345 99 00' /etc/init.d/httpd
chkconfig --add httpd
# reboot
reboot
これだとスクラップアンドビルドもそんなに大変じゃないです。。。
他のサーバにも応用が効くので色々試してみてますです。