Merge pull request #1360 from juliodiez/serverless-program
Add support for Shared VPC in Cloud Run
This commit is contained in:
commit
bf182bf600
|
@ -121,6 +121,28 @@ module "cloud_run" {
|
||||||
# tftest modules=1 resources=2 inventory=connector.yaml
|
# tftest modules=1 resources=2 inventory=connector.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that if you are using Shared VPC you need to specify a subnet:
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
module "cloud_run" {
|
||||||
|
source = "./fabric/modules/cloud-run"
|
||||||
|
project_id = var.project_id
|
||||||
|
name = "hello"
|
||||||
|
containers = {
|
||||||
|
hello = {
|
||||||
|
image = "us-docker.pkg.dev/cloudrun/container/hello"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vpc_connector_create = {
|
||||||
|
subnet = {
|
||||||
|
name = "subnet-vpc-access"
|
||||||
|
project_id = "host-project"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# tftest modules=1 resources=2 inventory=connector-shared.yaml
|
||||||
|
```
|
||||||
|
|
||||||
### Traffic split
|
### Traffic split
|
||||||
|
|
||||||
This deploys a Cloud Run service with traffic split between two revisions.
|
This deploys a Cloud Run service with traffic split between two revisions.
|
||||||
|
@ -254,7 +276,7 @@ module "cloud_run" {
|
||||||
| [timeout_seconds](variables.tf#L180) | Maximum duration the instance is allowed for responding to a request. | <code>number</code> | | <code>null</code> |
|
| [timeout_seconds](variables.tf#L180) | Maximum duration the instance is allowed for responding to a request. | <code>number</code> | | <code>null</code> |
|
||||||
| [traffic](variables.tf#L186) | Traffic steering configuration. If revision name is null the latest revision will be used. | <code title="map(object({ percent = number latest = optional(bool) tag = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
| [traffic](variables.tf#L186) | Traffic steering configuration. If revision name is null the latest revision will be used. | <code title="map(object({ percent = number latest = optional(bool) tag = optional(string) }))">map(object({…}))</code> | | <code>{}</code> |
|
||||||
| [volumes](variables.tf#L197) | Named volumes in containers in name => attributes format. | <code title="map(object({ secret_name = string default_mode = optional(string) items = optional(map(object({ path = string mode = optional(string) }))) }))">map(object({…}))</code> | | <code>{}</code> |
|
| [volumes](variables.tf#L197) | Named volumes in containers in name => attributes format. | <code title="map(object({ secret_name = string default_mode = optional(string) items = optional(map(object({ path = string mode = optional(string) }))) }))">map(object({…}))</code> | | <code>{}</code> |
|
||||||
| [vpc_connector_create](variables.tf#L211) | Populate this to create a VPC connector. You can then refer to it in the template annotations. | <code title="object({ ip_cidr_range = string vpc_self_link = string machine_type = optional(string) name = optional(string) instances = optional(object({ max = optional(number) min = optional(number) }), {}) throughput = optional(object({ max = optional(number) min = optional(number) }), {}) })">object({…})</code> | | <code>null</code> |
|
| [vpc_connector_create](variables.tf#L211) | Populate this to create a VPC connector. You can then refer to it in the template annotations. | <code title="object({ ip_cidr_range = optional(string) vpc_self_link = optional(string) machine_type = optional(string) name = optional(string) instances = optional(object({ max = optional(number) min = optional(number) }), {}) throughput = optional(object({ max = optional(number) min = optional(number) }), {}) subnet = optional(object({ name = optional(string) project_id = optional(string) }), {}) })">object({…})</code> | | <code>null</code> |
|
||||||
|
|
||||||
## Outputs
|
## Outputs
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,10 @@ resource "google_vpc_access_connector" "connector" {
|
||||||
max_throughput = var.vpc_connector_create.throughput.max
|
max_throughput = var.vpc_connector_create.throughput.max
|
||||||
min_instances = var.vpc_connector_create.instances.min
|
min_instances = var.vpc_connector_create.instances.min
|
||||||
min_throughput = var.vpc_connector_create.throughput.min
|
min_throughput = var.vpc_connector_create.throughput.min
|
||||||
|
subnet {
|
||||||
|
name = var.vpc_connector_create.subnet.name
|
||||||
|
project_id = var.vpc_connector_create.subnet.project_id
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "google_cloud_run_service" "service" {
|
resource "google_cloud_run_service" "service" {
|
||||||
|
|
|
@ -211,8 +211,8 @@ variable "volumes" {
|
||||||
variable "vpc_connector_create" {
|
variable "vpc_connector_create" {
|
||||||
description = "Populate this to create a VPC connector. You can then refer to it in the template annotations."
|
description = "Populate this to create a VPC connector. You can then refer to it in the template annotations."
|
||||||
type = object({
|
type = object({
|
||||||
ip_cidr_range = string
|
ip_cidr_range = optional(string)
|
||||||
vpc_self_link = string
|
vpc_self_link = optional(string)
|
||||||
machine_type = optional(string)
|
machine_type = optional(string)
|
||||||
name = optional(string)
|
name = optional(string)
|
||||||
instances = optional(object({
|
instances = optional(object({
|
||||||
|
@ -223,6 +223,10 @@ variable "vpc_connector_create" {
|
||||||
max = optional(number)
|
max = optional(number)
|
||||||
min = optional(number)
|
min = optional(number)
|
||||||
}), {})
|
}), {})
|
||||||
|
subnet = optional(object({
|
||||||
|
name = optional(string)
|
||||||
|
project_id = optional(string)
|
||||||
|
}), {})
|
||||||
})
|
})
|
||||||
default = null
|
default = null
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
# Copyright 2023 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.
|
||||||
|
|
||||||
|
values:
|
||||||
|
module.cloud_run.google_cloud_run_service.service:
|
||||||
|
autogenerate_revision_name: false
|
||||||
|
location: europe-west1
|
||||||
|
metadata:
|
||||||
|
- {}
|
||||||
|
name: hello
|
||||||
|
project: project-id
|
||||||
|
template:
|
||||||
|
- metadata:
|
||||||
|
- labels: null
|
||||||
|
spec:
|
||||||
|
- containers:
|
||||||
|
- args: null
|
||||||
|
command: null
|
||||||
|
env: []
|
||||||
|
env_from: []
|
||||||
|
image: us-docker.pkg.dev/cloudrun/container/hello
|
||||||
|
liveness_probe: []
|
||||||
|
volume_mounts: []
|
||||||
|
working_dir: null
|
||||||
|
volumes: []
|
||||||
|
timeouts: null
|
||||||
|
module.cloud_run.google_vpc_access_connector.connector[0]:
|
||||||
|
ip_cidr_range: null
|
||||||
|
machine_type: e2-micro
|
||||||
|
max_throughput: 300
|
||||||
|
min_throughput: 200
|
||||||
|
name: hello
|
||||||
|
project: project-id
|
||||||
|
region: europe-west1
|
||||||
|
subnet:
|
||||||
|
- name: subnet-vpc-access
|
||||||
|
project_id: host-project
|
||||||
|
timeouts: null
|
||||||
|
|
||||||
|
counts:
|
||||||
|
google_cloud_run_service: 1
|
||||||
|
google_vpc_access_connector: 1
|
|
@ -41,7 +41,8 @@ values:
|
||||||
network: projects/example/host/global/networks/host
|
network: projects/example/host/global/networks/host
|
||||||
project: project-id
|
project: project-id
|
||||||
region: europe-west1
|
region: europe-west1
|
||||||
subnet: []
|
subnet:
|
||||||
|
- name: null
|
||||||
|
|
||||||
counts:
|
counts:
|
||||||
google_cloud_run_service: 1
|
google_cloud_run_service: 1
|
||||||
|
|
Loading…
Reference in New Issue