All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.gcp.cloudfunctions.kotlin.Function.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 8.10.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gcp.cloudfunctions.kotlin

import com.pulumi.core.Output
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionEventTrigger
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSecretEnvironmentVariable
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSecretVolume
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSourceRepository
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Any
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionEventTrigger.Companion.toKotlin as functionEventTriggerToKotlin
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSecretEnvironmentVariable.Companion.toKotlin as functionSecretEnvironmentVariableToKotlin
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSecretVolume.Companion.toKotlin as functionSecretVolumeToKotlin
import com.pulumi.gcp.cloudfunctions.kotlin.outputs.FunctionSourceRepository.Companion.toKotlin as functionSourceRepositoryToKotlin

/**
 * Builder for [Function].
 */
@PulumiTagMarker
public class FunctionResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: FunctionArgs = FunctionArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend FunctionArgsBuilder.() -> Unit) {
        val builder = FunctionArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): Function {
        val builtJavaResource = com.pulumi.gcp.cloudfunctions.Function(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Function(builtJavaResource)
    }
}

/**
 * Creates a new Cloud Function. For more information see:
 * * [API documentation](https://cloud.google.com/functions/docs/reference/rest/v1/projects.locations.functions)
 * * How-to Guides
 *     * [Official Documentation](https://cloud.google.com/functions/docs)
 * > **Warning:** As of November 1, 2019, newly created Functions are
 * private-by-default and will require [appropriate IAM permissions](https://cloud.google.com/functions/docs/reference/iam/roles)
 * to be invoked. See below examples for how to set up the appropriate permissions,
 * or view the [Cloud Functions IAM resources](https://www.terraform.io/docs/providers/google/r/cloudfunctions_cloud_function_iam.html)
 * for Cloud Functions.
 * ## Example Usage
 * ### Public Function
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const bucket = new gcp.storage.Bucket("bucket", {
 *     name: "test-bucket",
 *     location: "US",
 * });
 * const archive = new gcp.storage.BucketObject("archive", {
 *     name: "index.zip",
 *     bucket: bucket.name,
 *     source: new pulumi.asset.FileAsset("./path/to/zip/file/which/contains/code"),
 * });
 * const _function = new gcp.cloudfunctions.Function("function", {
 *     name: "function-test",
 *     description: "My function",
 *     runtime: "nodejs16",
 *     availableMemoryMb: 128,
 *     sourceArchiveBucket: bucket.name,
 *     sourceArchiveObject: archive.name,
 *     triggerHttp: true,
 *     entryPoint: "helloGET",
 * });
 * // IAM entry for all users to invoke the function
 * const invoker = new gcp.cloudfunctions.FunctionIamMember("invoker", {
 *     project: _function.project,
 *     region: _function.region,
 *     cloudFunction: _function.name,
 *     role: "roles/cloudfunctions.invoker",
 *     member: "allUsers",
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * bucket = gcp.storage.Bucket("bucket",
 *     name="test-bucket",
 *     location="US")
 * archive = gcp.storage.BucketObject("archive",
 *     name="index.zip",
 *     bucket=bucket.name,
 *     source=pulumi.FileAsset("./path/to/zip/file/which/contains/code"))
 * function = gcp.cloudfunctions.Function("function",
 *     name="function-test",
 *     description="My function",
 *     runtime="nodejs16",
 *     available_memory_mb=128,
 *     source_archive_bucket=bucket.name,
 *     source_archive_object=archive.name,
 *     trigger_http=True,
 *     entry_point="helloGET")
 * # IAM entry for all users to invoke the function
 * invoker = gcp.cloudfunctions.FunctionIamMember("invoker",
 *     project=function.project,
 *     region=function.region,
 *     cloud_function=function.name,
 *     role="roles/cloudfunctions.invoker",
 *     member="allUsers")
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var bucket = new Gcp.Storage.Bucket("bucket", new()
 *     {
 *         Name = "test-bucket",
 *         Location = "US",
 *     });
 *     var archive = new Gcp.Storage.BucketObject("archive", new()
 *     {
 *         Name = "index.zip",
 *         Bucket = bucket.Name,
 *         Source = new FileAsset("./path/to/zip/file/which/contains/code"),
 *     });
 *     var function = new Gcp.CloudFunctions.Function("function", new()
 *     {
 *         Name = "function-test",
 *         Description = "My function",
 *         Runtime = "nodejs16",
 *         AvailableMemoryMb = 128,
 *         SourceArchiveBucket = bucket.Name,
 *         SourceArchiveObject = archive.Name,
 *         TriggerHttp = true,
 *         EntryPoint = "helloGET",
 *     });
 *     // IAM entry for all users to invoke the function
 *     var invoker = new Gcp.CloudFunctions.FunctionIamMember("invoker", new()
 *     {
 *         Project = function.Project,
 *         Region = function.Region,
 *         CloudFunction = function.Name,
 *         Role = "roles/cloudfunctions.invoker",
 *         Member = "allUsers",
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudfunctions"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		bucket, err := storage.NewBucket(ctx, "bucket", &storage.BucketArgs{
 * 			Name:     pulumi.String("test-bucket"),
 * 			Location: pulumi.String("US"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		archive, err := storage.NewBucketObject(ctx, "archive", &storage.BucketObjectArgs{
 * 			Name:   pulumi.String("index.zip"),
 * 			Bucket: bucket.Name,
 * 			Source: pulumi.NewFileAsset("./path/to/zip/file/which/contains/code"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		function, err := cloudfunctions.NewFunction(ctx, "function", &cloudfunctions.FunctionArgs{
 * 			Name:                pulumi.String("function-test"),
 * 			Description:         pulumi.String("My function"),
 * 			Runtime:             pulumi.String("nodejs16"),
 * 			AvailableMemoryMb:   pulumi.Int(128),
 * 			SourceArchiveBucket: bucket.Name,
 * 			SourceArchiveObject: archive.Name,
 * 			TriggerHttp:         pulumi.Bool(true),
 * 			EntryPoint:          pulumi.String("helloGET"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		// IAM entry for all users to invoke the function
 * 		_, err = cloudfunctions.NewFunctionIamMember(ctx, "invoker", &cloudfunctions.FunctionIamMemberArgs{
 * 			Project:       function.Project,
 * 			Region:        function.Region,
 * 			CloudFunction: function.Name,
 * 			Role:          pulumi.String("roles/cloudfunctions.invoker"),
 * 			Member:        pulumi.String("allUsers"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import com.pulumi.gcp.storage.BucketObject;
 * import com.pulumi.gcp.storage.BucketObjectArgs;
 * import com.pulumi.gcp.cloudfunctions.Function;
 * import com.pulumi.gcp.cloudfunctions.FunctionArgs;
 * import com.pulumi.gcp.cloudfunctions.FunctionIamMember;
 * import com.pulumi.gcp.cloudfunctions.FunctionIamMemberArgs;
 * import com.pulumi.asset.FileAsset;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var bucket = new Bucket("bucket", BucketArgs.builder()
 *             .name("test-bucket")
 *             .location("US")
 *             .build());
 *         var archive = new BucketObject("archive", BucketObjectArgs.builder()
 *             .name("index.zip")
 *             .bucket(bucket.name())
 *             .source(new FileAsset("./path/to/zip/file/which/contains/code"))
 *             .build());
 *         var function = new Function("function", FunctionArgs.builder()
 *             .name("function-test")
 *             .description("My function")
 *             .runtime("nodejs16")
 *             .availableMemoryMb(128)
 *             .sourceArchiveBucket(bucket.name())
 *             .sourceArchiveObject(archive.name())
 *             .triggerHttp(true)
 *             .entryPoint("helloGET")
 *             .build());
 *         // IAM entry for all users to invoke the function
 *         var invoker = new FunctionIamMember("invoker", FunctionIamMemberArgs.builder()
 *             .project(function.project())
 *             .region(function.region())
 *             .cloudFunction(function.name())
 *             .role("roles/cloudfunctions.invoker")
 *             .member("allUsers")
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   bucket:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: test-bucket
 *       location: US
 *   archive:
 *     type: gcp:storage:BucketObject
 *     properties:
 *       name: index.zip
 *       bucket: ${bucket.name}
 *       source:
 *         fn::FileAsset: ./path/to/zip/file/which/contains/code
 *   function:
 *     type: gcp:cloudfunctions:Function
 *     properties:
 *       name: function-test
 *       description: My function
 *       runtime: nodejs16
 *       availableMemoryMb: 128
 *       sourceArchiveBucket: ${bucket.name}
 *       sourceArchiveObject: ${archive.name}
 *       triggerHttp: true
 *       entryPoint: helloGET
 *   # IAM entry for all users to invoke the function
 *   invoker:
 *     type: gcp:cloudfunctions:FunctionIamMember
 *     properties:
 *       project: ${function.project}
 *       region: ${function.region}
 *       cloudFunction: ${function.name}
 *       role: roles/cloudfunctions.invoker
 *       member: allUsers
 * ```
 * 
 * ### Single User
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const bucket = new gcp.storage.Bucket("bucket", {
 *     name: "test-bucket",
 *     location: "US",
 * });
 * const archive = new gcp.storage.BucketObject("archive", {
 *     name: "index.zip",
 *     bucket: bucket.name,
 *     source: new pulumi.asset.FileAsset("./path/to/zip/file/which/contains/code"),
 * });
 * const _function = new gcp.cloudfunctions.Function("function", {
 *     name: "function-test",
 *     description: "My function",
 *     runtime: "nodejs16",
 *     availableMemoryMb: 128,
 *     sourceArchiveBucket: bucket.name,
 *     sourceArchiveObject: archive.name,
 *     triggerHttp: true,
 *     httpsTriggerSecurityLevel: "SECURE_ALWAYS",
 *     timeout: 60,
 *     entryPoint: "helloGET",
 *     labels: {
 *         "my-label": "my-label-value",
 *     },
 *     environmentVariables: {
 *         MY_ENV_VAR: "my-env-var-value",
 *     },
 * });
 * // IAM entry for a single user to invoke the function
 * const invoker = new gcp.cloudfunctions.FunctionIamMember("invoker", {
 *     project: _function.project,
 *     region: _function.region,
 *     cloudFunction: _function.name,
 *     role: "roles/cloudfunctions.invoker",
 *     member: "user:[email protected]",
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * bucket = gcp.storage.Bucket("bucket",
 *     name="test-bucket",
 *     location="US")
 * archive = gcp.storage.BucketObject("archive",
 *     name="index.zip",
 *     bucket=bucket.name,
 *     source=pulumi.FileAsset("./path/to/zip/file/which/contains/code"))
 * function = gcp.cloudfunctions.Function("function",
 *     name="function-test",
 *     description="My function",
 *     runtime="nodejs16",
 *     available_memory_mb=128,
 *     source_archive_bucket=bucket.name,
 *     source_archive_object=archive.name,
 *     trigger_http=True,
 *     https_trigger_security_level="SECURE_ALWAYS",
 *     timeout=60,
 *     entry_point="helloGET",
 *     labels={
 *         "my-label": "my-label-value",
 *     },
 *     environment_variables={
 *         "MY_ENV_VAR": "my-env-var-value",
 *     })
 * # IAM entry for a single user to invoke the function
 * invoker = gcp.cloudfunctions.FunctionIamMember("invoker",
 *     project=function.project,
 *     region=function.region,
 *     cloud_function=function.name,
 *     role="roles/cloudfunctions.invoker",
 *     member="user:[email protected]")
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var bucket = new Gcp.Storage.Bucket("bucket", new()
 *     {
 *         Name = "test-bucket",
 *         Location = "US",
 *     });
 *     var archive = new Gcp.Storage.BucketObject("archive", new()
 *     {
 *         Name = "index.zip",
 *         Bucket = bucket.Name,
 *         Source = new FileAsset("./path/to/zip/file/which/contains/code"),
 *     });
 *     var function = new Gcp.CloudFunctions.Function("function", new()
 *     {
 *         Name = "function-test",
 *         Description = "My function",
 *         Runtime = "nodejs16",
 *         AvailableMemoryMb = 128,
 *         SourceArchiveBucket = bucket.Name,
 *         SourceArchiveObject = archive.Name,
 *         TriggerHttp = true,
 *         HttpsTriggerSecurityLevel = "SECURE_ALWAYS",
 *         Timeout = 60,
 *         EntryPoint = "helloGET",
 *         Labels =
 *         {
 *             { "my-label", "my-label-value" },
 *         },
 *         EnvironmentVariables =
 *         {
 *             { "MY_ENV_VAR", "my-env-var-value" },
 *         },
 *     });
 *     // IAM entry for a single user to invoke the function
 *     var invoker = new Gcp.CloudFunctions.FunctionIamMember("invoker", new()
 *     {
 *         Project = function.Project,
 *         Region = function.Region,
 *         CloudFunction = function.Name,
 *         Role = "roles/cloudfunctions.invoker",
 *         Member = "user:[email protected]",
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/cloudfunctions"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		bucket, err := storage.NewBucket(ctx, "bucket", &storage.BucketArgs{
 * 			Name:     pulumi.String("test-bucket"),
 * 			Location: pulumi.String("US"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		archive, err := storage.NewBucketObject(ctx, "archive", &storage.BucketObjectArgs{
 * 			Name:   pulumi.String("index.zip"),
 * 			Bucket: bucket.Name,
 * 			Source: pulumi.NewFileAsset("./path/to/zip/file/which/contains/code"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		function, err := cloudfunctions.NewFunction(ctx, "function", &cloudfunctions.FunctionArgs{
 * 			Name:                      pulumi.String("function-test"),
 * 			Description:               pulumi.String("My function"),
 * 			Runtime:                   pulumi.String("nodejs16"),
 * 			AvailableMemoryMb:         pulumi.Int(128),
 * 			SourceArchiveBucket:       bucket.Name,
 * 			SourceArchiveObject:       archive.Name,
 * 			TriggerHttp:               pulumi.Bool(true),
 * 			HttpsTriggerSecurityLevel: pulumi.String("SECURE_ALWAYS"),
 * 			Timeout:                   pulumi.Int(60),
 * 			EntryPoint:                pulumi.String("helloGET"),
 * 			Labels: pulumi.Map{
 * 				"my-label": pulumi.Any("my-label-value"),
 * 			},
 * 			EnvironmentVariables: pulumi.Map{
 * 				"MY_ENV_VAR": pulumi.Any("my-env-var-value"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		// IAM entry for a single user to invoke the function
 * 		_, err = cloudfunctions.NewFunctionIamMember(ctx, "invoker", &cloudfunctions.FunctionIamMemberArgs{
 * 			Project:       function.Project,
 * 			Region:        function.Region,
 * 			CloudFunction: function.Name,
 * 			Role:          pulumi.String("roles/cloudfunctions.invoker"),
 * 			Member:        pulumi.String("user:[email protected]"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import com.pulumi.gcp.storage.BucketObject;
 * import com.pulumi.gcp.storage.BucketObjectArgs;
 * import com.pulumi.gcp.cloudfunctions.Function;
 * import com.pulumi.gcp.cloudfunctions.FunctionArgs;
 * import com.pulumi.gcp.cloudfunctions.FunctionIamMember;
 * import com.pulumi.gcp.cloudfunctions.FunctionIamMemberArgs;
 * import com.pulumi.asset.FileAsset;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var bucket = new Bucket("bucket", BucketArgs.builder()
 *             .name("test-bucket")
 *             .location("US")
 *             .build());
 *         var archive = new BucketObject("archive", BucketObjectArgs.builder()
 *             .name("index.zip")
 *             .bucket(bucket.name())
 *             .source(new FileAsset("./path/to/zip/file/which/contains/code"))
 *             .build());
 *         var function = new Function("function", FunctionArgs.builder()
 *             .name("function-test")
 *             .description("My function")
 *             .runtime("nodejs16")
 *             .availableMemoryMb(128)
 *             .sourceArchiveBucket(bucket.name())
 *             .sourceArchiveObject(archive.name())
 *             .triggerHttp(true)
 *             .httpsTriggerSecurityLevel("SECURE_ALWAYS")
 *             .timeout(60)
 *             .entryPoint("helloGET")
 *             .labels(Map.of("my-label", "my-label-value"))
 *             .environmentVariables(Map.of("MY_ENV_VAR", "my-env-var-value"))
 *             .build());
 *         // IAM entry for a single user to invoke the function
 *         var invoker = new FunctionIamMember("invoker", FunctionIamMemberArgs.builder()
 *             .project(function.project())
 *             .region(function.region())
 *             .cloudFunction(function.name())
 *             .role("roles/cloudfunctions.invoker")
 *             .member("user:[email protected]")
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   bucket:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: test-bucket
 *       location: US
 *   archive:
 *     type: gcp:storage:BucketObject
 *     properties:
 *       name: index.zip
 *       bucket: ${bucket.name}
 *       source:
 *         fn::FileAsset: ./path/to/zip/file/which/contains/code
 *   function:
 *     type: gcp:cloudfunctions:Function
 *     properties:
 *       name: function-test
 *       description: My function
 *       runtime: nodejs16
 *       availableMemoryMb: 128
 *       sourceArchiveBucket: ${bucket.name}
 *       sourceArchiveObject: ${archive.name}
 *       triggerHttp: true
 *       httpsTriggerSecurityLevel: SECURE_ALWAYS
 *       timeout: 60
 *       entryPoint: helloGET
 *       labels:
 *         my-label: my-label-value
 *       environmentVariables:
 *         MY_ENV_VAR: my-env-var-value
 *   # IAM entry for a single user to invoke the function
 *   invoker:
 *     type: gcp:cloudfunctions:FunctionIamMember
 *     properties:
 *       project: ${function.project}
 *       region: ${function.region}
 *       cloudFunction: ${function.name}
 *       role: roles/cloudfunctions.invoker
 *       member: user:[email protected]
 * ```
 * 
 * ## Import
 * Functions can be imported using the `name` or `{{project}}/{{region}}/name`, e.g.
 * * `{{project}}/{{region}}/{{name}}`
 * * `{{name}}`
 * When using the `pulumi import` command, Functions can be imported using one of the formats above. For example:
 * ```sh
 * $ pulumi import gcp:cloudfunctions/function:Function default {{project}}/{{region}}/{{name}}
 * ```
 * ```sh
 * $ pulumi import gcp:cloudfunctions/function:Function default {{name}}
 * ```
 */
