- 21, Oct 2024
- #1
Я настроил кластер Redis с Terraform. Настройка выглядит следующим образом:
terraform apply
Когда я меняюсь terraform refresh
from 2 to 3, I would have expected that Terraform will perform the update in place. However, that is not the case:
-/+ 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"
Это подтверждается и в документация:
num_node_groups — (Обязательно) Укажите количество групп узлов (осколков) для этой группы репликации Redis. Изменение этого числа приведет к созданию нового ресурса.
В настоящее время я вижу только возможность использовать Terraform для первоначального развертывания, а затем добавлять или удалять сегменты с помощью пользовательского интерфейса AWS, который выполнит обновление на месте.
Знаете ли вы, как выполнить обновление на месте с помощью Terraform?
Или добавление шардов без потери состояния базы данных в Terraform на данный момент просто невозможно? var.cluster_size
, but it does succeed in fully synchronizing the state. 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
}
Возможно, можно добавлять/удалять сегменты вручную (через пользовательский интерфейс AWS), а затем импортировать новое состояние обратно в Terraform. Я пытался бежать
все еще считает, что ресурс нужно менять. Обновлять:
Однако что действительно работает, так это просто игнорировать изменения. Обновление других ресурсов Terraform по-прежнему работает. Однако это немного сбивает с толку, поскольку размер кластера, указанный в файле Terraform, не соответствует фактическому развернутому размеру. После этого вы теряете возможность просмотреть настройку Terraform и увидеть, что именно развернуто в данный момент.
На данный момент это лучший вариант, который мне известен.