Como adicionar shards a um cluster Redis gerenciado pelo Terraform sem perder todo o estado?

7

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_sizede 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 applyainda 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.

Philipp Claßen
fonte

Respostas:

1

Você pode criar aws_elasticache_replication_grouprecursos e usar a fonte de dados aws_elasticache_cluster para recuperar uma quantidade real de nós. Dessa forma, você não deve escrever ignore_changes.

Anton Babenko
fonte
1

Felizmente, a situação melhorou e o problema não existe mais.

O Terraform agora suporta atualizações no local do número de shards. Para citar a documentação atualizada :

num_node_groupsEspecifique o número de grupos de nós (shards) para este grupo de replicação do Redis. A alteração desse número acionará uma operação de redimensionamento on-line antes de outras modificações nas configurações.

(Antes, terminava com Alterar este número forçaria um novo recurso. )

Philipp Claßen
fonte