Wie füge ich einem von Terraform verwalteten Redis-Cluster Shards hinzu, ohne den gesamten Status zu verlieren?

7

Ich habe mit Terraform einen Redis-Cluster eingerichtet. Das Setup sieht folgendermaßen aus:

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
}

Wenn ich var.cluster_sizevon 2 auf 3 wechsle , hätte ich erwartet, dass Terraform das Update an Ort und Stelle durchführt. Dies ist jedoch nicht der Fall:

-/+ 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"

Dies wird auch in der Dokumentation bestätigt :

num_node_groups - (Erforderlich) Geben Sie die Anzahl der Knotengruppen (Shards) für diese Redis-Replikationsgruppe an. Durch Ändern dieser Nummer wird eine neue Ressource erzwungen.

Derzeit wird nur die Option angezeigt, Terraform für die Erstbereitstellung zu verwenden und dann Shards mithilfe der AWS-Benutzeroberfläche hinzuzufügen oder zu entfernen, um das Update an Ort und Stelle durchzuführen.

Kennen Sie eine Möglichkeit, das direkte Update mit Terraform auszuführen? Oder ist das Hinzufügen von Shards ohne Verlust des Datenbankstatus mit Terraform derzeit einfach nicht möglich?

Möglicherweise ist es möglich, Shards von Hand (über die AWS-Benutzeroberfläche) hinzuzufügen / zu entfernen und dann den neuen Status wieder in Terraform zu importieren. Ich habe versucht, es auszuführen terraform refresh, aber es gelingt mir, den Status vollständig zu synchronisieren. terraform applyglaubt immer noch, dass die Ressource geändert werden muss.

Update: Was jedoch funktioniert, ist, die Änderung einfach zu ignorieren. Das Aktualisieren anderer Terraform-Ressourcen funktioniert weiterhin. Dies ist jedoch etwas verwirrend, da die in der Terraform-Datei angegebene Clustergröße nicht mit der tatsächlich bereitgestellten Größe übereinstimmt. Sie verlieren dann die Möglichkeit, sich das Terraform-Setup anzusehen und genau zu sehen, was aktuell bereitgestellt wird.

Derzeit ist dies die beste Option, die ich habe.

Philipp Claßen
quelle

Antworten:

1

Sie können eine aws_elasticache_replication_groupRessource erstellen und die Datenquelle aws_elasticache_cluster verwenden , um eine tatsächliche Anzahl von Knoten abzurufen. Auf diese Weise sollten Sie nicht schreiben ignore_changes.

Anton Babenko
quelle
1

Glücklicherweise hat sich die Situation verbessert und das Problem besteht nicht mehr.

Terraform unterstützt jetzt direkte Aktualisierungen der Anzahl der Shards. Um aus der aktualisierten Dokumentation zu zitieren :

num_node_groupsGeben Sie die Anzahl der Knotengruppen (Shards) für diese Redis-Replikationsgruppe an. Durch Ändern dieser Nummer wird ein Online-Größenänderungsvorgang ausgelöst, bevor andere Einstellungen geändert werden.

(Vorher endete es mit dem Ändern dieser Nummer, wodurch eine neue Ressource erzwungen wird. )

Philipp Claßen
quelle