google_cloudsql_mysql/main.tf (151 lines of code) (raw):

/** * # cloudsql-mysql * Creates CloudSQL MySQL Instance. */ locals { default_database_name = "${var.application}-${var.realm}-${var.environment}-${var.instance_version}" database_name = coalesce(var.custom_database_name, local.default_database_name) tier = coalesce(var.tier_override, "db-custom-${var.db_cpu}-${var.db_mem_gb * 1024}") replica_tier = coalesce(var.replica_tier_override, "db-custom-${var.replica_db_cpu}-${var.replica_db_mem_gb * 1024}") replica_region = coalesce(var.replica_region_override, var.region) replica_availability_type = coalesce(var.replica_availability_type_override, var.availability_type) default_replica_name = "${local.database_name}-replica" replica_name = coalesce(var.custom_replica_name, local.default_replica_name) ip_addresses = google_sql_database_instance.primary.ip_address enable_ha = var.realm == "prod" ? true : false replica_enable_private_path_for_google_cloud_services = var.replica_enable_private_path_for_google_cloud_services == false ? false : coalesce(var.replica_enable_private_path_for_google_cloud_services, var.enable_private_path_for_google_cloud_services) } resource "google_sql_database_instance" "primary" { name = local.database_name project = var.project_id region = var.region database_version = var.database_version settings { tier = local.tier availability_type = var.availability_type connector_enforcement = var.connector_enforcement deletion_protection_enabled = var.deletion_protection_enabled disk_type = "PD_SSD" edition = var.edition dynamic "database_flags" { for_each = var.database_flags content { name = lookup(database_flags.value, "name", null) value = lookup(database_flags.value, "value", null) } } backup_configuration { binary_log_enabled = true enabled = true start_time = "20:00" location = "us" backup_retention_settings { retained_backups = 30 retention_unit = "COUNT" } } dynamic "data_cache_config" { for_each = var.edition == "ENTERPRISE_PLUS" ? [1] : [] content { data_cache_enabled = var.data_cache_enabled } } ip_configuration { ipv4_enabled = var.enable_public_ip private_network = var.network ssl_mode = var.ip_configuration_ssl_mode enable_private_path_for_google_cloud_services = var.enable_private_path_for_google_cloud_services dynamic "authorized_networks" { for_each = var.authorized_networks content { expiration_time = lookup(authorized_networks.value, "expiration_time", null) name = lookup(authorized_networks.value, "name", null) value = lookup(authorized_networks.value, "value", null) } } } maintenance_window { day = var.maintenance_window_day hour = var.maintenance_window_hour update_track = var.maintenance_window_update_track } user_labels = { app_code = var.application component_code = format("%s-%s", var.application, var.component) env_code = var.environment realm = var.realm } dynamic "insights_config" { for_each = var.query_insights_enabled == true ? [1] : [] content { query_insights_enabled = var.query_insights_enabled query_plans_per_minute = var.query_plans_per_minute query_string_length = var.query_string_length record_application_tags = var.record_application_tags record_client_address = var.record_client_address } } } deletion_protection = var.deletion_protection } resource "google_sql_database_instance" "replica" { count = var.replica_count name = "${local.replica_name}-${count.index}" project = var.project_id region = local.replica_region database_version = var.database_version master_instance_name = google_sql_database_instance.primary.name replica_configuration { failover_target = "false" } settings { tier = local.replica_tier availability_type = local.replica_availability_type deletion_protection_enabled = var.deletion_protection_enabled edition = var.replica_edition dynamic "database_flags" { for_each = var.database_flags content { # TF-UPGRADE-TODO: The automatic upgrade tool can't predict # which keys might be set in maps assigned here, so it has # produced a comprehensive set here. Consider simplifying # this after confirming which keys can be set in practice. name = lookup(database_flags.value, "name", null) value = lookup(database_flags.value, "value", null) } } dynamic "data_cache_config" { for_each = var.replica_edition == "ENTERPRISE_PLUS" ? [1] : [] content { data_cache_enabled = var.replica_data_cache_enabled } } ip_configuration { ipv4_enabled = var.enable_public_ip private_network = var.network ssl_mode = var.ip_configuration_ssl_mode enable_private_path_for_google_cloud_services = local.replica_enable_private_path_for_google_cloud_services dynamic "authorized_networks" { for_each = var.authorized_networks content { expiration_time = lookup(authorized_networks.value, "expiration_time", null) name = lookup(authorized_networks.value, "name", null) value = lookup(authorized_networks.value, "value", null) } } } user_labels = { app_code = var.application component_code = format("%s-%s", var.application, var.component) env_code = var.environment realm = var.realm } dynamic "insights_config" { for_each = var.query_insights_enabled == true ? [1] : [] content { query_insights_enabled = var.query_insights_enabled query_plans_per_minute = var.query_plans_per_minute query_string_length = var.query_string_length record_application_tags = var.record_application_tags record_client_address = var.record_client_address } } } deletion_protection = var.deletion_protection }