Amazon-Web-Services

如何正確地 Terraform ElastiCache Redis 集群配置?

  • March 20, 2019

我目前正在編寫 Terraform 腳本來配置 ElastiCache Redis 集群。我有以下擔憂。在腳本中,我使用快照名稱從 ElastiCache 單個 Redis 實例恢復數據庫。

我可以啟動一個新的 Redis 集群,但是,當我嘗試從tf腳本中添加更多分片(cluster_mode)時,它需要我再次輸入正確的快照名稱(我有自動備份,這就是為什麼快照名稱經常更改)。如果不匹配,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. 添加更多分片(不詢問快照名稱,因此不破壞集群,只需更改配置)。

謝謝。

lifecycle ignore_changes所以,我用元參數解決了這個問題:

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

我將snapshot_name資源屬性添加到ignore_changes元參數中,並將其保留在那裡,直到我需要從備份中重新排序集群。在這種情況下,我將其從列表中排除。

引用自:https://serverfault.com/questions/956745