Назад | Перейти на главную страницу

Terraform - создать ресурс aws_db_instance из снимка, если снимок существует, иначе создать новую базу данных, если снимок не существует.

Я пытаюсь создать ресурс aws_db_instance, используя моментальный снимок, определенный параметром final_snapshot_identifier, в случае, если сценарий terraform уже был запущен, а ресурс существовал ранее и был уничтожен, в результате чего был создан моментальный снимок. Если моментальный снимок не существует (например, если я впервые запускаю скрипт terraform в новой среде), он должен просто создать новую базу данных.

Как мне это сделать? Когда я пытаюсь определить новый источник данных для снимка, он жалуется, что снимок не существует, и останавливается. Действительно, моментального снимка не существует, но я хотел бы, чтобы его отсутствие привело к созданию новой БД.

На самом деле это не поддерживается изначально, но вы можете взломать что-нибудь вместе, используя Внешний источник данных, как в этом Комментарий к проблеме Github по этой теме:

Задайте окончательное имя снимка

variable "final_snap" {
  default = "final_snap_name"
}

Используйте внешний источник данных и aws cli, чтобы узнать, существует ли моментальный снимок.

data "external" "snapshot_exists" {
  program = ["bash", "-c", "if [ ! -z \"$(aws rds describe-db-snapshots --db-snapshot-identifier ${var.final_snap} | jq .DBSnapshots)\" ]; then echo '{\"SnapshotExists\": \"true\"}' | jq '.'; else echo '{\"SnapshotExists\": \"false\"}' | jq '.'; fi"]
}

Теперь используйте условный чтобы решить, создавать ли БД

resource "aws_db_instance" "foo" {
  count    = "${data.external.snapshot_exists.result.SnapshotExists == "false" ? 0 : 1}"
  ...
}

Если предыдущий внешний источник данных вернулся false затем установите счет на 0, поэтому ничего не создавая. Если нет, то установите его на 1 так создается БД.