Amazon S3で激安Webサイト運用(CDP No.19 Direct Hostingパターン)

クラウドデザインパターンhttp://aws.clouddesignpattern.org/が書籍になりました。

今日はそのうち、No.19として掲載されている「Direct Hostingパターン」を試しました。

ログイン認証やページの動的生成をしない静的なWebサイトのコンテンツをS3のストレージから直接Webサーバを介して配信するパターンです。

AWSの機能としては比較的新しく、2011年2月から提供されているS3の機能です。

      • -

AWS News Blog

      • -

私が作成したyoshidashingoを例にして手順を以下に記載します。
※内容はつっこまないでください。手書きですから。


/* ここからレジストラ(お名前.comなど)での作業 */

(1) ドメインを取得する
今回は「yoshidashingo.com」を取得しました。


/* ここからS3 Management Consoleでの作業 */

(2) バケットを作成する
以下2点の制約からドメイン名ではなくFQDN(www.yoshidashingo.comなど)でバケット名を指定する必要があります。

  • DNSの一般的な制約:CNAMEにドメインのルート名(yoshidashingo.com)は登録できない。

 ※お名前.comのDNSもAmazon Route53も同様。
 ※ELBを使えばできるらしいが今回は考慮しない。

  • S3の制約:FQDNとバケット名が同一である必要がある。

私の場合は「www.yoshidashingo.com」を東京リージョンに作成しました。

(3) indexドキュメント(通常はindex.html)をバケットにアップロードする。

(4) バケットのプロパティでWebsiteをEnabledにし、indexドキュメント名を指定する
※404エラー表示をカスタマイズしたい場合はエラードキュメント(通常は404.html)を指定可能。

(5) PermissionsタブでAdd Bucket Policyをクリックし、以下のようにバケットのファイルに対する他者への参照権限を設定する。※以下の例のyour-s3-website.com部分は当該バケット名を指定する

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


/* ここからDNSへの作業 */

(6) DNSのCNAMEレコードを編集する
DNSのCNAMEレコードを以下の例のように編集します。
※お名前.comのDNSを利用している場合は「レンタルDNSレコード設定」

  • ホスト名:www
  • 種別:CNAME
  • 値:www.yoshidashingo.com.s3-website-ap-northeast-1.amazonaws.com

※s3.〜.comはバケットのリージョンによって違う。
※バケットのリージョン(s3-website-ap-northeast-1.amazonaws.com)の指定だけでもOKらしい。


/* ここからPCで確認作業 */

www.yoshidashingo.com にWebアクセスし www.yoshidashingo.com.s3-website-ap-northeast-1.amazonaws.com に転送されることを確認する
※ファイルのエンドポイントURLとは構造が違う。


気になる料金ですが、「東京リージョン/通常(冗長)ストレージ」で

  • ホスティングするデータ容量が$0.130 /GB
  • リクエスト数が10,000GETリクエストで $0.01
  • データ転送(OUT)が1GBまで無料、以降は1TBまで $0.201 /GB

ということで最安の場合、毎月$0.14(11円くらい)でWebサイトをホスティングできます。

静的なコンテンツの多い企業のHPや、アクセスは少ないけど公開停止するには惜しいサイトの保存(永代供養と呼ばれている)なんかに使われてるらしいですよ。


#2012.08.18追記
(5)でバケットにアップロードするファイルのパーミッションを新規アップロードファイルごとに設定するのはナンセンスであり、バケットポリシーの設定で管理者意外のユーザが参照のみ可能とする設定方法に変更しました。

#2012.08.18追記
スライドにしてみました。