В настоящее время я пишу сценарий Terraform для подготовки кластера ElastiCache Redis. Меня беспокоит следующее. В скрипте я использую имя моментального снимка для восстановления базы данных из единственного экземпляра Redis ElastiCache.
Однако я могу развернуть новый кластер Redis, когда пытаюсь добавить к нему больше осколков (cluster_mode) из tf
скрипт требует, чтобы я снова ввел правильное имя снимка (у меня есть автоматическое резервное копирование, поэтому имя снимка часто меняется). Если он не совпадает, Terraform предлагает мне уничтожить существующий кластер и снова создать новый.
resource "aws_elasticache_replication_group" "default" {
replication_group_id = "${var.cluster_id}"
replication_group_description = "Redis cluster for Hashicorp ElastiCache example"
node_type = "cache.m4.large"
port = 6379
parameter_group_name = "default.redis3.2.cluster.on"
snapshot_name = "${var.snapshot_name}"
snapshot_retention_limit = 5
snapshot_window = "00:00-05:00"
subnet_group_name = "${aws_elasticache_subnet_group.default.name}"
automatic_failover_enabled = true
cluster_mode {
replicas_per_node_group = 1
num_node_groups = "${var.node_groups}"
}
}
Можно ли как-то разделить конфигурацию создания кластера и восстановления данных на две конфигурации?
Или не спрашивать меня об имени снимка, если кластер уже подготовлен?
Могу ли я сделать это поле необязательным?
Текущие действия:
Спасибо.
Итак, эту проблему я решил с помощью lifecycle ignore_changes
мета-аргумент:
lifecycle {
ignore_changes = [
"node_type",
"snapshot_name",
]
}
я добавил snapshot_name
атрибут ресурса для ignore_changes
мета-аргумент, и держите его там, пока мне не понадобится повторно удалить кластер из резервной копии. В этом случае я исключаю его из списка.