我已经使用Terraform设置了Redis集群。设置如下所示:

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
}


当我将var.cluster_size从2更改为3时,我希望Terraform能够就地执行更新。但是,情况并非如此:

-/+ 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 UI添加或删除分片的选项,这将在适当的位置执行更新。

您知道用Terraform执行就地更新的方法吗?
还是现在无法使用Terraform在根本不失去数据库状态的情况下添加分片?

也许可以手动(通过AWS UI)添加/删除分片,并且然后将新状态导入回Terraform。我尝试运行terraform refresh,但是它确实成功地完全同步了状态。 terraform apply仍然认为必须更改资源。

更新:
起作用的只是忽略更改。更新其他Terraform资源仍然有效。但是,这有点令人困惑,因为Terraform文件中指定的群集大小与部署的实际大小不匹配。然后,您失去了查看Terraform设置并准确查看当前部署的功能的能力。

当前,这是我所知道的最佳选择。

#1 楼

您可以创建aws_elasticache_replication_group资源,并使用数据源aws_elasticache_cluster检索实际数量的节点。这样,您不应该编写ignore_changes

#2 楼

幸运的是,情况有所改善,问题不再存在。

Terraform现在支持就地更新分片数量。要引用更新的文档,请执行以下操作:


num_node_groups指定此Redis复制组的节点组(分片)的数量。更改此数字将在其他设置修改之前触发在线调整大小操作。


(之前,更改此数字将强制使用新资源。)