us-east-1中的Terraform AWS ACM证书用于eu-west-1中的资源

时间:2018-08-23 14:41:27

标签: 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"
}

在我的模块中,我像这样配置证书:

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的证书”。地形是否在错误的区域中寻找?我通过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都无法找到我的证书,即使它是自己创建的。我在做错什么吗?

1 个答案:

答案 0 :(得分:3)

原来我的问题出在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}"]
}