feat: Support serverless_deployment NEG for api gateway (#3323)

This commit is contained in:
Josh Myers
2025-09-16 10:11:59 +01:00
committed by GitHub
parent 659472d487
commit 5bbd47e9ac
3 changed files with 38 additions and 7 deletions

File diff suppressed because one or more lines are too long

View File

@@ -47,7 +47,7 @@ locals {
}
neg_regional_serverless = {
for k, v in var.neg_configs :
k => v if v.cloudrun != null || v.cloudfunction != null
k => v if v.cloudrun != null || v.cloudfunction != null || v.serverless_deployment != null
}
neg_zonal = {
# we need to rebuild new objects as we cannot merge different types
@@ -137,6 +137,7 @@ resource "google_compute_region_network_endpoint_group" "psc" {
}
resource "google_compute_region_network_endpoint_group" "serverless" {
provider = google-beta
for_each = local.neg_regional_serverless
project = (
each.value.project_id == null
@@ -144,7 +145,10 @@ resource "google_compute_region_network_endpoint_group" "serverless" {
: each.value.project_id
)
region = try(
each.value.cloudrun.region, each.value.cloudfunction.region, null
each.value.cloudrun.region,
each.value.cloudfunction.region,
each.value.serverless_deployment.region,
null
)
name = "${var.name}-${each.key}"
description = coalesce(each.value.description, var.description)
@@ -164,4 +168,13 @@ resource "google_compute_region_network_endpoint_group" "serverless" {
url_mask = each.value.cloudrun.target_urlmask
}
}
dynamic "serverless_deployment" {
for_each = each.value.serverless_deployment == null ? [] : [""]
content {
platform = each.value.serverless_deployment.platform
resource = each.value.serverless_deployment.resource
version = each.value.serverless_deployment.version
url_mask = each.value.serverless_deployment.url_mask
}
}
}

View File

@@ -143,6 +143,13 @@ variable "neg_configs" {
}))
target_urlmask = optional(string)
}))
serverless_deployment = optional(object({
region = string
platform = string
resource = optional(string)
version = optional(string)
url_mask = optional(string)
}))
gce = optional(object({
network = string
subnetwork = string
@@ -187,6 +194,7 @@ variable "neg_configs" {
for k, v in var.neg_configs : (
(try(v.cloudfunction, null) == null ? 0 : 1) +
(try(v.cloudrun, null) == null ? 0 : 1) +
(try(v.serverless_deployment, null) == null ? 0 : 1) +
(try(v.gce, null) == null ? 0 : 1) +
(try(v.hybrid, null) == null ? 0 : 1) +
(try(v.internet, null) == null ? 0 : 1) +
@@ -215,6 +223,16 @@ variable "neg_configs" {
])
error_message = "Cloud Function NEGs need either target function or target urlmask defined."
}
validation {
condition = alltrue([
for k, v in var.neg_configs : (
v.serverless_deployment == null
? true
: v.serverless_deployment.url_mask != null || v.serverless_deployment.resource != null
)
])
error_message = "Serverless deployment NEGs need either resource or url_mask defined."
}
}
variable "project_id" {