From a2f4d9185b8ea7d8e13027754c8254ef8c26eaeb Mon Sep 17 00:00:00 2001 From: apichick Date: Mon, 9 Jun 2025 00:01:54 +0200 Subject: [PATCH] Added recipe for Apigee X with SWP --- .gitignore | 3 + modules/apigee/README.md | 5 + modules/apigee/recipe-apigee-swp/README.md | 57 ++++ .../bundle/apiproxy/proxies/default.xml | 24 ++ .../bundle/apiproxy/targets/default.xml | 15 + .../bundle/apiproxy/test.xml | 19 ++ modules/apigee/recipe-apigee-swp/diagram.png | Bin 0 -> 144197 bytes modules/apigee/recipe-apigee-swp/main.tf | 257 ++++++++++++++++++ modules/apigee/recipe-apigee-swp/outputs.tf | 20 ++ .../templates/deploy-apiproxy.sh.tpl | 20 ++ .../templates/targets/default.xml.tpl | 15 + modules/apigee/recipe-apigee-swp/variables.tf | 49 ++++ 12 files changed, 484 insertions(+) create mode 100644 modules/apigee/recipe-apigee-swp/README.md create mode 100644 modules/apigee/recipe-apigee-swp/bundle/apiproxy/proxies/default.xml create mode 100644 modules/apigee/recipe-apigee-swp/bundle/apiproxy/targets/default.xml create mode 100644 modules/apigee/recipe-apigee-swp/bundle/apiproxy/test.xml create mode 100644 modules/apigee/recipe-apigee-swp/diagram.png create mode 100644 modules/apigee/recipe-apigee-swp/main.tf create mode 100644 modules/apigee/recipe-apigee-swp/outputs.tf create mode 100644 modules/apigee/recipe-apigee-swp/templates/deploy-apiproxy.sh.tpl create mode 100644 modules/apigee/recipe-apigee-swp/templates/targets/default.xml.tpl create mode 100644 modules/apigee/recipe-apigee-swp/variables.tf diff --git a/.gitignore b/.gitignore index fec30fd52..718277092 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,6 @@ blueprints/gke/autopilot/bundle/monitoring/kustomization.yaml blueprints/gke/autopilot/bundle/locust/kustomization.yaml blueprints/gke/autopilot/bundle.tar.gz blueprints/gke/patterns/batch/job-*.yaml +modules/apigee/recipe-apigee-swp/bundle.zip +modules/apigee/recipe-apigee-swp/deploy-apiproxy.sh + diff --git a/modules/apigee/README.md b/modules/apigee/README.md index d209a6a81..45229c5bc 100644 --- a/modules/apigee/README.md +++ b/modules/apigee/README.md @@ -18,6 +18,7 @@ This module simplifies the creation of a Apigee resources (organization, environ - [New endpoint attachment](#new-endpoint-attachment) - [Apigee add-ons](#apigee-add-ons) - [IAM](#iam) +- [Recipes](#recipes) - [Variables](#variables) - [Outputs](#outputs) @@ -355,6 +356,10 @@ module "apigee" { # tftest modules=1 resources=10 ``` +## Recipes + +- [Apigee X with Secure Web Proxy](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/blob/master/modules/apigee/recipe-apigee-swp) + ## Variables | name | description | type | required | default | diff --git a/modules/apigee/recipe-apigee-swp/README.md b/modules/apigee/recipe-apigee-swp/README.md new file mode 100644 index 000000000..121d54532 --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/README.md @@ -0,0 +1,57 @@ +# Apigee X with Secure Web Proxy + +This recipe demonstrates how to configure Apigee X with Secure Web Proxy (SWP). This is a common solution when you need your Apigee X runtime to connect to numerous on-premises backends, but prefer to avoid establishing VPC peering between the Apigee X Google-managed VPC and the VPC where hybrid connectivity and advertising Apigee X runtime IP ranges to the on-premises network. + +The diagram below depicts the architecture deployed: + +![Architecture](./diagram.png) + +In this recipe the SWP gateway has been co-located with Apigee X in the same project for ease of deployment. It's important to note that the SWP gateway's deployment is flexible and can be independently placed in a different project. Our current setup uses a privately accessible VM as the backend target for SWP. In a real-world scenario, with hybrid connectivity configured in the SWP gateway's VPC, the backend could alternatively be an on-premises host. + +Once the terraform configuration is applied you can verify that all is working by running the following: + +* Deploy a sample proxy to Apigee X + + ./deploy-apiproxy.sh + +* Make a request to the proxy + + curl -v <API_URL>/test + + Note: The API_URL is returned as a terraform output + +## Variables + +| name | description | type | required | default | +|---|---|:---:|:---:|:---:| +| [analytics_region](variables.tf#L27) | Region. | string | ✓ | | +| [instance_region](variables.tf#L32) | Region. | string | ✓ | | +| [network_config](variables.tf#L37) | Network configuration. | object({…}) | ✓ | | +| [project_id](variables.tf#L46) | Project ID. | string | ✓ | | +| [_testing](variables.tf#L17) | Populate this variable to avoid triggering the data source. | object({…}) | | null | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| [api_url](outputs.tf#L17) | API url. | | + +## Test + +```hcl +module "recipe_apigee_swp" { + source = "./fabric/modules/apigee/recipe-apigee-swp" + project_id = "project-1" + _testing = { + name = "project-1" + number = 1234567890 + } + instance_region = "europe-west1" + analytics_region = "europe-west1" + network_config = { + subnet_ip_cidr_range = "10.16.0.0/24" + subnet_psc_ip_cidr_range = "10.16.1.0/24" + subnet_proxy_only_ip_cidr_range = "10.16.2.0/24" + } +} +# tftest modules=10 resources=43 diff --git a/modules/apigee/recipe-apigee-swp/bundle/apiproxy/proxies/default.xml b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/proxies/default.xml new file mode 100644 index 000000000..30859c52a --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/proxies/default.xml @@ -0,0 +1,24 @@ + + + + + /test + + + default + + \ No newline at end of file diff --git a/modules/apigee/recipe-apigee-swp/bundle/apiproxy/targets/default.xml b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/targets/default.xml new file mode 100644 index 000000000..dca7a16cc --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/targets/default.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + http://10.16.0.4 + + \ No newline at end of file diff --git a/modules/apigee/recipe-apigee-swp/bundle/apiproxy/test.xml b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/test.xml new file mode 100644 index 000000000..47ab47f1b --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/bundle/apiproxy/test.xml @@ -0,0 +1,19 @@ + + + + test + \ No newline at end of file diff --git a/modules/apigee/recipe-apigee-swp/diagram.png b/modules/apigee/recipe-apigee-swp/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..e50005cc55715ed06e2d09bc381b881e502820a9 GIT binary patch literal 144197 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 ZAFM^Y3XhvrzET;%A92uvK&>!F`414PZ6W{w literal 0 HcmV?d00001 diff --git a/modules/apigee/recipe-apigee-swp/main.tf b/modules/apigee/recipe-apigee-swp/main.tf new file mode 100644 index 000000000..c1f8d0bc4 --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/main.tf @@ -0,0 +1,257 @@ +/** + * Copyright 2025 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. + */ + +# Added this because there is a bug on the provider + +provider "google" { + region = var.instance_region +} + +locals { + hostname = "${module.addresses.global_addresses.apigee.address}.nip.io" + environment = "dev" + envgroup = "apis" + environments = { + (local.environment) = { + envgroups = [local.envgroup] + forward_proxy_uri = "http://${module.apigee.endpoint_attachment_hosts["swp"]}:8080" + } + } + instances = { + (var.instance_region) = { + environments = keys(local.environments) + } } +} + + +module "project" { + source = "../../../modules/project" + name = var.project_id + project_reuse = { + use_data_source = var._testing == null + project_attributes = var._testing + } + services = [ + "apigee.googleapis.com", + "compute.googleapis.com", + "networksecurity.googleapis.com", + "networkservices.googleapis.com", + ] +} + +module "vpc" { + source = "../../../modules/net-vpc" + project_id = module.project.id + name = "vpc" + subnets = [ + { + ip_cidr_range = var.network_config.subnet_ip_cidr_range + name = "subnet-${var.instance_region}" + region = var.instance_region + } + ] + subnets_psc = [ + { + ip_cidr_range = var.network_config.subnet_psc_ip_cidr_range + name = "subnet-psc-${var.instance_region}" + region = var.instance_region + } + ] + subnets_proxy_only = [ + { + ip_cidr_range = var.network_config.subnet_proxy_only_ip_cidr_range + name = "subnet-proxy-only-${var.instance_region}" + region = var.instance_region + active = true + } + ] +} + +module "firewall" { + source = "../../../modules/net-vpc-firewall" + project_id = module.project.id + network = module.vpc.name + default_rules_config = { + disabled = true + } + ingress_rules = { + allow-ingress-http = { + description = "Allow ingress to http servers." + targets = ["http-server"] + rules = [{ protocol = "tcp", ports = [80] }] + source_ranges = [var.network_config.subnet_proxy_only_ip_cidr_range] + } + } +} + +module "apigee" { + source = "../../../modules/apigee" + project_id = module.project.project_id + organization = { + analytics_region = var.analytics_region + billing_type = "EVALUATION" + runtime_type = "CLOUD" + retention = "MINIMUM" + disable_vpc_peering = true + } + envgroups = { + "apis" = [local.hostname] + } + environments = local.environments + instances = local.instances + endpoint_attachments = { + swp = { + region = var.instance_region + service_attachment = module.swp.service_attachment + } + } +} + +module "ext_lb" { + source = "../../../modules/net-lb-app-ext" + name = "glb" + project_id = module.project.id + forwarding_rules_config = { + "" = { + address = ( + module.addresses.global_addresses.apigee.address + ) + } + } + protocol = "HTTPS" + use_classic_version = false + backend_service_configs = { + default = { + backends = [for k, v in module.apigee.instances : { backend = "neg-${k}" }] + protocol = "HTTPS" + health_checks = [] + } + } + neg_configs = { + for k, v in module.apigee.instances : + "neg-${k}" => { psc = { + region = k + target_service = v.service_attachment + network = module.vpc.self_link + subnetwork = module.vpc.subnets_psc["${var.instance_region}/subnet-psc-${var.instance_region}"].self_link + } + } + } + ssl_certificates = { + managed_configs = { + default = { + domains = [local.hostname] + } + } + } +} + +module "swp" { + source = "../../../modules/net-swp" + project_id = module.project.id + region = var.instance_region + name = "gateway" + network = module.vpc.id + subnetwork = module.vpc.subnet_self_links["${var.instance_region}/subnet-${var.instance_region}"] + gateway_config = { + addresses = [module.addresses.internal_addresses["gateway"].address] + ports = [8080] + } + service_attachment = { + nat_subnets = [module.vpc.subnets_psc["${var.instance_region}/subnet-psc-${var.instance_region}"].self_link] + automatic_connection = true + } + policy_rules = { + allowed-hosts = { + priority = 1000 + allow = true + session_matcher = "host() == '${module.nginx_vm.internal_ip}'" + } + } +} + +module "addresses" { + source = "../../../modules/net-address" + project_id = module.project.project_id + internal_addresses = { + gateway = { + region = var.instance_region + subnetwork = module.vpc.subnet_self_links["${var.instance_region}/subnet-${var.instance_region}"] + } + } + global_addresses = { + apigee = {} + } +} + +module "nginx_vm" { + source = "../../../modules/compute-vm" + project_id = module.project.project_id + zone = "${var.instance_region}-b" + name = "nginx" + network_interfaces = [{ + network = module.vpc.self_link + subnetwork = module.vpc.subnet_self_links["${var.instance_region}/subnet-${var.instance_region}"] + }] + metadata = { + startup-script = <<-EOF + #! /bin/bash + apt-get update + apt-get install -y nginx + EOF + } + service_account = { + auto_create = true + } + tags = [ + "http-server" + ] +} + +resource "local_file" "target_endpoint_file" { + content = templatefile("${path.module}/templates/targets/default.xml.tpl", { + ip_address = module.nginx_vm.internal_ip + }) + filename = "${path.module}/bundle/apiproxy/targets/default.xml" + file_permission = "0644" +} + +# tflint-ignore: terraform_unused_declarations +data "archive_file" "bundle" { + type = "zip" + source_dir = "${path.module}/bundle" + output_path = "${path.module}/bundle.zip" + depends_on = [ + local_file.target_endpoint_file + ] +} + +resource "local_file" "deploy_apiproxy_file" { + content = templatefile("${path.module}/templates/deploy-apiproxy.sh.tpl", { + organization = module.apigee.org_name + environment = local.environment + }) + filename = "${path.module}/deploy-apiproxy.sh" + file_permission = "0755" +} + +module "nat" { + source = "../../../modules/net-cloudnat" + project_id = module.project.project_id + region = var.instance_region + name = "nat-${var.instance_region}" + router_network = module.vpc.self_link +} diff --git a/modules/apigee/recipe-apigee-swp/outputs.tf b/modules/apigee/recipe-apigee-swp/outputs.tf new file mode 100644 index 000000000..951c1165c --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/outputs.tf @@ -0,0 +1,20 @@ +/** + * Copyright 2025 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. + */ + +output "api_url" { + description = "API url." + value = "https://${local.hostname}/test" +} diff --git a/modules/apigee/recipe-apigee-swp/templates/deploy-apiproxy.sh.tpl b/modules/apigee/recipe-apigee-swp/templates/deploy-apiproxy.sh.tpl new file mode 100644 index 000000000..576bf69de --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/templates/deploy-apiproxy.sh.tpl @@ -0,0 +1,20 @@ +#!/bin/bash + +ORGANIZATION=${organization} +ENVIRONMENT=${environment} + +export TOKEN=$(gcloud auth print-access-token) + +curl -v -X POST \ +-H "Authorization: Bearer $TOKEN" \ +-H "Content-Type:application/octet-stream" \ +-T 'bundle.zip' \ +"https://apigee.googleapis.com/v1/organizations/$ORGANIZATION/apis?name=test&action=import" + +curl -v -X POST \ +-H "Authorization: Bearer $TOKEN" \ +"https://apigee.googleapis.com/v1/organizations/$ORGANIZATION/environments/$ENVIRONMENT/apis/test/revisions/1/deployments" + +curl -v \ +-H "Authorization: Bearer $TOKEN" \ +"https://apigee.googleapis.com/v1/organizations/$ORGANIZATION/environments/$ENVIRONMENT/apis/test/revisions/1/deployments" \ No newline at end of file diff --git a/modules/apigee/recipe-apigee-swp/templates/targets/default.xml.tpl b/modules/apigee/recipe-apigee-swp/templates/targets/default.xml.tpl new file mode 100644 index 000000000..44744009e --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/templates/targets/default.xml.tpl @@ -0,0 +1,15 @@ + + + + + + + + + + + + + http://${ip_address} + + \ No newline at end of file diff --git a/modules/apigee/recipe-apigee-swp/variables.tf b/modules/apigee/recipe-apigee-swp/variables.tf new file mode 100644 index 000000000..e8599f039 --- /dev/null +++ b/modules/apigee/recipe-apigee-swp/variables.tf @@ -0,0 +1,49 @@ +/** + * Copyright 2025 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. + */ + +variable "_testing" { + description = "Populate this variable to avoid triggering the data source." + type = object({ + name = string + number = number + services_enabled = optional(list(string), []) + }) + default = null +} + +variable "analytics_region" { + description = "Region." + type = string +} + +variable "instance_region" { + description = "Region." + type = string +} + +variable "network_config" { + description = "Network configuration." + type = object({ + subnet_ip_cidr_range = string + subnet_psc_ip_cidr_range = string + subnet_proxy_only_ip_cidr_range = string + }) +} + +variable "project_id" { + description = "Project ID." + type = string +} \ No newline at end of file