如何正确地对 Terraform ElastiCache Redis 集群进行配置?

如何正确地对 Terraform ElastiCache Redis 集群进行配置?

我目前正在编写 Terraform 脚本来配置 ElastiCache Redis 集群。我有以下担忧。在脚本中,我使用快照名称从 ElastiCache 单个 Redis 实例恢复数据库。

我可以启动一个新的 Redis 集群,但是,当我尝试从脚本向其添加更多分片(cluster_mode)时tf,它要求我再次输入正确的快照名称(我有自动备份,这就是快照名称经常更改的原因)。如果不匹配,Terraform 建议我销毁现有集群并再次创建一个新集群。

resource "aws_elasticache_replication_group" "default" {
  replication_group_id          = "${var.cluster_id}"
  replication_group_description = "Redis cluster for Hashicorp ElastiCache example"

  node_type            = "cache.m4.large"
  port                 = 6379
  parameter_group_name = "default.redis3.2.cluster.on"

  snapshot_name = "${var.snapshot_name}"
  snapshot_retention_limit = 5
  snapshot_window          = "00:00-05:00"

  subnet_group_name = "${aws_elasticache_subnet_group.default.name}"

  automatic_failover_enabled = true

  cluster_mode {
    replicas_per_node_group = 1
    num_node_groups         = "${var.node_groups}"
  }
}   

是否可以以某种方式将集群创建和数据恢复的配置分成两个配置?

或者,如果集群已经配置好,则跳过询问我快照名称?

我可以将这个字段设为可选字段吗?

当前行动:

  1. 使用指定快照创建Redis集群;
  2. 添加更多分片(不需要快照名称,因此不会破坏集群,只需更改配置)。

谢谢。

答案1

因此,我用lifecycle ignore_changes元论证解决了这个问题:

lifecycle {
  ignore_changes = [
    "node_type",
    "snapshot_name",
  ]
}

我将snapshot_name资源属性添加到ignore_changes元参数中,并保留它,直到我需要从备份中恢复集群。在这种情况下,我将其从列表中排除。

相关内容