Eu configurei um cluster Redis com o Terraform. A configuração é assim:
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
}
Quando eu mudo var.cluster_size
de 2 para 3, eu esperava que o Terraform fizesse a atualização no local. No entanto, esse não é o 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"
Isso também é confirmado na documentação :
num_node_groups - (obrigatório) Especifique o número de grupos de nós (shards) para este grupo de replicação Redis. Alterar esse número forçará um novo recurso.
Atualmente, vejo apenas a opção de usar o Terraform para a implantação inicial e adicionar ou remover shards usando a interface do usuário da AWS, que executará a atualização no local.
Você conhece uma maneira de executar a atualização no local com o Terraform? Ou adicionar fragmentos sem perder o estado do banco de dados simplesmente não é possível com o Terraform no momento?
Talvez seja possível adicionar / remover shards manualmente (por meio da interface do usuário da AWS) e depois importar o novo estado de volta para o Terraform. Tentei executar terraform refresh
, mas ele conseguiu sincronizar completamente o estado. terraform apply
ainda acredita que o recurso precisa ser alterado.
Atualização: O que funciona é simplesmente ignorar a alteração. A atualização de outros recursos do Terraform ainda funciona. No entanto, é um pouco confuso, pois o tamanho do cluster especificado no arquivo Terraform não corresponde ao tamanho real implementado. Você perde a capacidade de examinar a configuração do Terraform e ver exatamente o que está atualmente implantado.
Atualmente, essa é a melhor opção que eu tenho conhecimento.