StaticPress と Amazon S3 で落ちないWEBサイトを構築する


nullpopopo96x96WordPressはDBが止まるとサイト閲覧ができなくなってしまいますが、staticpressプラグインを使えば静的なhtmlを出力することができ、WEBサーバが生きていればコンテンツを閲覧することができます。

しかし、WEBサイトに普通のWEBサーバを使っても、それが落ちてしまえば意味がありません。静的コンテンツなので、ここは 99.999999999% の堅牢性と、99.99% の可用性を誇る Amazon S3を利用しましょう。あらかじめWordPressをインストールするサーバ(コンテンツ管理サーバ)は別に用意しますが、s3cmdをインストールできればスペックは低くて構いません。

■ s3cmdをインストールする

コンテンツ管理サーバとS3を同期するため、s3cmdをインストールします。CentOS 6.4 にインストールする場合、epelリポジトリからインストールできます。

[ (っ´∀`)っ@友の会 ~]$ sudo yum --enablerepo=epel install s3cmd

s3cmdインストール後、コンフィグウィザードを起動します。あらかじめ、マネジメントコンソールからアクセスキーとシークレットキーを表示させておきましょう。ウィザード中ではこれらをコピペしますが、それ以外の項目はすべてデフォルトのままで空エンターを押下します。

[ (っ´∀`)っ@友の会 ~]$ s3cmd --configure

なお、ホームディレクトリ配下に .s3cfg ファイルができますが、デフォルトのリージョンがUSだったりするので以下のように書き換えます。

bucket_location = US
↓
bucket_location = ap-northeast-1

host_base = s3.amazonaws.com
↓
host_base = s3-ap-northeast-1.amazonaws.com

host_bucket = %(bucket)s.s3.amazonaws.com
↓
host_bucket = %(bucket)s.s3-ap-northeast-1.amazonaws.com

simpledb_host = sdb.amazonaws.com
↓
simpledb_host = sdb.ap-northeast-1.amazonaws.com

■ staticpress プラグインの設定

こちらにて公開されていますが、WordPressの管理画面からstaticpressプラグインを追加して有効化します。設定画面は下の画像のように至ってシンプルです。

sp001

静的サイト URL には、S3で公開したいFQDNを入力します。コンテンツ管理用サーバと同じである必要はありません。

出力先ディレクトリ (ドキュメントルート) は、WEBサーバが書き込み可能な任意のディレクトリを指定します。ドキュメントルートという文言にはなっていますが、WordPressが動いているサイトのドキュメントルートとは必ず別のディレクトリにしてください。

WordPressのその他設定ですが、カテゴリーは日本語ではなくアルファベットにしておきましょう。デフォルトの「未分類」などは変更しておきましょう。また、パーマリンク設定ですが、「/%year%/%monthnum%/%postname%.html」などのように、拡張子を .html にしておきます。

以上の設定ができたら、WordPress管理画面の「StatPress」から再構築ボタンを押下します。

sp002

 

再構築後はご覧のようにhtmlファイルが出力されていることがわかります。

sp003

 

■ S3バケット作成

AWSのマネジメントコンソールからバケットを作成します。ここでは「test.ll4u.in」という名前で解説します。バケットの中に入り、「Properties」から「Static Website Hosting」を開き、「Enable website hosting」を選択します。 index Document には index.html を、 Error Document には 404.html を指定しておきます。

sp004

もう1つ、パーミッションの設定を行うため、「Permissions」から「Edit bucket policy」をクリックします。

sp005

編集画面が表示されるので、以下のように入力しSaveします。

{
	"Version": "2008-10-17",
	"Statement": [
		{
			"Sid": "PublicReadForGetBucketObjects",
			"Effect": "Allow",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::test.ll4u.in/*"
		}
	]
}

最後の行の test.ll4u.in は公開するバケットの名前です。

■ コンテンツ公開

ここまでできたら、s3cmdを使ってバケットにコンテンツをアップロードしましょう。「--acl-public」オプションをつけることで、アップロードされたコンテンツは即時公開されます。

[ (っ´∀`)っ@友の会 ~]$ cd /home/hamada/WEBAPPS/WP002-static
[ (っ´∀`)っ@友の会 ~]$ s3cmd put -r --acl-public $(pwd)/* s3://test.ll4u.in

東京リージョンに「test.ll4u.in」という公開バケットを作成すると、エンドポイント名は「test.ll4u.in.s3-website-ap-northeast-1.amazonaws.com」となります。なので、Route53からCNAMEとしてホストを登録します。エイリアスなし、ルーティングポリシーはSimpleで、TTLもデフォルトの300秒でOKです。それではさっそくブラウザから見てみましょう。

sp006

ご覧のように、 http://test.ll4u.in/ でアクセスすることができました。S3では動的コンテンツとしてホストできないので、コメントをつけたり検索したりできませんが、これらをうまく隠して、あたかも静的コンテンツとしてホストするのであれば、これほど堅牢で格安な方法はないでしょう。コンテンツ管理サーバも、レンタルサーバやvpsではなく、EC2のインスタンスを都度起動停止するようにすると、こちらもコストダウンが可能となります。

 

※ 参考サイト様

StaticPress で書き出した html を S3 でホスティングする | StaticPress
S3: Amazon Linuxにs3cmdをインストールしてコマンドラインでS3を操作する - aws memo
AWS S3 s3cmd で WARNING: Upload failed が出てファイルがアップできない件 - 雑多なインフラエンジニア日記
WordPress サイトを静的 HTML に変換するプラグイン StaticPress | dogmap.jp
WordPress サイトの永代供養 | dogmap.jp
AWS S3 のバケットに独自ドメインを割り当てて、静的ファイルをホスティング | Gatespace's Blog
Amazon S3+CloudFrontでWebサイト公開する (その1) « 東京データネットワーク エンジニアブログ

 

StaticPress と Amazon S3 で落ちないWEBサイトを構築する”に関する1件のコメント

  1. ピングバック

コメントは受け付けていません。