この個人サイトを構築するにあたって、どのようにしたかメモ及び最初のポストとして。

まずこのサイトのドメインを取得した。ドメインはどこのプロバイダから取得してもいいが、今回はDNSとしてAWS Route53を使おうと思っていたので、ドメインもRoute53から取得。

DNSのCNAME設定などはすべてTerraformで。コードはこんな感じ。

data "aws_route53_zone" "selected" {
  name         = "masatomoito.com."
  private_zone = false
}

resource "aws_route53_record" "www" {
  zone_id = data.aws_route53_zone.selected.zone_id
  name    = "www"
  type    = "CNAME"
  ttl     = "5"

  records = ["masa-org.github.io"]
}

resource "aws_route53_record" "media" {
  zone_id = data.aws_route53_zone.selected.zone_id
  name    = "media"
  type    = "CNAME"
  ttl     = "5"

  records = ["www.masatomoito.com"] # <-- Note this points to www

}

aws_route53_recordを二つ作っているがは一つはwww(www.masatomoito.com)とApex(masatomoito.com)のもので、もう一つはサブドメインのmedia.masatomoito.comのためのもの。

mediaの方のCNAMEがwwwの方を指していることに注目。ここで依存関係があるので、terraformdepends_onとかで依存を明示したくなるが、ここで行うのはCNAMEの登録だけなので特に依存は気にしなくてよい。

で、実際のコンテンツはgithub pagesで作成。GithubのRepo自体はマニュアルで作成した。TerraformGitHub providerで作成することもできるが、そうすると間違ってdestroyとかしちゃうとRepoごと削除されちゃうのでterraformで管理しないほうがいいと判断。lifecycleprevent_destroyにすることでも回避できるが、なんかめんどい。

ただ、Github providerData sourceを使うことで情報は参照できる。こんな感じ。

data "github_repository" "www" {
  full_name = "masa-org/masa-org.github.io"
}

data "github_repository" "media" {
  full_name = "masa-org/media-masatomoito"
}

Terraform便利だなぁ。