こんにちは、技術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
と記載します。
- 新規でHostedZoneを作成するのであれば
aws_route53_record
にて、生成された認証用のDNSレコードを追加しています。
参考 : aws_acm_certificate_validation
まとめ
aws_acm_certificate_validation
を使うことで、SSL証明書の作成がTerraform内で完結できます。
ALBなどを作成する際などに、SSLリスナーを作る場合は、事前にSSL証明書の作成などが必要でしたが、
aws_acm_certificate_validation
を用いることで、証明書の作成からALBへの割り当てまでを一括で行えるようになります。