web-dev-qa-db-ja.com

ElastiCache Redisクラスターのプロビジョニングを適切に行う方法

現在、ElastiCache RedisクラスターをプロビジョニングするTerraformスクリプトを書いています。次のような懸念があります。スクリプトでは、スナップショット名を使用して、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}"
  }
}   

クラスター作成とデータ復元の構成を何らかの方法で2つの構成に分割することは可能ですか?

または、クラスターがすでにプロビジョニングされている場合は、スナップショット名を尋ねるのをスキップしますか?

このフィールドをオプションにすることはできますか?

現在のアクション:

  1. 指定したスナップショットでRedisクラスターを作成します。
  2. さらにシャードを追加します(スナップショット名は要求されないため、クラスターは破棄されず、構成が変更されます)。

ありがとう。

だから、私はlifecycle ignore_changesメタ引数で解決したこの問題:

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

snapshot_nameリソース属性をignore_changesメタ引数に追加し、バックアップからクラスターを再ソートする必要があるまで保持します。この場合、リストから除外します。