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_size
de 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 apply
Todaví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.