resource "aws_kms_key" "kms" {
  for_each                = local.serverless_cache_instances
  description             = each.value.name
  enable_key_rotation     = true
  deletion_window_in_days = 30
  policy                  = data.aws_iam_policy_document.elasticache.json
}

resource "aws_kms_alias" "alias" {
  for_each      = local.serverless_cache_instances
  name          = "alias/${each.value.name}"
  target_key_id = aws_kms_key.kms[each.value.name].id
}

module "serverless_elasticache" {
  source = "terraform-aws-modules/elasticache/aws//modules/serverless-cache"

  for_each    = local.serverless_cache_instances
  engine      = each.value.engine
  cache_name  = each.value.name
  description = each.value.name

  cache_usage_limits = {
    data_storage = {
      minimum = each.value.data_storage_minimum
      maximum = each.value.data_storage_maximum
      unit    = "GB"
    }
    ecpu_per_second = {
      minimum = each.value.ecpu_per_second_minimum
      maximum = each.value.ecpu_per_second_maximum
    }
  }

  daily_snapshot_time  = each.value.snapshot_window
  kms_key_id           = aws_kms_key.kms[each.value.name].arn
  major_engine_version = each.value.major_engine_version
  security_group_ids   = each.value.security_group_ids

  snapshot_retention_limit = each.value.snapshot_retention_limit
  subnet_ids               = each.value.subnet_ids

  tags = merge(var.service_tags, {
    Name = each.value.name
  })

}
