Сертификаты Terraform AWS ACM в США-Восток-1 для ресурсов в ЕС-Запад-1

У меня есть модуль Terraform, который обеспечивает ресурсы в основном в ЕС-запад-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

Это не с: "Не удалось найти сертификат с идентификатором". Terraform смотрит не в тот регион? Я подтвердил с помощью CLI aws, что сертификат действительно существует (например, нет опечаток в 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
}

Это пытается настроить проверку DNS для ACM. Размещенная зона существует в eu-west-1, поэтому я ожидаю проблем здесь. Тем не менее, это все еще не работает с "Не удалось найти сертификат...", и я предполагаю, что terraform запутался в регионах. Я пытался добавить provider = "aws.us-east-1" на этот ресурс, но он все равно терпит неудачу так же.

Поэтому, независимо от того, что я делаю, Terraform не может найти мой сертификат, даже он сам его создал. Я делаю что-то неправильно?

2 ответа

Решение

Оказывается, моя проблема была с 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}"]
}

Начиная с 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}"]
}

Чтобы избежать такого предупреждения:

Предупреждение: цитируемые ссылки устарели

52: provider = "aws.us-east-1"

В этом контексте ссылки предполагаются буквально, а не в кавычках. Terraform 0.11 и более ранние требовали кавычек, но цитируемые ссылки теперь устарели и будут удалены в будущей версии Terraform. Удалите кавычки вокруг этой ссылки, чтобы отключить это предупреждение.

(и еще одно подобное предупреждение в другом месте)

Для получения дополнительной информации см. Обсуждение примечаний к выпуску на сайте hashicorp: https://discuss.hashicorp.com/t/terraform-0-12-14-released/3898

Другие вопросы по тегам