プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Amazon S3 Webホスティング情報をざっくりまとめてみました

 Amazonクラウドのストレージサービスとして有名なAmazon S3ですが、これは単なるストレージサービスにとどまりません。2011年2月よりS3単体で静的なWebサイトの構築が可能になっています。
 S3 Webホスティングで出来ることと出来ないことを簡単にまとめると次のようになります。ノンカスタマイズのWebサーバ(apache等)で出来ることが、ほぼ実現できます。

出来る事

・Index/Error Documentの割り当て
・Webサイト エンドポイントの設定
・アクセスログ
・独自ドメインの割り当て
・CDNとの連動
・アクセス量の応じた自動的なスケール
・Header,Metaタグ等の全てのHTML要素の設定
・権限に応じたアクセス制限

出来ない事

・サーバ側での動的サイトの構築


 使い方は簡単で、S3で任意のバケットを作ります。注意しないといけない点は、独自ドメインの割当をする場合は、バケット名と独自ドメインのFQDNを一致させる必要がある点です。例えば、s3web.example.comというFQDNを割り当てたい場合は、バケット名もs3web.example.comという名前にする必要があります。(これ何とかならないですかね?バケット名は早い者勝ちの世界なので)
 バケットを設定した後は、PropertiesのWebsiteというタブで、Enabledのチェックをするだけです。後はアクセス制限の設定や、インデックス/エラードキュメントの設定を行うだけです。

 アクセス制限については、Permissionsで設定出来ます。Granteeのプルダウンで対象を選択して個別に設定することも可能ですが、Edit bucket policyでJSONで設定することをお薦めします。IP単位等の設定が出来るので、覚えておいて損はなしです。書き方のサンプルは、Example Cases for Amazon S3 Bucket Policies - Amazon Simple Storage Serviceに詳しく書いています。
 下記はサンプルです。s3web.example.comというバケットに対して、192.168.143.0/24のネットワークからのアクセスを許可して、192.168.143.188/32のネットワークからのアクセスを拒否しています。

{
	"Version": "2008-10-17",
	"Id": "",
	"Statement": [
		{
			"Sid": "PublicReadForGetBucketObjects",
			"Effect": "Allow",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::s3web.example.com/*",
        	"Condition" : {
				"IpAddress" : {
					"aws:SourceIp": "192.168.143.0/24" 
				},
				"NotIpAddress" : {
					"aws:SourceIp": "192.168.143.188/32" 
				} 
			} 
		}
	]
}


使い所としては、実はかなりあるのではないでしょうか
・ブログの静的ファイルの吐き出し先
 →WP Static HTML Outputとの組み合わせ
  コンテンツ生成用にAmazon EC2でワードプレスを作って、記事を書く時だけインスタンスを立ち上げたら経済的です。コメントは、Facebookのプラグインで充分ですよね。
・メルマガの画像の置き場
 →HTMLメール等で大量のメルマガを配信する時、画像ファイルの置き場所は頭の痛い問題です。短い期間しか使わないのに、一時期に大量のアクセスがある為にそれなりの備えが必要です。そこをS3 Webホスティングで代用すればリーズナブルです。
・企業サイト
 →企業サイトって、ほとんど静的Webですよね。問い合わせフォームだけ、SalesForce辺りで作ったらいいんじゃないですか?


 HTML+JavaScript+CSSでかなり出来るこのご時世。S3 WebHostingの静的ページをベースに、外部のWebサービス組み合わせてサイト構築というのが流行ってくるのではないでしょうか?是非一度お試しあれ。

See Also:
【AWS発表】 Amazon S3で静的なWebサイトの運用が可能に - Amazon Web Services ブログ
AWSを用いたWebホスティング