Terraform - Восстановление записи маршрута53 - PullRequest
1 голос
/ 10 октября 2019

долгое время скрывался первый раз.

Я новичок в использовании terraform и попытался просмотреть документацию, и она недостаточно четко задокументирована для решения моей проблемы.

Сценарий

Я пытаюсь смоделировать событие, когда конечный пользователь случайно удаляет общедоступную зону из маршрута 53, а затем использует terraform для восстановления общедоступной зоны и ее записи. sets.

Issue

Проблема, с которой я сталкиваюсь, заключается в том, что после удаления общедоступной зоны запущенный план terraform выйдет из строя и скажет, что запись route53/ zone не существует, но на самом деле не предлагает мне создать эту новую зону, хотя в настоящее время она управляется terraform.

Обходной путь, который у меня есть, - запустить состояние terraform rm для импортированных объектов, редактируя мой примерФайл .tf, чтобы удалить все наборы записей ресурсов route53, оставив только запись aws_route53_zone без изменений и повторно запустив план terraform. При этом terraform распознает, что это новая общедоступная зона, и создаст новую общедоступную зону. Проблема в том, что это делается в два этапа, и я хотел бы достичь всего этого за один шаг, идеально запустив план terraform один раз, чтобы создать размещенную зону, а затем создать наборы записей в новой зоне.

Текущее рабочее решение - например, .tf

Этот метод требует, чтобы администратор дважды запускал план terraform, и включает в себя редактирование файла example.tf. Сначала удалите существующие наборы записей, которыми управляет terraform, чтобы запустить план terraform для создания общедоступной зоны, которая была случайно удалена.

resource "aws_route53_zone" "example" {
  name = "terraform-test.example.com"
}

Идеальное решение - example.tf

Это решение, которое я задумал, будет работать, но когда я запускаю план terraform, он жалуется наресурс не найден или не объявлен.

# This should create the public hosted zone if it's not existing.
resource "aws_route53_zone" "example" { 
  name         = "terraform-test.example.com"
  private_zone = false
}
# Then it should create the following records under the hosted zone. 
resource "aws_route53_record" "www-terraform-A" {
  name    = "${data.aws_route53_zone.example.name}"
  zone_id = "${data.aws_route53_zone.example.zone_id}"
  type    = "A"
  ttl     = "300"
  records = ["X.X.X.X"]
}

После запуска плана terraform я ожидаю, что terraform распознает, что зона не существует, и он должен предложить мне создать ее, затем записать наборы записей, но это не таксообщение об ошибке я получаю

Error: Reference to undeclared resource

  on terraform-test.servallapps.com.tf line 6, in resource "aws_route53_record" "www-terraform-A":
   6:   name    = "${data.aws_route53_zone.example.name}"

A data resource "aws_route53_zone" "example" has not been declared in the
root module.
...