Chr*_*sen 3 amazon-web-services terraform amazon-acm
我有一个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"
}
Run Code Online (Sandbox Code Playgroud)
在我的模块中,我像这样配置证书:
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
}
}
Run Code Online (Sandbox Code Playgroud)
问题1:我尝试使用以下方法导入现有的ACM证书:
terraform import module.mymod.aws_acm_certificate.cert arn:aws:acm:us-east-1:xyz:certificate/uuid
Run Code Online (Sandbox Code Playgroud)
失败并显示:“找不到ID为证书的证书”。地形是否在错误的区域中寻找?我通过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
}
Run Code Online (Sandbox Code Playgroud)
这将尝试为ACM设置DNS验证。托管区域位于eu-west-1中,因此我在这里遇到问题。但是,这仍然会失败,并显示“找不到证书...”,我假设terraform对区域感到困惑。我也尝试添加provider = "aws.us-east-1"
到该资源,但是仍然失败。
因此,无论我做什么,Terraform都无法找到我的证书,即使它本身已经创建了它。难道我做错了什么?
原来我的问题是aws_acm_certificate_validation
。通过在与证书相同的区域中指定提供者,可以解决所有问题。
resource "aws_acm_certificate_validation" "cert" {
provider = "aws.us-east-1" # <== Add this
certificate_arn = "${aws_acm_certificate.cert.arn}"
validation_record_fqdns = ["${aws_route53_record.cert_validation.fqdn}"]
}
Run Code Online (Sandbox Code Playgroud)
小智 7
自 Terraform 0.12.14 起,引用的引用已被弃用。因此,如果您使用的版本 >= 0.12.14 或 Terraform 1.x,上面接受的答案应该是这样的
resource "aws_acm_certificate_validation" "cert" {
provider = aws.us-east-1 # <== Add this without quotes
certificate_arn = "${aws_acm_certificate.cert.arn}"
validation_record_fqdns = ["${aws_route53_record.cert_validation.fqdn}"]
}
Run Code Online (Sandbox Code Playgroud)
为了避免出现这样的警告:
警告:引用的参考文献已被弃用
52:提供商=“aws.us-east-1”
在这种情况下,引用应该按字面意思而不是用引号引起来。Terraform 0.11 及更早版本需要引用,但引用的引用现已弃用,并将在 Terraform 的未来版本中删除。删除此引用周围的引号以消除此警告。
(以及其他地方的另一个类似警告)
有关更多信息,请参阅 hashicorp 上的发行说明讨论:https://discuss.hashicorp.com/t/terraform-0-12-14-released/3898
归档时间: |
|
查看次数: |
1327 次 |
最近记录: |