mmv1/products/cloudfunctions2/Function.yaml (715 lines of code) (raw):

# Copyright 2024 Google Inc. # 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. --- name: 'function' api_resource_type_kind: Function description: | A Cloud Function that contains user computation executed in response to an event. references: guides: api: 'https://cloud.google.com/functions/docs/reference/rest/v2beta/projects.locations.functions' docs: id_format: 'projects/{{project}}/locations/{{location}}/functions/{{name}}' base_url: 'projects/{{project}}/locations/{{location}}/functions' self_link: 'projects/{{project}}/locations/{{location}}/functions/{{name}}' create_url: 'projects/{{project}}/locations/{{location}}/functions?functionId={{name}}' update_verb: 'PATCH' update_mask: true import_format: - 'projects/{{project}}/locations/{{location}}/functions/{{name}}' timeouts: insert_minutes: 60 update_minutes: 60 delete_minutes: 60 autogen_async: true async: actions: ['create', 'delete', 'update'] type: 'OpAsync' operation: base_url: '{{op_id}}' # It takes about 35-40 mins to get the resource created timeouts: insert_minutes: 60 update_minutes: 60 delete_minutes: 60 result: resource_inside_response: true iam_policy: method_name_separator: ':' parent_resource_attribute: 'cloud_function' example_config_body: 'templates/terraform/iam/iam_attributes.go.tmpl' import_format: - 'projects/{{project}}/locations/{{location}}/functions/{{cloud_function}}' - '{{cloud_function}}' custom_code: constants: 'templates/terraform/constants/cloudfunctions2_function.go.tmpl' encoder: 'templates/terraform/encoders/cloudfunctions2_runtime_update_policy.go.tmpl' taint_resource_on_failed_create: true sweeper: url_substitutions: - region: "us-central1" - region: "europe-west6" - region: "us-west1" examples: - name: 'cloudfunctions2_basic' primary_resource_id: 'function' primary_resource_name: 'fmt.Sprintf("tf-test-function-v2%s", context["random_suffix"])' vars: function: 'function-v2' bucket_name: 'gcf-source' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_full' primary_resource_id: 'function' vars: bucket_name: 'gcf-source' service_account: 'gcf-sa' topic: 'functions2-topic' function: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'zip_path': '"./test-fixtures/function-source-pubsub.zip"' 'primary_resource_id': '"terraform-test"' 'location': '"us-central1"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_scheduler_auth' primary_resource_id: 'function' vars: bucket_name: 'gcf-source' service_account: 'gcf-sa' function: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'primary_resource_id': '"terraform-test"' 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' exclude_test: true - name: 'cloudfunctions2_basic_gcs' primary_resource_id: 'function' bootstrap_iam: - member: "serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" role: "roles/cloudkms.cryptoKeyEncrypterDecrypter" vars: bucket_name_source: 'gcf-source-bucket' bucket_name_trigger: 'gcf-trigger-bucket' service_account: 'gcf-sa' function_name: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'zip_path': '"./test-fixtures/function-source-eventarc-gcs.zip"' 'primary_resource_id': '"terraform-test"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_basic_auditlogs' primary_resource_id: 'function' bootstrap_iam: - member: "serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" role: "roles/cloudkms.cryptoKeyEncrypterDecrypter" vars: bucket_name_source: 'gcf-source-bucket' bucket_name_auditlogs: 'gcf-auditlog-bucket' service_account: 'gcf-sa' function_name: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'zip_path': '"./test-fixtures/function-source-eventarc-gcs.zip"' 'primary_resource_id': '"terraform-test"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_basic_builder' primary_resource_id: 'function' primary_resource_name: 'fmt.Sprintf("tf-test-function-v2%s", context["random_suffix"])' vars: function: 'function-v2' bucket_name: 'gcf-source' zip_path: 'function-source.zip' service_account: 'gcf-sa' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' external_providers: ["random", "time"] - name: 'cloudfunctions2_secret_env' primary_resource_id: 'function' bootstrap_iam: - member: "serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" role: "roles/cloudkms.cryptoKeyEncrypterDecrypter" vars: function: 'function-secret' bucket_name: 'gcf-source' zip_path: 'function-source.zip' secret: 'secret' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_secret_volume' primary_resource_id: 'function' bootstrap_iam: - member: "serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" role: "roles/cloudkms.cryptoKeyEncrypterDecrypter" vars: function: 'function-secret' bucket_name: 'gcf-source' zip_path: 'function-source.zip' secret: 'secret' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_private_workerpool' primary_resource_id: 'function' vars: function: 'function-workerpool' bucket_name: 'gcf-source' zip_path: 'function-source.zip' pool: 'workerpool' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_cmek' primary_resource_id: 'function' min_version: 'beta' vars: function: 'function-cmek' bucket_name: 'gcf-source' zip_path: 'function-source.zip' kms_service_name: 'cloudkms.googleapis.com' cmek-repo: 'cmek-repo' unencoded-ar-repo: 'ar-repo' kms_key_name: 'cmek-key' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'kms_key_name': 'acctest.BootstrapKMSKeyInLocation(t, "us-central1").CryptoKey.Name' 'location': '"us-central1"' 'zip_path': '"./test-fixtures/function-source.zip"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' # the example file is written in a repetitive way to help acc tests, so exclude exclude_docs: true skip_vcr: true - name: 'cloudfunctions2_cmek_docs' primary_resource_id: 'function' min_version: 'beta' vars: function: 'function-cmek' bucket_name: 'gcf-source' zip_path: 'function-source.zip' kms_service_name: 'cloudkms.googleapis.com' cmek-repo: 'cmek-repo' unencoded-ar-repo: 'ar-repo' kms_key_name: 'cmek-key' project: 'my-project-name' # this example file will cause IAM conflicts between tests if used to make a test exclude_test: true - name: 'cloudfunctions2_abiu' primary_resource_id: 'function' min_version: 'beta' vars: bucket_name: 'gcf-source' service_account: 'gcf-sa' topic: 'functions2-topic' function: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'zip_path': '"./test-fixtures/function-source-pubsub.zip"' 'primary_resource_id': '"terraform-test"' 'location': '"europe-west6"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' - name: 'cloudfunctions2_abiu_on_deploy' primary_resource_id: 'function' min_version: 'beta' vars: bucket_name: 'gcf-source' service_account: 'gcf-sa' topic: 'functions2-topic' function: 'gcf-function' zip_path: 'function-source.zip' test_env_vars: project: 'PROJECT_NAME' test_vars_overrides: 'zip_path': '"./test-fixtures/function-source-pubsub.zip"' 'primary_resource_id': '"terraform-test"' 'location': '"europe-west6"' # ignore these fields during import step ignore_read_extra: - 'build_config.0.source.0.storage_source.0.object' - 'build_config.0.source.0.storage_source.0.bucket' parameters: - name: 'location' type: String description: The location of this cloud function. url_param_only: true required: true immutable: true properties: - name: 'name' type: String description: | A user-defined name of the function. Function names must be unique globally and match pattern `projects/*/locations/*/functions/*`. required: true immutable: true custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl' custom_expand: 'templates/terraform/custom_expand/shortname_to_url.go.tmpl' - name: 'description' type: String description: 'User-provided description of a function.' - name: 'environment' type: Enum description: 'The environment the function is hosted on.' output: true enum_values: - 'ENVIRONMENT_UNSPECIFIED' - 'GEN_1' - 'GEN_2' - name: 'url' type: String description: 'Output only. The deployed url for the function.' output: true - name: 'state' type: Enum description: 'Describes the current state of the function.' output: true enum_values: - 'STATE_UNSPECIFIED' - 'ACTIVE' - 'FAILED' - 'DEPLOYING' - 'DELETING' - 'UNKNOWN' - name: 'buildConfig' type: NestedObject description: | Describes the Build step of the function that builds a container from the given source. properties: - name: 'build' type: String description: | The Cloud Build name of the latest successful deployment of the function. output: true - name: 'runtime' type: String description: | The runtime in which to run the function. Required when deploying a new function, optional when updating an existing function. - name: 'entryPoint' type: String description: | The name of the function (as defined in source code) that will be executed. Defaults to the resource name suffix, if not specified. For backward compatibility, if function with given name is not found, then the system will try to use function named "function". For Node.js this is name of a function exported by the module specified in source_location. - name: 'source' type: NestedObject description: 'The location of the function source code.' properties: - name: 'storageSource' type: NestedObject description: 'If provided, get the source from this location in Google Cloud Storage.' exactly_one_of: - 'storage_source' - 'repo_source' properties: - name: 'bucket' type: String description: 'Google Cloud Storage bucket containing the source' custom_flatten: 'templates/terraform/custom_flatten/cloudfunctions2_function_source_bucket.go.tmpl' - name: 'object' type: String description: 'Google Cloud Storage object containing the source.' custom_flatten: 'templates/terraform/custom_flatten/cloudfunctions2_function_source_object.go.tmpl' - name: 'generation' type: Integer description: | Google Cloud Storage generation for the object. If the generation is omitted, the latest generation will be used. default_from_api: true custom_flatten: 'templates/terraform/custom_flatten/cloudfunctions2_function_source_generation.go.tmpl' - name: 'repoSource' type: NestedObject description: 'If provided, get the source from this location in a Cloud Source Repository.' exactly_one_of: - 'storage_source' - 'repo_source' properties: - name: 'projectId' type: String description: | ID of the project that owns the Cloud Source Repository. If omitted, the project ID requesting the build is assumed. immutable: true - name: 'repoName' type: String description: 'Name of the Cloud Source Repository.' - name: 'branchName' type: String description: 'Regex matching branches to build.' exactly_one_of: - 'branch_name' - 'tag_name' - 'commit_sha' - name: 'tagName' type: String description: 'Regex matching tags to build.' exactly_one_of: - 'branch_name' - 'tag_name' - 'commit_sha' - name: 'commitSha' type: String description: 'Regex matching tags to build.' exactly_one_of: - 'branch_name' - 'tag_name' - 'commit_sha' - name: 'dir' type: String description: | Directory, relative to the source root, in which to run the build. - name: 'invertRegex' type: Boolean description: | Only trigger a build if the revision regex does NOT match the revision regex. - name: 'workerPool' type: String description: 'Name of the Cloud Build Custom Worker Pool that should be used to build the function.' - name: 'environmentVariables' type: KeyValuePairs description: | User-provided build-time environment variables for the function. default_from_api: true - name: 'dockerRepository' type: String description: | User managed repository created in Artifact Registry optionally with a customer managed encryption key. default_from_api: true - name: 'serviceAccount' type: String description: 'The fully-qualified name of the service account to be used for building the container.' default_from_api: true - name: 'automaticUpdatePolicy' type: NestedObject description: | Security patches are applied automatically to the runtime without requiring the function to be redeployed. default_from_api: true send_empty_value: true allow_empty_object: true exactly_one_of: - 'automatic_update_policy' - 'on_deploy_update_policy' properties: [] - name: 'onDeployUpdatePolicy' type: NestedObject description: | Security patches are only applied when a function is redeployed. send_empty_value: true allow_empty_object: true exactly_one_of: - 'automatic_update_policy' - 'on_deploy_update_policy' properties: - name: 'runtimeVersion' type: String description: | The runtime version which was used during latest function deployment. output: true - name: 'serviceConfig' type: NestedObject description: 'Describes the Service being deployed.' properties: - name: 'service' type: String description: | Name of the service associated with a Function. default_from_api: true - name: 'timeoutSeconds' type: Integer description: | The function execution timeout. Execution is considered failed and can be terminated if the function is not completed at the end of the timeout period. Defaults to 60 seconds. default_from_api: true - name: 'availableMemory' type: String description: | The amount of memory available for a function. Defaults to 256M. Supported units are k, M, G, Mi, Gi. If no unit is supplied the value is interpreted as bytes. default_from_api: true - name: 'maxInstanceRequestConcurrency' type: Integer description: 'Sets the maximum number of concurrent requests that each instance can receive. Defaults to 1.' default_from_api: true - name: 'availableCpu' type: String description: 'The number of CPUs used in a single container instance. Default value is calculated from available memory.' default_from_api: true - name: 'environmentVariables' type: KeyValuePairs description: 'Environment variables that shall be available during function execution.' default_from_api: true diff_suppress_func: 'environmentVariablesDiffSuppress' - name: 'maxInstanceCount' type: Integer description: | The limit on the maximum number of function instances that may coexist at a given time. default_from_api: true - name: 'minInstanceCount' type: Integer description: | The limit on the minimum number of function instances that may coexist at a given time. - name: 'vpcConnector' type: String description: 'The Serverless VPC Access connector that this cloud function can connect to.' - name: 'vpcConnectorEgressSettings' type: Enum description: 'Available egress settings.' enum_values: - 'VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED' - 'PRIVATE_RANGES_ONLY' - 'ALL_TRAFFIC' - name: 'ingressSettings' type: Enum description: 'Available ingress settings. Defaults to "ALLOW_ALL" if unspecified.' default_value: "ALLOW_ALL" enum_values: - 'ALLOW_ALL' - 'ALLOW_INTERNAL_ONLY' - 'ALLOW_INTERNAL_AND_GCLB' - name: 'uri' type: String description: 'URI of the Service deployed.' output: true - name: 'gcfUri' type: String description: 'URIs of the Service deployed' output: true - name: 'serviceAccountEmail' type: String description: 'The email of the service account for this function.' default_from_api: true - name: 'allTrafficOnLatestRevision' type: Boolean description: 'Whether 100% of traffic is routed to the latest revision. Defaults to true.' default_value: true - name: 'secretEnvironmentVariables' type: Array description: 'Secret environment variables configuration.' item_type: type: NestedObject properties: - name: 'key' type: String description: | Name of the environment variable. required: true - name: 'projectId' type: String description: | Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function. required: true - name: 'secret' type: String description: | Name of the secret in secret manager (not the full resource name). required: true - name: 'version' type: String description: | Version of the secret (version number or the string 'latest'). It is recommended to use a numeric version for secret environment variables as any updates to the secret value is not reflected until new instances start. required: true - name: 'secretVolumes' type: Array description: 'Secret volumes configuration.' item_type: type: NestedObject properties: - name: 'mountPath' type: String description: | The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets required: true - name: 'projectId' type: String description: | Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function. required: true - name: 'secret' type: String description: | Name of the secret in secret manager (not the full resource name). required: true - name: 'versions' type: Array description: List of secret versions to mount for this secret. If empty, the latest version of the secret will be made available in a file named after the secret under the mount point.' default_from_api: true item_type: type: NestedObject properties: - name: 'version' type: String description: | Version of the secret (version number or the string 'latest'). It is preferable to use latest version with secret volumes as secret value changes are reflected immediately. required: true - name: 'path' type: String description: | Relative path of the file under the mount path where the secret value for this version will be fetched and made available. For example, setting the mountPath as '/etc/secrets' and path as secret_foo would mount the secret value file at /etc/secrets/secret_foo. required: true - name: 'binaryAuthorizationPolicy' type: String description: | The binary authorization policy to be checked when deploying the Cloud Run service. - name: 'eventTrigger' type: NestedObject description: | An Eventarc trigger managed by Google Cloud Functions that fires events in response to a condition in another service. properties: - name: 'trigger' type: String description: 'Output only. The resource name of the Eventarc trigger.' output: true - name: 'triggerRegion' type: String description: | The region that the trigger will be in. The trigger will only receive events originating in this region. It can be the same region as the function, a different region or multi-region, or the global region. If not provided, defaults to the same region as the function. default_from_api: true - name: 'eventType' type: String description: 'Required. The type of event to observe.' - name: 'eventFilters' type: Array description: 'Criteria used to filter events.' is_set: true item_type: type: NestedObject properties: - name: 'attribute' type: String description: | 'Required. The name of a CloudEvents attribute. Currently, only a subset of attributes are supported for filtering. Use the `gcloud eventarc providers describe` command to learn more about events and their attributes. Do not filter for the 'type' attribute here, as this is already achieved by the resource's `event_type` attribute. required: true - name: 'value' type: String description: | Required. The value for the attribute. If the operator field is set as `match-path-pattern`, this value can be a path pattern instead of an exact value. required: true - name: 'operator' type: String description: | Optional. The operator used for matching the events with the value of the filter. If not specified, only events that have an exact key-value pair specified in the filter are matched. The only allowed value is `match-path-pattern`. [See documentation on path patterns here](https://cloud.google.com/eventarc/docs/path-patterns)' - name: 'pubsubTopic' type: String description: | The name of a Pub/Sub topic in the same project that will be used as the transport topic for the event delivery. default_from_api: true - name: 'serviceAccountEmail' type: String description: | Optional. The email of the trigger's service account. The service account must have permission to invoke Cloud Run services. If empty, defaults to the Compute Engine default service account: {project_number}-compute@developer.gserviceaccount.com. default_from_api: true - name: 'retryPolicy' type: Enum description: | Describes the retry policy in case of function's execution failure. Retried execution is charged as any other execution. enum_values: - 'RETRY_POLICY_UNSPECIFIED' - 'RETRY_POLICY_DO_NOT_RETRY' - 'RETRY_POLICY_RETRY' - name: 'updateTime' type: String description: 'The last update timestamp of a Cloud Function.' output: true - name: 'labels' type: KeyValueLabels description: | A set of key/value label pairs associated with this Cloud Function. - name: 'kmsKeyName' type: String description: | Resource name of a KMS crypto key (managed by the user) used to encrypt/decrypt function resources. It must match the pattern projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}.