Веб-Сервисы Amazon. Как Добавить Сегменты В Кластер Redis, Управляемый Terraform, Без Потери Всего Состояния?

  • Автор темы Ooleg77
  • Обновлено
  • 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 и увидеть, что именно развернуто в данный момент.

На данный момент это лучший вариант, который мне известен.

Ooleg77


Рег
12 May, 2006

Тем
79

Постов
181

Баллов
586
  • 25, Oct 2024
  • #2

Вы можете создать num_node_groups resource and use data source aws_elasticache_cluster для получения фактического количества узлов. Таким образом, вы не должны писать ignore_changes .

 

Deamond1


Рег
14 Apr, 2007

Тем
81

Постов
208

Баллов
623
  • 25, Oct 2024
  • #3

К счастью, ситуация улучшилась и проблемы больше не существует.

Terraform теперь поддерживает обновление количества шардов на месте. Цитирую обновленный документация:

aws_elasticache_replication_group Specify the number of node groups (shards) for this Redis replication group. Changing this number will trigger an online resizing operation before other settings modifications.

(Раньше это заканчивалось Изменение этого числа приведет к созданию нового ресурса.)

 

Lyap4uk


Рег
16 Mar, 2014

Тем
75

Постов
192

Баллов
587
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно