google_redis/main.tf (56 lines of code) (raw):

/** * # Terraform Module: Redis * Creates a Redis instance within GCP using Cloud Memorystore */ locals { default_name = "${var.application}-${var.realm}-${var.environment}" name = coalesce(var.custom_name, local.default_name) default_redis_configs = { activedefrag : "yes" } redis_configs = merge(local.default_redis_configs, var.redis_configs) } resource "google_project_service" "redis" { project = var.project_id disable_on_destroy = "false" service = "redis.googleapis.com" } resource "google_redis_instance" "main" { project = var.project_id authorized_network = var.authorized_network depends_on = [google_project_service.redis] name = local.name memory_size_gb = var.memory_size_gb redis_configs = local.redis_configs redis_version = var.redis_version region = var.region tier = var.tier transit_encryption_mode = var.transit_encryption_mode auth_enabled = var.auth_enabled connect_mode = "PRIVATE_SERVICE_ACCESS" # Used for shared VPC access https://cloud.google.com/memorystore/docs/redis/networking dynamic "persistence_config" { for_each = var.enable_persistence ? [1] : [] content { persistence_mode = "RDB" rdb_snapshot_period = "ONE_HOUR" } } maintenance_policy { weekly_maintenance_window { day = var.maintenance_window_day start_time { hours = var.maintenance_window_hour minutes = 0 seconds = 0 nanos = 0 } } } labels = { app_code = var.application component_code = format("%s-%s", var.application, var.component) env_code = var.environment realm = var.realm } lifecycle { prevent_destroy = true } }