【发布时间】:2019-01-29 23:42:15
【问题描述】:
我有一个 terraform 模块,主要在 eu-west-1 中提供资源。我需要一个 ACM 证书才能附加到 Cloudfront 发行版。证书必须在 us-east-1 中提供。
我因此配置了两个提供程序:
provider "aws" {
version = "~> 1.0"
region = "eu-west-1"
}
provider "aws" {
version = "~> 1.0"
region = "us-east-1"
alias = "us-east-1"
}
在我的模块中,我像这样提供证书:
resource "aws_acm_certificate" "cert" {
provider = "aws.us-east-1"
domain_name = "${var.domain_name}"
validation_method = "DNS"
tags = "${var.tags}"
lifecycle {
create_before_destroy = true
}
}
问题 #1:我尝试使用以下方法导入现有 ACM 证书:
terraform import module.mymod.aws_acm_certificate.cert arn:aws:acm:us-east-1:xyz:certificate/uuid
这失败了:“找不到带有 id 的证书”。 terraform 是否在错误的区域中寻找?我通过 aws CLI 确认证书确实存在(例如 ARN 中没有拼写错误)。
好的,所以我想我可以创建新证书。这确实有效,我现在有两个证书,但是我遇到了问题 #2:
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
}
这会尝试为 ACM 设置 DNS 验证。托管区域存在于 eu-west-1 中,所以我预计这里会出现问题。但是,这仍然因“找不到证书......”而失败,我假设 terraform 对区域感到困惑。我也尝试将provider = "aws.us-east-1" 添加到此资源中,但仍然以同样的方式失败。
所以,无论我做什么,Terraform 都无法找到我的证书,即使它自己创建了它。我是不是做错了什么?
【问题讨论】:
-
Route53 托管区域是全球性的,而不是区域性的,所以我认为你在那里混淆了一些东西。看起来您可能有很多事情正在发生使这种情况感到困惑,因此可能值得尝试制作一个最小的复制案例,您只需尝试创建 ACM 证书、R53 记录和验证并编辑您的问题以仅显示代码并提供您遇到的确切错误,以便人们可以跟进。
-
另外值得注意的是,
id并不总是 arn 并且很少记录。值得尝试其他唯一标识符,例如名称。
标签: amazon-web-services terraform amazon-acm