やりたいこと
www.共円.net
で、あるhtmlが返却されるように設定する。
事前準備
お名前.comでドメインを取得。
Terraformの設定
main.tf
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_route53_zone" "kyouen-net" {
name = "xn--b6qvb.net"
}
resource "aws_s3_bucket" "main" {
bucket = "www.xn--b6qvb.net"
acl = "public-read"
policy = <<EOF
{"Statement":[{"Action":"s3:GetObject","Effect":"Allow","Principal":"*","Resource":"arn:aws:s3:::www.xn--b6qvb.net/*","Sid":"PublicReadForGetBucketObjects"}],"Version":"2012-10-17"}
EOF
website {
index_document = "index.html"
error_document = "error.html"
}
}
resource "aws_route53_record" "www" {
zone_id = "${aws_route53_zone.kyouen-net.zone_id}"
name = "www.xn--b6qvb.net"
type = "A"
alias {
name = "${aws_s3_bucket.main.website_domain}"
zone_id = "${aws_s3_bucket.main.hosted_zone_id}"
evaluate_target_health = true
}
}
output "name_servers.0" {
value = "${aws_route53_zone.kyouen-net.name_servers.0}"
}
output "name_servers.1" {
value = "${aws_route53_zone.kyouen-net.name_servers.1}"
}
output "name_servers.2" {
value = "${aws_route53_zone.kyouen-net.name_servers.2}"
}
output "name_servers.3" {
value = "${aws_route53_zone.kyouen-net.name_servers.3}"
}
aws_route53_zone
zoneの設定を行います。
Punycode表記のドメイン名を、name属性として与えます。
aws_s3_bucket
Static Website Hostingが出来るように設定します。
policy部分は、1度実行した後のterraform.tfstate
から持ってきました。
(JSONのキー・値が一致してても、文字列として違ってたら変更ありとされるっぽい)
aws_route53_record
作成したzoneや、S3 bucketの情報を元に、
www.共円.net
というドメインで、同名のS3 bucketにアクセスできるようになります。
Terraformの実行
計画の確認をします。
terraform plan
実行します。
terraform apply
数分待っていると、下記のようにname serverが出力されます。
Outputs:
name_servers.0 = ns-NNNN.awsdns-NN.org
name_servers.1 = ns-NNNN.awsdns-NN.co.uk
name_servers.2 = ns-NNNN.awsdns-NN.com
name_servers.3 = ns-NNNN.awsdns-NN.net
name serverの設定
お名前.comのネームサーバー変更画面にて、Terraformで出力されたネームサーバのドメイン名を設定する。
S3にファイルを配置、確認する。
Management Consoleとかでさくっとテキトーなindex.html
を配置する。
http://www.共円.net/ でアクセスできればOK。
感想
取得した独自ドメインで、静的ファイルを簡単にホスティング出来ました。
S3なので、下手なVPSとかIaaS使うよりは安く・高い信頼性で配信できます。
また、Terraformで構築しているので、再現性が高く、破棄も一瞬で出来ます。