Terraformを使ってACMのDNS認証を行う

記事タイトルとURLをコピーする

こんにちは、技術1課の岩本です。

AWSを利用する際にAWS発行のSSL証明書を利用する機会も多いと思います。

ACMではSSL証明書の認証のためメールやDNSを用いますが、
マネジメントコンソール、もしくはメール受信などの承認プロセスなどが別途必要となります。

Terraformを用いると、Terraform内だけでACMの承認が行えます。

やってみた

provider "aws" {
    region = "ap-northeast-1"
}

resource "aws_acm_certificate" "cert" {
    domain_name       = "*.iwamoto.example.com."
  validation_method = "DNS"
}

data "aws_route53_zone" "zone" {
    name         = "iwamoto.example.com."
  private_zone = false
}

resource "aws_route53_record" "cert_validation" {
  name    = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_name}"
  type    = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_type}"
  zone_id = "${data.aws_route53_zone.zone.id}"
  records = ["${aws_acm_certificate.cert.domain_validation_options.0.resource_record_value}"]
  ttl     = 60
}

resource "aws_acm_certificate_validation" "cert" {
  certificate_arn         = "${aws_acm_certificate.cert.arn}"
  validation_record_fqdns = ["${aws_route53_record.cert_validation.fqdn}"]
}

解説

  • aws_acm_certificate で対象となるドメイン用のSSL証明書を作成しています。
  • data "aws_route53_zone" とすることで、既存の(同一アカウントのRoute53に存在する)HostedZone名を指定しています。
    • 新規でHostedZoneを作成するのであればresourceと記載します。
  • aws_route53_recordにて、生成された認証用のDNSレコードを追加しています。

参考aws_acm_certificate_validation

まとめ

aws_acm_certificate_validation を使うことで、SSL証明書の作成がTerraform内で完結できます。

ALBなどを作成する際などに、SSLリスナーを作る場合は、事前にSSL証明書の作成などが必要でしたが、

aws_acm_certificate_validationを用いることで、証明書の作成からALBへの割り当てまでを一括で行えるようになります。