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_size
von 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 apply
glaubt 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.