Я пытаюсь создать ресурс aws_db_instance, используя моментальный снимок, определенный параметром final_snapshot_identifier, в случае, если сценарий terraform уже был запущен, а ресурс существовал ранее и был уничтожен, в результате чего был создан моментальный снимок. Если моментальный снимок не существует (например, если я впервые запускаю скрипт terraform в новой среде), он должен просто создать новую базу данных.
Как мне это сделать? Когда я пытаюсь определить новый источник данных для снимка, он жалуется, что снимок не существует, и останавливается. Действительно, моментального снимка не существует, но я хотел бы, чтобы его отсутствие привело к созданию новой БД.
На самом деле это не поддерживается изначально, но вы можете взломать что-нибудь вместе, используя Внешний источник данных, как в этом Комментарий к проблеме Github по этой теме:
variable "final_snap" {
default = "final_snap_name"
}
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
так создается БД.