我遇到了一个非常令人困惑的Terraform资源问题,它会自动生成ACM中(由Terraform管理的)托管区域列表的SSL证书的生成和DNS验证。代码也可以在这个要点中找到。
我首先通过引导托管区域来引用此特定于环境的变量。
hosted_zones = [
{
domain = "site1.com"
zone_id = "MANUALLY FILL"
}
]
Run Code Online (Sandbox Code Playgroud)
我用来构建区域的块似乎工作可靠。
resource "aws_route53_zone" "zones" {
count = "${length(var.hosted_zones)}"
name = "${lookup(var.hosted_zones[count.index], "domain")}"
}
Run Code Online (Sandbox Code Playgroud)
在构建区域之后,由于HCL的局限性以及我缺乏经验,因此我没有想出一种自动的方法来自动将区域ID复制到变量中。
我可以使用...为每个托管区域可靠地生成裸证书和splat证书。
resource "aws_acm_certificate" "cert" {
count = "${length(var.hosted_zones)}"
domain_name = "${lookup(var.hosted_zones[count.index], "domain")}"
subject_alternative_names = ["*.${lookup(var.hosted_zones[count.index], "domain")}"]
validation_method = "DNS"
tags {
Project = "${var.project}"
Environment = "${var.environment}"
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试自动执行证书的DNS验证时,事情变得很繁琐。文档中有一个很好的示例,用于单个托管区域,但是我无法将其成功移植到多个托管区域。我的尝试
resource "aws_route53_record" "cert_validation" {
count = "${length(var.hosted_zones)}"
name = "${aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_name[count.index]}"
type = "${aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_type[count.index]}"
zone_id = …Run Code Online (Sandbox Code Playgroud) ssl-certificate amazon-web-services amazon-route53 terraform aws-certificate-manager
terraform ×1