// Copyright 2019 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. // syntax = "proto3"; package google.cloud.functions.v1beta2; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/functions/v1beta2;functions"; option java_multiple_files = true; option java_outer_classname = "FunctionsProto"; option java_package = "com.google.cloud.functions.v1beta2"; option objc_class_prefix = "GCF"; // A service that application uses to manipulate triggers and functions. service CloudFunctionsService { option (google.api.default_host) = "cloudfunctions.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; // Returns a list of functions that belong to the requested project. rpc ListFunctions(ListFunctionsRequest) returns (ListFunctionsResponse) { option (google.api.http) = { get: "/v1beta2/{location=projects/*/locations/*}/functions" }; option (google.api.method_signature) = "location"; } // Returns a function with the given name from the requested project. rpc GetFunction(GetFunctionRequest) returns (CloudFunction) { option (google.api.http) = { get: "/v1beta2/{name=projects/*/locations/*/functions/*}" }; option (google.api.method_signature) = "name"; } // Creates a new function. If a function with the given name already exists in // the specified project, the long running operation will return // `ALREADY_EXISTS` error. rpc CreateFunction(CreateFunctionRequest) returns (google.longrunning.Operation) { option (google.api.http) = { post: "/v1beta2/{location=projects/*/locations/*}/functions" body: "function" }; option (google.api.method_signature) = "location,function"; option (google.longrunning.operation_info) = { response_type: "CloudFunction" metadata_type: "OperationMetadataV1Beta2" }; } // Updates existing function. rpc UpdateFunction(UpdateFunctionRequest) returns (google.longrunning.Operation) { option (google.api.http) = { put: "/v1beta2/{name=projects/*/locations/*/functions/*}" body: "function" }; option (google.api.method_signature) = "name,function"; option (google.longrunning.operation_info) = { response_type: "CloudFunction" metadata_type: "OperationMetadataV1Beta2" }; } // Deletes a function with the given name from the specified project. If the // given function is used by some trigger, the trigger will be updated to // remove this function. rpc DeleteFunction(DeleteFunctionRequest) returns (google.longrunning.Operation) { option (google.api.http) = { delete: "/v1beta2/{name=projects/*/locations/*/functions/*}" }; option (google.api.method_signature) = "name"; option (google.longrunning.operation_info) = { response_type: "google.protobuf.Empty" metadata_type: "OperationMetadataV1Beta2" }; } // Synchronously invokes a deployed Cloud Function. To be used for testing // purposes as very limited traffic is allowed. For more information on // the actual limits refer to [API Calls]( // https://cloud.google.com/functions/quotas#rate_limits). rpc CallFunction(CallFunctionRequest) returns (CallFunctionResponse) { option (google.api.http) = { post: "/v1beta2/{name=projects/*/locations/*/functions/*}:call" body: "*" }; option (google.api.method_signature) = "name,data"; } // Returns a signed URL for uploading a function source code. // For more information about the signed URL usage see: // https://cloud.google.com/storage/docs/access-control/signed-urls // Once the function source code upload is complete, the used signed // URL should be provided in CreateFunction or UpdateFunction request // as a reference to the function source code. // // When uploading source code to the generated signed URL, please follow // these restrictions: // // * Source file type should be a zip file. // * Source file size should not exceed 100MB limit. // * No credentials should be attached - the signed URLs provide access to the // target bucket using internal service identity; if credentials were // attached, the identity from the credentials would be used, but that // identity does not have permissions to upload files to the URL. // // When making a HTTP PUT request, these two headers need to be specified: // // * `content-type: application/zip` // * `x-goog-content-length-range: 0,104857600` // // And this header SHOULD NOT be specified: // // * `Authorization: Bearer YOUR_TOKEN` rpc GenerateUploadUrl(GenerateUploadUrlRequest) returns (GenerateUploadUrlResponse) { option (google.api.http) = { post: "/v1beta2/{parent=projects/*/locations/*}/functions:generateUploadUrl" body: "*" }; } // Returns a signed URL for downloading deployed function source code. // The URL is only valid for a limited period and should be used within // minutes after generation. // For more information about the signed URL usage see: // https://cloud.google.com/storage/docs/access-control/signed-urls rpc GenerateDownloadUrl(GenerateDownloadUrlRequest) returns (GenerateDownloadUrlResponse) { option (google.api.http) = { post: "/v1beta2/{name=projects/*/locations/*/functions/*}:generateDownloadUrl" body: "*" }; } } // Describes a Cloud Function that contains user computation executed in // response to an event. It encapsulate function and triggers configurations. message CloudFunction { option (google.api.resource) = { type: "cloudfunctions.googleapis.com/CloudFunction" pattern: "projects/{project}/locations/{location}/functions/{function}" }; // A user-defined name of the function. Function names must be unique // globally and match pattern `projects/*/locations/*/functions/*` string name = 1; // The location of the function source code. oneof source_code { // The Google Cloud Storage URL, starting with gs://, pointing to the zip // archive which contains the function. string source_archive_url = 14; // The hosted repository where the function is defined. SourceRepository source_repository = 3; // The URL pointing to the hosted repository where the function is defined. // There are supported Cloud Source Repository URLs in the following // formats: // // To refer to a specific commit: // `https://source.developers.google.com/projects/*/repos/*/revisions/*/paths/*` // To refer to a moveable alias (branch): // `https://source.developers.google.com/projects/*/repos/*/moveable-aliases/*/paths/*` // In particular, to refer to HEAD use `master` moveable alias. // To refer to a specific fixed alias (tag): // `https://source.developers.google.com/projects/*/repos/*/fixed-aliases/*/paths/*` // // You may omit `paths/*` if you want to use the main directory. string source_repository_url = 18; // The Google Cloud Storage signed URL used for source uploading, generated // by [google.cloud.functions.v1beta2.GenerateUploadUrl][] string source_upload_url = 16; } // An event that triggers the function. oneof trigger { // An HTTPS endpoint type of source that can be triggered via URL. HTTPSTrigger https_trigger = 6; // A source that fires events in response to a condition in another service. EventTrigger event_trigger = 12; } // Output only. Status of the function deployment. CloudFunctionStatus status = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Name of the most recent operation modifying the function. If // the function status is `DEPLOYING` or `DELETING`, then it points to the // active operation. string latest_operation = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; // 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`. string entry_point = 9; // The runtime in which to run the function. Required when deploying a new // function, optional when updating an existing function. For a complete // list of possible choices, see the // [`gcloud` command // reference](/sdk/gcloud/reference/functions/deploy#--runtime). string runtime = 23; // 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. google.protobuf.Duration timeout = 10; // The amount of memory in MB available for a function. // Defaults to 256MB. int32 available_memory_mb = 11; // The email of the function's service account. If empty, defaults to // `{project_id}@appspot.gserviceaccount.com`. string service_account = 13; // Output only. The last update timestamp of a Cloud Function. google.protobuf.Timestamp update_time = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The version identifier of the Cloud Function. Each deployment attempt // results in a new version of a function being created. int64 version_id = 20 [(google.api.field_behavior) = OUTPUT_ONLY]; // Labels associated with this Cloud Function. map labels = 21; // Environment variables that shall be available during function execution. map environment_variables = 22; // The limit on the maximum number of function instances that may coexist at a // given time. int32 max_instances = 24; // The VPC Network that this cloud function can connect to. It can be // either the fully-qualified URI, or the short name of the network resource. // If the short network name is used, the network must belong to the same // project. Otherwise, it must belong to a project within the same // organization. The format of this field is either // `projects/{project}/global/networks/{network}` or `{network}`, where // {project} is a project id where the network is defined, and {network} is // the short name of the network. // // This field is mutually exclusive with `vpc_connector` and will be replaced // by it. // // See [the VPC documentation](https://cloud.google.com/compute/docs/vpc) for // more information on connecting Cloud projects. string network = 25; // The VPC Network Connector that this cloud function can connect to. It can // be either the fully-qualified URI, or the short name of the network // connector resource. The format of this field is // `projects/*/locations/*/connectors/*` // // This field is mutually exclusive with `network` field and will eventually // replace it. // // See [the VPC documentation](https://cloud.google.com/compute/docs/vpc) for // more information on connecting Cloud projects. string vpc_connector = 26; } // Describes HTTPSTrigger, could be used to connect web hooks to function. message HTTPSTrigger { // Output only. The deployed url for the function. string url = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Describes EventTrigger, used to request events be sent from another // service. message EventTrigger { // `event_type` names contain the service that is sending an event and the // kind of event that was fired. Must be of the form // `providers/*/eventTypes/*` e.g. Directly handle a Message published to // Google Cloud Pub/Sub `providers/cloud.pubsub/eventTypes/topic.publish`. // // Handle an object changing in Google Cloud Storage: // `providers/cloud.storage/eventTypes/object.change` // // Handle a write to the Firebase Realtime Database: // `providers/google.firebase.database/eventTypes/ref.write` string event_type = 1; // Which instance of the source's service should send events. E.g. for Pub/Sub // this would be a Pub/Sub topic at `projects/*/topics/*`. For Google Cloud // Storage this would be a bucket at `projects/*/buckets/*`. For any source // that only supports one instance per-project, this should be the name of the // project (`projects/*`) string resource = 2; // The hostname of the service that should be observed. // // If no string is provided, the default service implementing the API will // be used. For example, `storage.googleapis.com` is the default for all // event types in the `google.storage` namespace. string service = 6; // Specifies policy for failed executions. FailurePolicy failure_policy = 5; } // Describes the location of the function source in a remote repository. message SourceRepository { // URL to the hosted repository where the function is defined. Only paths in // https://source.developers.google.com domain are supported. The path should // contain the name of the repository. string repository_url = 1; // The path within the repository where the function is defined. The path // should point to the directory where Cloud Functions files are located. Use // "/" if the function is defined directly in the root directory of a // repository. string source_path = 2; // The version of a function. Defaults to the latest version of the master // branch. oneof version { // The name of the branch from which the function should be fetched. string branch = 3; // The name of the tag that captures the state of the repository from // which the function should be fetched. string tag = 4; // The id of the revision that captures the state of the repository from // which the function should be fetched. string revision = 5; } // Output only. The id of the revision that was resolved at the moment of // function creation or update. For example when a user deployed from a // branch, it will be the revision id of the latest change on this branch at // that time. If user deployed from revision then this value will be always // equal to the revision specified by the user. string deployed_revision = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Describes the policy in case of function's execution failure. // If empty, then defaults to ignoring failures (i.e. not retrying them). message FailurePolicy { // Describes the retry policy in case of function's execution failure. // A function execution will be retried on any failure. // A failed execution will be retried up to 7 days with an exponential backoff // (capped at 10 seconds). // Retried execution is charged as any other execution. message Retry { } // Defines the action taken in case of a function execution failure. oneof action { // If specified, then the function will be retried in case of a failure. Retry retry = 1; } } // Request for the `CreateFunction` method. message CreateFunctionRequest { // Required. The project and location in which the function should be created, specified // in the format `projects/*/locations/*` string location = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "locations.googleapis.com/Location" } ]; // Required. Function to be created. CloudFunction function = 2 [(google.api.field_behavior) = REQUIRED]; } // Request for the `UpdateFunction` method. message UpdateFunctionRequest { // Required. The name of the function to be updated. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "cloudfunctions.googleapis.com/CloudFunction" }]; // Required. New version of the function. CloudFunction function = 2 [(google.api.field_behavior) = REQUIRED]; } // Describes the current stage of a deployment. enum CloudFunctionStatus { // Status not specified. STATUS_UNSPECIFIED = 0; // Successfully deployed. READY = 1; // Not deployed correctly - behavior is undefined. The item should be updated // or deleted to move it out of this state. FAILED = 2; // Creation or update in progress. DEPLOYING = 3; // Deletion in progress. DELETING = 4; } // Request for the `GetFunction` method. message GetFunctionRequest { // Required. The name of the function which details should be obtained. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "cloudfunctions.googleapis.com/CloudFunction" } ]; } // Request for the `ListFunctions` method. message ListFunctionsRequest { // Required. The project and location from which the function should be listed, // specified in the format `projects/*/locations/*` // If you want to list functions in all locations, use "-" in place of a // location. When listing functions in all locations, if one or more // location(s) are unreachable, the response will contain functions from all // reachable locations along with the names of any unreachable locations. string location = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "locations.googleapis.com/Location" } ]; // Maximum number of functions to return per call. int32 page_size = 2; // The value returned by the last // `ListFunctionsResponse`; indicates that // this is a continuation of a prior `ListFunctions` call, and that the // system should return the next page of data. string page_token = 3; } // Response for the `ListFunctions` method. message ListFunctionsResponse { // The functions that match the request. repeated CloudFunction functions = 1; // If not empty, indicates that there may be more functions that match // the request; this value should be passed in a new // [google.cloud.functions.v1beta2.ListFunctionsRequest][google.cloud.functions.v1beta2.ListFunctionsRequest] // to get more functions. string next_page_token = 2; // Locations that could not be reached. The response does not include any // functions from these locations. repeated string unreachable = 3; } // Request for the `DeleteFunction` method. message DeleteFunctionRequest { // Required. The name of the function which should be deleted. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "cloudfunctions.googleapis.com/CloudFunction" } ]; } // Request for the `CallFunction` method. message CallFunctionRequest { // Required. The name of the function to be called. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "cloudfunctions.googleapis.com/CloudFunction" } ]; // Required. Input to be passed to the function. string data = 2 [(google.api.field_behavior) = REQUIRED]; } // Response of `CallFunction` method. message CallFunctionResponse { // Execution id of function invocation. string execution_id = 1; // Result populated for successful execution of synchronous function. Will // not be populated if function does not return a result through context. string result = 2; // Either system or user-function generated error. Set if execution // was not successful. string error = 3; } // Request of `GenerateUploadUrl` method. message GenerateUploadUrlRequest { // The project and location in which the Google Cloud Storage signed URL // should be generated, specified in the format `projects/*/locations/*`. string parent = 1; } // Response of `GenerateUploadUrl` method. message GenerateUploadUrlResponse { // The generated Google Cloud Storage signed URL that should be used for a // function source code upload. The uploaded file should be a zip archive // which contains a function. string upload_url = 1; } // Request of `GenerateDownloadUrl` method. message GenerateDownloadUrlRequest { // The name of function for which source code Google Cloud Storage signed // URL should be generated. string name = 1; // The optional version of function. uint64 version_id = 2; } // Response of `GenerateDownloadUrl` method. message GenerateDownloadUrlResponse { // The generated Google Cloud Storage signed URL that should be used for // function source code download. string download_url = 1; }