modules/apigee/main.tf (126 lines of code) (raw):

/** * Copyright 2022 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. */ resource "google_project_service_identity" "apigee_sa" { provider = google-beta project = var.project_id service = "apigee.googleapis.com" } module "apigee" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/apigee?ref=v24.0.0" project_id = var.project_id organization = !var.create_apigee_org ? null : { display_name = var.apigee_org_name description = var.apigee_org_description authorized_network = var.network_id runtime_type = var.runtime_type billing_type = var.billing_type database_encryption_key = module.apigee_org_kms.keys["org-db"] analytics_region = var.analytics_region } envgroups = var.apigee_envgroups environments = var.apigee_environments instances = { for k, v in var.apigee_instances : k => { display_name = v.display_name description = v.description runtime_ip_cidr_range = v.runtime_ip_cidr_range troubleshooting_ip_cidr_range = v.troubleshooting_ip_cidr_range consumer_accept_list = v.consumer_accept_list disk_encryption_key = module.apigee_instance_kms[k].keys["inst-disk"] } } endpoint_attachments = var.apigee_endpoint_attachments depends_on = [google_service_networking_connection.apigee_peering] } module "apigee_org_kms" { source = "terraform-google-modules/kms/google" version = "~> 2.2.1" project_id = var.kms_project_id == "" ? var.project_id : var.kms_project_id location = var.analytics_region keyring = "apigee-${var.project_id}" keys = ["org-db"] set_decrypters_for = ["org-db"] set_encrypters_for = ["org-db"] decrypters = [ "serviceAccount:${google_project_service_identity.apigee_sa.email}" ] encrypters = [ "serviceAccount:${google_project_service_identity.apigee_sa.email}" ] prevent_destroy = var.prevent_key_destroy } module "apigee_instance_kms" { for_each = var.apigee_instances source = "terraform-google-modules/kms/google" version = "~> 2.2.1" project_id = var.kms_project_id == "" ? var.project_id : var.kms_project_id location = each.key keyring = "apigee-${var.project_id}-inst-${each.key}" keys = ["inst-disk"] set_decrypters_for = ["inst-disk"] set_encrypters_for = ["inst-disk"] decrypters = [ "serviceAccount:${google_project_service_identity.apigee_sa.email}" ] encrypters = [ "serviceAccount:${google_project_service_identity.apigee_sa.email}" ] prevent_destroy = var.prevent_key_destroy } # Service Networking # https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#service-networking resource "google_compute_global_address" "apigee_ranges" { for_each = var.psa_ranges project = var.project_id name = each.key purpose = "VPC_PEERING" address_type = "INTERNAL" address = split("/", each.value)[0] prefix_length = split("/", each.value)[1] network = var.network_id } resource "google_service_networking_connection" "apigee_peering" { network = var.network_id service = "servicenetworking.googleapis.com" reserved_peering_ranges = [ for k, v in google_compute_global_address.apigee_ranges : v.name ] } resource "google_compute_network_peering_routes_config" "psa_routes" { project = var.project_id peering = google_service_networking_connection.apigee_peering.peering network = split("/", var.network_id)[4] # grab network name from ID in format projects/{{project}}/global/networks/{{name}} export_custom_routes = false import_custom_routes = false } # Routing # https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#configure-routing resource "google_compute_region_network_endpoint_group" "psc_neg" { project = var.project_id for_each = var.apigee_instances name = "apigee-psc-neg-${each.key}" region = each.key network = var.network_id subnetwork = var.subnet_id network_endpoint_type = "PRIVATE_SERVICE_CONNECT" psc_target_service = module.apigee.service_attachments[each.key] lifecycle { create_before_destroy = true } } module "psc_lb" { source = "github.com/apigee/terraform-modules//modules/nb-psc-l7xlb?ref=v0.12.0" project_id = var.project_id name = "apigee-xlb-psc" network = var.network_id # psc_service_attachments = { (local.region) = module.apigee_core.instance_service_attachments[local.region] } ssl_certificate = var.ssl_certificate external_ip = var.external_ip psc_negs = [for _, psc_neg in google_compute_region_network_endpoint_group.psc_neg : psc_neg.id] }