public class Function internal constructor(
    override val javaResource: com.pulumi.gcp.cloudfunctions.Function,
) : KotlinCustomResource(javaResource, FunctionMapper) {
    /**
     * Memory (in MB), available to the function. Default value is `256`. Possible values include `128`, `256`, `512`, `1024`, etc.
     */
    public val availableMemoryMb: Output?
        get() = javaResource.availableMemoryMb().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A set of key/value environment variable pairs available during build time.
     */
    public val buildEnvironmentVariables: Output>?
        get() = javaResource.buildEnvironmentVariables().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 -> args0.key.to(args0.value) }).toMap()
            }).orElse(null)
        })

    /**
     * Name of the Cloud Build Custom Worker Pool that should be used to build the function.
     */
    public val buildWorkerPool: Output?
        get() = javaResource.buildWorkerPool().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Description of the function.
     */
    public val description: Output?
        get() = javaResource.description().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Docker Registry to use for storing the function's Docker images. Allowed values are ARTIFACT_REGISTRY (default) and CONTAINER_REGISTRY.
     */
    public val dockerRegistry: Output
        get() = javaResource.dockerRegistry().applyValue({ args0 -> args0 })

    /**
     * User-managed repository created in Artifact Registry to which the function's Docker image will be pushed after it is built by Cloud Build. May optionally be encrypted with a customer-managed encryption key (CMEK). If unspecified and `docker_registry` is not explicitly set to `CONTAINER_REGISTRY`, GCF will create and use a default Artifact Registry repository named 'gcf-artifacts' in the region.
     */
    public val dockerRepository: Output?
        get() = javaResource.dockerRepository().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    public val effectiveLabels: Output>
        get() = javaResource.effectiveLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Name of the function that will be executed when the Google Cloud Function is triggered.
     */
    public val entryPoint: Output?
        get() = javaResource.entryPoint().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A set of key/value environment variable pairs to assign to the function.
     */
    public val environmentVariables: Output>?
        get() = javaResource.environmentVariables().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 -> args0.key.to(args0.value) }).toMap()
            }).orElse(null)
        })

    /**
     * A source that fires events in response to a condition in another service. Structure is documented below. Cannot be used with `trigger_http`.
     */
    public val eventTrigger: Output
        get() = javaResource.eventTrigger().applyValue({ args0 ->
            args0.let({ args0 ->
                functionEventTriggerToKotlin(args0)
            })
        })

    /**
     * The security level for the function. The following options are available:
     * * `SECURE_ALWAYS` Requests for a URL that match this handler that do not use HTTPS are automatically redirected to the HTTPS URL with the same path. Query parameters are reserved for the redirect.
     * * `SECURE_OPTIONAL` Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used and respond accordingly.
     */
    public val httpsTriggerSecurityLevel: Output
        get() = javaResource.httpsTriggerSecurityLevel().applyValue({ args0 -> args0 })

    /**
     * URL which triggers function execution. Returned only if `trigger_http` is used.
     */
    public val httpsTriggerUrl: Output
        get() = javaResource.httpsTriggerUrl().applyValue({ args0 -> args0 })

    /**
     * String value that controls what traffic can reach the function. Allowed values are `ALLOW_ALL`, `ALLOW_INTERNAL_AND_GCLB` and `ALLOW_INTERNAL_ONLY`. Check [ingress documentation](https://cloud.google.com/functions/docs/networking/network-settings#ingress_settings) to see the impact of each settings value. Changes to this field will recreate the cloud function.
     */
    public val ingressSettings: Output?
        get() = javaResource.ingressSettings().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * 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}`.
     * If specified, you must also provide an artifact registry repository using the `docker_repository` field that was created with the same KMS crypto key. Before deploying, please complete all pre-requisites described in https://cloud.google.com/functions/docs/securing/cmek#granting_service_accounts_access_to_the_key
     */
    public val kmsKeyName: Output?
        get() = javaResource.kmsKeyName().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A set of key/value label pairs to assign to the function. Label keys must follow the requirements at https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field 'effective_labels' for all of the labels present on the resource.
     */
    public val labels: Output>?
        get() = javaResource.labels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.key.to(args0.value)
                }).toMap()
            }).orElse(null)
        })

    /**
     * The limit on the maximum number of function instances that may coexist at a given time.
     */
    public val maxInstances: Output
        get() = javaResource.maxInstances().applyValue({ args0 -> args0 })

    /**
     * The limit on the minimum number of function instances that may coexist at a given time.
     */
    public val minInstances: Output?
        get() = javaResource.minInstances().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A user-defined name of the function. Function names must be unique globally.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * Project of the function. If it is not provided, the provider project is used.
     */
    public val project: Output
        get() = javaResource.project().applyValue({ args0 -> args0 })

    /**
     * The combination of labels configured directly on the resource and default labels configured on the provider.
     */
    public val pulumiLabels: Output>
        get() = javaResource.pulumiLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Region of function. If it is not provided, the provider region is used.
     */
    public val region: Output
        get() = javaResource.region().applyValue({ args0 -> args0 })

    /**
     * The runtime in which the function is going to run.
     * Eg. `"nodejs16"`, `"python39"`, `"dotnet3"`, `"go116"`, `"java11"`, `"ruby30"`, `"php74"`, etc. Check the [official doc](https://cloud.google.com/functions/docs/concepts/exec#runtimes) for the up-to-date list.
     * - - -
     */
    public val runtime: Output
        get() = javaResource.runtime().applyValue({ args0 -> args0 })

    /**
     * Secret environment variables configuration. Structure is documented below.
     */
    public val secretEnvironmentVariables: Output>?
        get() = javaResource.secretEnvironmentVariables().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 ->
                        functionSecretEnvironmentVariableToKotlin(args0)
                    })
                })
            }).orElse(null)
        })

    /**
     * Secret volumes configuration. Structure is documented below.
     */
    public val secretVolumes: Output>?
        get() = javaResource.secretVolumes().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 ->
                        functionSecretVolumeToKotlin(args0)
                    })
                })
            }).orElse(null)
        })

    /**
     * If provided, the self-provided service account to run the function with.
     */
    public val serviceAccountEmail: Output
        get() = javaResource.serviceAccountEmail().applyValue({ args0 -> args0 })

    /**
     * The GCS bucket containing the zip archive which contains the function.
     */
    public val sourceArchiveBucket: Output?
        get() = javaResource.sourceArchiveBucket().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The source archive object (file) in archive bucket.
     */
    public val sourceArchiveObject: Output?
        get() = javaResource.sourceArchiveObject().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Represents parameters related to source repository where a function is hosted.
     * Cannot be set alongside `source_archive_bucket` or `source_archive_object`. Structure is documented below. It must match the pattern `projects/{project}/locations/{location}/repositories/{repository}`.*
     */
    public val sourceRepository: Output?
        get() = javaResource.sourceRepository().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> functionSourceRepositoryToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * Describes the current stage of a deployment.
     */
    public val status: Output
        get() = javaResource.status().applyValue({ args0 -> args0 })

    /**
     * Timeout (in seconds) for the function. Default value is 60 seconds. Cannot be more than 540 seconds.
     */
    public val timeout: Output?
        get() = javaResource.timeout().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Boolean variable. Any HTTP request (of a supported type) to the endpoint will trigger function execution. Supported HTTP request types are: POST, PUT, GET, DELETE, and OPTIONS. Endpoint is returned as `https_trigger_url`. Cannot be used with `event_trigger`.
     */
    public val triggerHttp: Output?
        get() = javaResource.triggerHttp().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The version identifier of the Cloud Function. Each deployment attempt results in a new version of a function being
     * created.
     */
    public val versionId: Output
        get() = javaResource.versionId().applyValue({ args0 -> args0 })

    /**
     * The VPC Network Connector that this cloud function can connect to. It should be set up as fully-qualified URI. The format of this field is `projects/*/locations/*/connectors/*`.
     * */*/*/
     */
    public val vpcConnector: Output?
        get() = javaResource.vpcConnector().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The egress settings for the connector, controlling what traffic is diverted through it. Allowed values are `ALL_TRAFFIC` and `PRIVATE_RANGES_ONLY`. Defaults to `PRIVATE_RANGES_ONLY`. If unset, this field preserves the previously set value.
     */
    public val vpcConnectorEgressSettings: Output
        get() = javaResource.vpcConnectorEgressSettings().applyValue({ args0 -> args0 })
}

public object FunctionMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.gcp.cloudfunctions.Function::class == javaResource::class

    override fun map(javaResource: Resource): Function = Function(
        javaResource as
            com.pulumi.gcp.cloudfunctions.Function,
    )
}

/**
 * @see [Function].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [Function].
 */
public suspend fun function(name: String, block: suspend FunctionResourceBuilder.() -> Unit): Function {
    val builder = FunctionResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [Function].
 * @param name The _unique_ name of the resulting resource.
 */
public fun function(name: String): Function {
    val builder = FunctionResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy