小编Aar*_*one的帖子

Terraform:创建和验证多个ACM证书

我遇到了一个非常令人困惑的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

5
推荐指数
2
解决办法
3759
查看次数