blob: 7fce801630d52720ccecf66d14954dcd0745f19d [file] [log] [blame]
= Google Cloud Functions Component
:doctitle: Google Cloud Functions
:shortname: google-functions
:artifactid: camel-google-functions
:description: Manage and invoke Google Cloud Functions
:since: 3.9
:supportlevel: Stable
:tabs-sync-option:
:component-header: Only producer is supported
//Manually maintained attributes
:group: Google
:camel-spring-boot-name: google-functions
*Since Camel {since}*
*{component-header}*
The Google Functions component provides access to https://cloud.google.com/functions/[Google Cloud Functions] via
the https://github.com/googleapis/java-functions[Google Cloud Functions Client for Java].
Maven users will need to add the following dependency to their pom.xml
for this component:
[source,xml]
------------------------------------------------------
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-google-functions</artifactId>
<!-- use the same version as your Camel core version -->
<version>x.x.x</version>
</dependency>
------------------------------------------------------
[[GoogleFunctions-AuthenticationConfiguration]]
== Authentication Configuration
Google Functions component authentication is targeted for use with the GCP Service Accounts.
For more information please refer to https://github.com/googleapis/google-cloud-java#authentication[Google Cloud Authentication].
When you have the **service account key** you can provide authentication credentials to your application code.
Google security credentials can be set through the component endpoint:
[source,java]
--------------------------------------------------------
String endpoint = "google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json";
--------------------------------------------------------
Or by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
--------------------------------------------------------
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
--------------------------------------------------------
== URI Format
--------------------------------------------------------
google-functions://functionName[?options]
--------------------------------------------------------
You can append query options to the URI in the following format,
`?options=value&option2=value&...`
For example in order to call the function `myCamelFunction` from the project `myProject` and location `us-central1`, use the following snippet:
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.to("google-functions://myCamelFunction?project=myProject&location=us-central1&operation=callFunction&serviceAccountKey=/home/user/Downloads/my-key.json");
--------------------------------------------------------------------------------
// component-configure options: START
// component-configure options: END
// component options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
// component options: END
// endpoint options: START
// endpoint options: END
== Usage
// component headers: START
include::partial$component-endpoint-headers.adoc[]
// component headers: END
=== Google Functions Producer operations
Google Functions component provides the following operation on the producer side:
- listFunctions
- getFunction
- callFunction
- generateDownloadUrl
- generateUploadUrl
- createFunction
- updateFunction
- deleteFunction
If you don't specify an operation by default the producer will use the `callFunction` operation.
=== Advanced component configuration
If you need to have more control over the `client` instance configuration, you can create your own instance and refer to it in your Camel google-functions component configuration:
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.to("google-functions://myCamelFunction?client=#myClient");
--------------------------------------------------------------------------------
=== Google Functions Producer Operation examples
- ListFunctions: This operation invoke the Google Functions client and get the list of cloud Functions
[source,java]
--------------------------------------------------------------------------------
//list functions
from("direct:start")
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=listFunctions")
.log("body:${body}")
--------------------------------------------------------------------------------
This operation will get the list of cloud functions for the project `myProject` and location `us-central1`.
- GetFunction: this operation get the Cloud Functions object
[source,java]
--------------------------------------------------------------------------------
//get function
from("direct:start")
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=getFunction")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
This operation will get the `CloudFunction` object for the project `myProject`, location `us-central1` and functionName `myCamelFunction`.
- CallFunction: this operation call the function using an HTTP request
[source,java]
--------------------------------------------------------------------------------
//call function
from("direct:start")
.process(exchange -> {
exchange.getIn().setBody("just a message");
})
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=callFunction")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
- GenerateDownloadUrl: this operation generate the signed URL for downloading deployed function source code.
[source,java]
--------------------------------------------------------------------------------
//generate download url
from("direct:start")
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=generateDownloadUrl")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
- GenerateUploadUrl: this operation generate a signed URL for uploading a function source code.
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=generateUploadUrl")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
- createFunction: this operation creates a new function.
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.process(exchange -> {
exchange.getIn().setHeader(GoogleCloudFunctionsConstants.ENTRY_POINT, "com.example.Example");
exchange.getIn().setHeader(GoogleCloudFunctionsConstants.RUNTIME, "java11");
exchange.getIn().setHeader(GoogleCloudFunctionsConstants.SOURCE_ARCHIVE_URL, "gs://myBucket/source.zip");
})
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=createFunction")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
- updateFunction: this operation updates existing function.
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.process(exchange -> {
UpdateFunctionRequest request = UpdateFunctionRequest.newBuilder()
.setFunction(CloudFunction.newBuilder().build())
.setUpdateMask(FieldMask.newBuilder().build()).build();
exchange.getIn().setBody(request);
})
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=updateFunction&pojoRequest=true")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
- deleteFunction: this operation Deletes a function with the given name from the specified project.
[source,java]
--------------------------------------------------------------------------------
from("direct:start")
.to("google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json&project=myProject&location=us-central1&operation=deleteFunction")
.log("body:${body}")
.to("mock:result");
--------------------------------------------------------------------------------
include::spring-boot:partial$starter.adoc[]