* fix: allow configuring `docker_repository` for cloud-function2 When docker repository is not specified by default docker repository `projects/PROJECT_ID/locations/REGION/repositories/gcf-artifacts` is used. In such a case, terraform plan always generates a difference for `docker_repository` field as the module passes null value but the tfstate file has the above specified default value. This fix allows one to prevent unnecessary infrastructure change when using the default repository as well as any user created repository. * doc: updated README for cloud-function-v2 --------- Co-authored-by: Ludovico Magnocavallo <ludomagno@google.com>
189 lines
5.2 KiB
HCL
189 lines
5.2 KiB
HCL
/**
|
|
* 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.
|
|
*/
|
|
|
|
variable "bucket_config" {
|
|
description = "Enable and configure auto-created bucket. Set fields to null to use defaults."
|
|
type = object({
|
|
location = optional(string)
|
|
lifecycle_delete_age_days = optional(number)
|
|
})
|
|
default = null
|
|
}
|
|
|
|
variable "bucket_name" {
|
|
description = "Name of the bucket that will be used for the function code. It will be created with prefix prepended if bucket_config is not null."
|
|
type = string
|
|
nullable = false
|
|
}
|
|
|
|
variable "build_worker_pool" {
|
|
description = "Build worker pool, in projects/<PROJECT-ID>/locations/<REGION>/workerPools/<POOL_NAME> format."
|
|
type = string
|
|
default = null
|
|
}
|
|
|
|
variable "bundle_config" {
|
|
description = "Cloud function source folder and generated zip bundle paths. Output path defaults to '/tmp/bundle.zip' if null."
|
|
type = object({
|
|
source_dir = string
|
|
output_path = optional(string)
|
|
excludes = optional(list(string))
|
|
})
|
|
}
|
|
|
|
variable "description" {
|
|
description = "Optional description."
|
|
type = string
|
|
default = "Terraform managed."
|
|
}
|
|
|
|
variable "docker_repository_id" {
|
|
description = "User managed repository created in Artifact Registry."
|
|
type = string
|
|
default = null
|
|
}
|
|
|
|
variable "environment_variables" {
|
|
description = "Cloud function environment variables."
|
|
type = map(string)
|
|
default = {}
|
|
}
|
|
|
|
variable "function_config" {
|
|
description = "Cloud function configuration. Defaults to using main as entrypoint, 1 instance with 256MiB of memory, and 180 second timeout."
|
|
type = object({
|
|
entry_point = optional(string, "main")
|
|
instance_count = optional(number, 1)
|
|
memory_mb = optional(number, 256) # Memory in MB
|
|
cpu = optional(string, "0.166")
|
|
runtime = optional(string, "python310")
|
|
timeout_seconds = optional(number, 180)
|
|
})
|
|
default = {
|
|
entry_point = "main"
|
|
instance_count = 1
|
|
memory_mb = 256
|
|
cpu = "0.166"
|
|
runtime = "python310"
|
|
timeout_seconds = 180
|
|
}
|
|
}
|
|
|
|
variable "iam" {
|
|
description = "IAM bindings for topic in {ROLE => [MEMBERS]} format."
|
|
type = map(list(string))
|
|
default = {}
|
|
}
|
|
|
|
variable "ingress_settings" {
|
|
description = "Control traffic that reaches the cloud function. Allowed values are ALLOW_ALL, ALLOW_INTERNAL_AND_GCLB and ALLOW_INTERNAL_ONLY ."
|
|
type = string
|
|
default = null
|
|
}
|
|
|
|
variable "labels" {
|
|
description = "Resource labels."
|
|
type = map(string)
|
|
default = {}
|
|
}
|
|
|
|
variable "name" {
|
|
description = "Name used for cloud function and associated resources."
|
|
type = string
|
|
}
|
|
|
|
variable "prefix" {
|
|
description = "Optional prefix used for resource names."
|
|
type = string
|
|
default = null
|
|
validation {
|
|
condition = var.prefix != ""
|
|
error_message = "Prefix cannot be empty, please use null instead."
|
|
}
|
|
}
|
|
|
|
variable "project_id" {
|
|
description = "Project id used for all resources."
|
|
type = string
|
|
}
|
|
|
|
variable "region" {
|
|
description = "Region used for all resources."
|
|
type = string
|
|
default = "europe-west1"
|
|
}
|
|
|
|
variable "secrets" {
|
|
description = "Secret Manager secrets. Key is the variable name or mountpoint, volume versions are in version:path format."
|
|
type = map(object({
|
|
is_volume = bool
|
|
project_id = number
|
|
secret = string
|
|
versions = list(string)
|
|
}))
|
|
nullable = false
|
|
default = {}
|
|
}
|
|
|
|
variable "service_account" {
|
|
description = "Service account email. Unused if service account is auto-created."
|
|
type = string
|
|
default = null
|
|
}
|
|
|
|
variable "service_account_create" {
|
|
description = "Auto-create service account."
|
|
type = bool
|
|
default = false
|
|
}
|
|
|
|
variable "trigger_config" {
|
|
description = "Function trigger configuration. Leave null for HTTP trigger."
|
|
type = object({
|
|
event_type = string
|
|
pubsub_topic = optional(string)
|
|
region = optional(string)
|
|
event_filters = optional(list(object({
|
|
attribute = string
|
|
value = string
|
|
operator = optional(string)
|
|
})), [])
|
|
service_account_email = optional(string)
|
|
service_account_create = optional(bool, false)
|
|
retry_policy = optional(string)
|
|
})
|
|
default = null
|
|
}
|
|
|
|
variable "vpc_connector" {
|
|
description = "VPC connector configuration. Set create to 'true' if a new connector needs to be created."
|
|
type = object({
|
|
create = bool
|
|
name = string
|
|
egress_settings = string
|
|
})
|
|
default = null
|
|
}
|
|
|
|
variable "vpc_connector_config" {
|
|
description = "VPC connector network configuration. Must be provided if new VPC connector is being created."
|
|
type = object({
|
|
ip_cidr_range = string
|
|
network = string
|
|
})
|
|
default = null
|
|
}
|