AWSの静的ウェブサイトのウェブホスティングとは
静的ウェブサイトを Amazon Simple Storage Service (Amazon S3) でホスティングできます。
つまり、静的コンテンツであれば、S3に配置することでEC2などのサーバーを管理することなく、ウェブサイトが公開可能。
ということで、TerraformでS3のウェブホスティングを構築したのでまとめる。
TerraformでAWSにアクセスして、S3のバケットを作成したり、更新したりできる権限がある前提。
今回は外部へ公開しない前提で作る。
bucketの作成
resource "aws_s3_bucket" "website_hosting_inamuu_com" {
bucket = "website-hosting.inamuu.com"
acl = "public-read"
policy = "${file("files/s3/policy/website_hosting_inamuu.com.json")}"
website {
index_document = "index.html"
error_document = "error.html"
}
}
これだけでwebホスティングとして公開するバケットを作成できる
なお、ポリシーの箇所は人によってはヒアドキュメントを使って書くことも可能。※ファイルが長くなってしまうので私は今のところはポリシー用のファイルはリソースと分けるようにしている。
また、SPAとかで公開していると、別のURLになったときにindex.htmlを見に行かないので、エラーになったりする。
その場合は error_documentもindex.htmlにすることで回避できる。
ポリシーは下記の通り。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::web-hosting.inamuu.com/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"X.X.X.X",
"X.X.X.X"
]
}
}
}
]
}
接続元のIPアドレス制限をするのでConditionを指定しているが、もしIP制限をしなければそこを削除するだけで良い。
これだけでとても簡単に構築することができる。
なお、例えば hogehoge.com にAliasとしてRoute53で割当をしたい場合、hogehoge.com というバケット名にしないと設定できないので注意が必要。
Terraformでかなり簡単に作成することができた。
今後もs3バケットは作成することが多々あると思うので、活用していきたい。
<p style='padding: 5px;'>