cloudpackエバンジェリストの吉田真吾@yoshidashingo)です。

毎週水曜日18:30-21:30に新宿WAVEさんをお借りして開催している「新宿鮫:AWSもくもく勉強会」も第7回を向かえました。 もくもく勉強会は、自習スタイルで自分のペースで学習を進めながら、分からないことがあれば周りの人にサポートしてもらいながら行う勉強会です。主催者としても手間がかからないので非常に楽です。
今回の私のテーマは、ハンズオン用の資料のために情報をまとめておく作業です。

  • WordPress の EC2 インスタンスを作成する
  • ログを fluentd で S3 に格納させる
  • ログは一定期間後に Glacier にアーカイブさせる
  • WordPress が落ちた場合に S3 でホスティングする Sorry ページを表示するように設定する

○網元の WordPress AMI でインスタンスを作成する

WordPress を EC2 でホスティングするにあたり、いちいちミドルウェアをインストールするのは大変なので、すでに網元から提供されている、チューニング済みの WordPress AMI を利用します。

■網元の WordPress AMI を指定する
網元 にアクセスして「超高速 AMI 網元を今すぐ使う!」を押下します。

■EC2 Management Console からインスタンスを作成する
VPC by Default でない人は EC2-Classic で、VPC by Default の人は Launch into 「VPCのデフォルトサブネット」に。ついで無料使用枠の期間が expire してる人は、スポットリクエストで起動すると安上がりに利用できます。Pricing History を確認して、高値づかみにならないモノを選ぼう。セキュリティグループは ssh と http が開いているものを指定します。

■WordPress をインストールする
インスタンスの起動が完了したら、EC2 Management Console で、起動した EC2 インスタンスの Public DNS を確認し、ブラウザからアクセスします。WordPressのインストール画面が表示されるので、サイト名や管理者情報を入力して「インストール」を押下します。

■Elastic IPs を割り付けておく
あとでIPアドレス指定でヘルスチェックするようにしたいので固定IPを割り付けておきます。

○nginxのログ設定変更

nginxのログ設定やフォーマットを変更します。

■ログフォーマットをLTSV形式に変更
出力されるログフォーマットをLTSV形式に変更します。

# vi /etc/nginx/nginx.conf
# 追記
log_format ltsv 'time:$time_localt'
'host:$remote_addrt'
'request:$requestt'
'status:$statust'
'size:$body_bytes_sentt'
'referer:$http_referert'
'ua:$http_user_agentt'
'reqtime:$request_timet'
'upsttime:$upstream_response_time';

#access_log /var/log/nginx/access.log ltsv;

この設定ファイルに記載されている access_log は効いていないようでした。

ログファイル名を変更します。以下のように変更してください。

# vi /etc/nginx/conf.d/default.conf
#access_log /var/log/nginx/{instance-id}.access.log main;
access_log /var/log/nginx/access.log ltsv;

■ログフォーマットが変更されたか確認
すると、以下のようなフォーマットで出力されていたアクセスログ(/var/log/nginx/access.log)が、

121.116.xxx.xxx - - [29/May/2013:20:14:46 +0900] "GET /?p=1 HTTP/1.1" 200 3706 "http://ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36" "-"

このように出力されるようになります。

time:29/May/2013:20:32:06 +0900 host:121.116.xxx.xxx request:GET /?p=1 HTTP/1.1 status:200 size:3706 referer:http://ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com/?p=1 ua:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36 reqtime:0.083 upsttime:0.083

■nginx の再起動

# service nginx stop
# service nginx status
# chmod 644 /var/log/nginx/access.log
# service nginx start

○td-agent のインストール

fluentd に ruby の実効環境まで付属した td-agent を使います。

■yumリポジトリの設定

# vi /etc/yum.repos.d/td.repo

[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0

■yum で td-agent をインストール

# yum install td-agent

■ログをS3に格納するための情報の確認
IAM Management Console から、適切なポリシーを割り振った IAM ユーザーを作成し、Access Credentials(キーIDとシークレットキー)をメモしておきましょう。また、ログを格納するバケットのエンドポイントとバケット名、その中のフォルダ名も必要に応じて作ってメモしておいてください。

■格納されたログを Glacier にアーカイブする設定
対象のバケットの「Lifecycle」でオブジェクトの作成日時から一定期間経過したものを「Move to Glacier」する設定をしておくと、S3に比べて1/10の費用でログの長期保存が可能になります。

■td-agent の設定変更

# vi /etc/td-agent/td-agent.conf

type tail
format ltsv
path /var/log/nginx/access.log
tag nginx.access
pos_file /var/log/td-agent/nginx.access.log.pos



type s3
aws_key_id YOUR_AWS_KEY
aws_sec_key YOUR_AWS_SECRET
s3_bucket YOUR_BACKET_NAME
s3_endpoint s3-ap-northeast-1.amazonaws.com
path logs/
buffer_path /var/log/td-agent/buffer/s3
time_slice_format %Y/%m/%d/access_log-%Y%m%d-%H
time_slice_wait 10m

path ディレクティブで格納するバケット内のフォルダを指定、time_slice_formatでフォルダの分け方を制御できるので色々試すと面白いと思います。

また、設定ファイル内にIAMユーザーのクレデンシャルを直接記述する形式になっていますので、外だしにしたい場合は、pitというのが使え、fluentdから使えるプラグインをnaoyaさんが公開しているようです。
※今回は未検証になります。

■td-agent の再起動

# service td-agent stop
# service td-agent status
# service td-agent start

○Route 53 の設定
ここを参考にしてください。

■ヘルスチェックの設定
フェイルオーバーの判定に使用するヘルスチェックを作成します。EC2に割り付けた固定IPで指定しておきます。

■Primary サイトの設定
Primaryサイトは EC2に割り付けた固定IPをAレコードに設定します。

■Secondary サイトの設定
Secondaryサイトは Webサイト機能を有効にしたS3バケットを指定します。

手順としては以上です。ハンズオン資料のためにもう少し詳細な記述と、画面キャプチャを用意して資料化&公開していきたいと思います。

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