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复制组的节点组(分片)的数量。更改此数字将在其他设置修改之前触发在线调整大小操作。(之前,更改此数字将强制使用新资源。)