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

Как правильно терраформировать подготовку кластера ElastiCache Redis?

В настоящее время я пишу сценарий 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}"
  }
}   

Можно ли как-то разделить конфигурацию создания кластера и восстановления данных на две конфигурации?

Или не спрашивать меня об имени снимка, если кластер уже подготовлен?

Могу ли я сделать это поле необязательным?

Текущие действия:

  1. Создать кластер Redis с указанным снимком;
  2. Добавьте больше осколков (имя снимка не запрашивается, поэтому кластер не уничтожается, только изменение конфигурации).

Спасибо.

Итак, эту проблему я решил с помощью lifecycle ignore_changes мета-аргумент:

lifecycle {
  ignore_changes = [
    "node_type",
    "snapshot_name",
  ]
}

я добавил snapshot_name атрибут ресурса для ignore_changes мета-аргумент, и держите его там, пока мне не понадобится повторно удалить кластер из резервной копии. В этом случае я исключаю его из списка.