run/terraform/network.tf (97 lines of code) (raw):

/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ module "gcp_network" { source = "terraform-google-modules/network/google" version = ">= 7.5" project_id = var.google_cloud_run_project network_name = local.network_name subnets = [ { subnet_name = local.subnet_name subnet_ip = "10.0.0.0/24" subnet_region = var.google_cloud_default_region subnet_private_access = true }, ] ingress_rules = [ { name = "${local.network_name}-allow-ssh-ingress-from-iap", description = "Allow traffic from IAP", priority = 1000, source_ranges = ["35.235.240.0/20"], allow = [ { protocol = "tcp", ports = ["22"], }, ], }, { name = "${local.network_name}-allow-internal" description = "Allow internal traffic on the network", source_ranges = ["10.0.0.0/24"], allow = [ { protocol = "tcp", ports = ["0-65535"], }, { protocol = "udp", ports = ["0-65535"], }, { protocol = "icmp", }, ], }, ] } resource "google_compute_address" "default" { project = var.google_cloud_run_project name = "${google_sql_database_instance.default.name}-address" region = var.google_cloud_default_region subnetwork = module.gcp_network.subnets_names[0] address_type = "INTERNAL" } resource "google_compute_forwarding_rule" "default" { project = var.google_cloud_run_project name = "${google_sql_database_instance.default.name}-forwarding-rule" region = var.google_cloud_default_region network = module.gcp_network.network_name ip_address = google_compute_address.default.self_link target = google_sql_database_instance.default.psc_service_attachment_link load_balancing_scheme = "" } resource "google_dns_managed_zone" "psc" { project = var.google_cloud_run_project name = "${google_sql_database_instance.default.name}-zone" dns_name = "${google_sql_database_instance.default.region}.sql.goog." description = "Regional zone for Cloud SQL PSC instances" visibility = "private" private_visibility_config { networks { network_url = module.gcp_network.network_id } } } resource "google_dns_record_set" "psc" { project = var.google_cloud_run_project name = google_sql_database_instance.default.dns_name type = "A" ttl = 300 managed_zone = google_dns_managed_zone.psc.name rrdatas = [google_compute_address.default.address] }