terraformでElastiCache Redis Cluster modeをたてる

terrafromでredisを立てる場合、aws_elasticache_clusterを使う方法とaws_elasticache_replication_groupを使う方法がある。

aws_elasticache_clusterの場合ひとつのノード(cluster mode disabled)しか立てられない 。

レプリカを使う場合やCluster modeを使う場合は、aws_elasticache_replication_groupを使うことになる。

cluster_modeブロックの定義とパラメータグループのcluster-mode-enabledを設定することで、Cluster modeのRedisが立ち上がる。

最初パラメータグループの設定に気づかなかったので、かなり時間を溶かしてしまったよね、、

resource "aws_elasticache_replication_group" "main" {
  replication_group_id          = "${var.sysname}-${var.env}"
  replication_group_description = "redis cluster for ${var.sysname} ${var.env}"
  engine_version                = "5.0.6"
  node_type                     = var.node_type
  port                          = 6379
  parameter_group_name          = aws_elasticache_parameter_group.main.id
  subnet_group_name             = aws_elasticache_subnet_group.main.id
  security_group_ids            = [aws_security_group.elasticache.id]
  maintenance_window            = "mon:21:00-mon:22:00"
  snapshot_window               = "20:00-21:00"         
  snapshot_retention_limit      = var.snapshot_retention_limit

  automatic_failover_enabled = true
  auto_minor_version_upgrade = true

  at_rest_encryption_enabled = true
  kms_key_id                 = aws_kms_key.main.arn

  transit_encryption_enabled = false

  apply_immediately = true

  // ここ
  cluster_mode {
    replicas_per_node_group = var.num_cache_replicas
    num_node_groups         = var.num_cache_nodes
  }

  tags = {
    Name    = "${var.sysname}-${var.env}-redis-cluster"
    SysName = var.sysname
    Env     = var.env
  }
}

resource "aws_elasticache_parameter_group" "main" {
  name   = "${var.sysname}-${var.env}-redis-cluster-on"
  family = "redis5.0"

  // ここ
  parameter {
    name  = "cluster-enabled"
    value = "yes"
  }
}

参考

Resource: aws_elasticache_replication_group - terraform Resource: aws_elasticache_cluster - terraform