¿Cómo agregar fragmentos a un clúster de Redis administrado por Terraform sin perder todo el estado?

7

He configurado un clúster de Redis con Terraform. La configuración se ve así:

resource "aws_elasticache_replication_group" "instance" {
  replication_group_id = "test"

  node_type                     = "cache.t2.micro"
  port                          = 6379
  parameter_group_name          = "default.redis3.2.cluster.on"
  subnet_group_name             = "${aws_elasticache_subnet_group.instance.name}"
  security_group_ids            = ["${aws_security_group.instance.id}"]

  cluster_mode {
    replicas_per_node_group = 0
    num_node_groups         = "${var.cluster_size}"
  }

  automatic_failover_enabled = true
  apply_immediately = true
}

Cuando cambio var.cluster_sizede 2 a 3, hubiera esperado que Terraform realizara la actualización en su lugar. Sin embargo, este no es el caso:

-/+ module.groupsign_redis.aws_elasticache_replication_group.instance (new resource required)
  id:                                              "test" => <computed> (forces new resource)
  apply_immediately:                               "true" => "true"
  at_rest_encryption_enabled:                      "false" => "false"
  auto_minor_version_upgrade:                      "true" => "true"
  automatic_failover_enabled:                      "true" => "true"
  cluster_mode.#:                                  "1" => "1"
  cluster_mode.3760271746.num_node_groups:         "" => "3" (forces new resource)
  cluster_mode.3760271746.replicas_per_node_group: "" => "0" (forces new resource)
  cluster_mode.3784625311.num_node_groups:         "2" => "0" (forces new resource)
  cluster_mode.3784625311.replicas_per_node_group: "0" => "0"

Esto también se confirma en la documentación :

num_node_groups - (Obligatorio) Especifique el número de grupos de nodos (fragmentos) para este grupo de replicación de Redis. Cambiar este número forzará un nuevo recurso.

Actualmente, solo veo la opción de usar Terraform para la implementación inicial y luego agregar o eliminar fragmentos utilizando la interfaz de usuario de AWS, que realizará la actualización en el lugar.

¿Conoces una forma de ejecutar la actualización in situ con Terraform? ¿O agregar fragmentos sin perder el estado de la base de datos simplemente no es posible con Terraform en este momento?

Tal vez sea posible agregar / eliminar fragmentos a mano (a través de la interfaz de usuario de AWS) y luego importar el nuevo estado nuevamente en Terraform. Traté de correr terraform refresh, pero logra sincronizar completamente el estado. terraform applyTodavía cree que el recurso tiene que ser cambiado.

Actualización: Sin embargo, lo que sí funciona es simplemente ignorar el cambio. La actualización de otros recursos de Terraform todavía funciona. Sin embargo, es un poco confuso ya que el tamaño del clúster que se especifica en el archivo Terraform no coincide con el tamaño real que se implementa. Luego pierde la capacidad de mirar la configuración de Terraform y ver exactamente lo que se implementa actualmente.

Actualmente, esa es la mejor opción que tengo.

Philipp Claßen
fuente

Respuestas:

1

Puede crear aws_elasticache_replication_grouprecursos y utilizar la fuente de datos aws_elasticache_cluster para recuperar una cantidad real de nodos. De esta manera no deberías escribir ignore_changes.

Anton Babenko
fuente
1

Afortunadamente, la situación ha mejorado y el problema ya no existe.

Terraform admite actualizaciones en el lugar de la cantidad de fragmentos ahora. Para citar de la documentación actualizada :

num_node_groupsEspecifique el número de grupos de nodos (fragmentos) para este grupo de replicación de Redis. Cambiar este número activará una operación de cambio de tamaño en línea antes de otras modificaciones de configuración.

(Antes, terminaba con Cambiar este número forzaría un nuevo recurso ) .

Philipp Claßen
fuente