Google Cloud Functions

Поддерживается только производитель

Компонент Google Functions обеспечивает доступ к Google Cloud Functions (opens in a new tab) через клиент Google Cloud Functions для Java (opens in a new tab) .

Пользователям Maven необходимо добавить следующую зависимость в свой pom.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>

Authentication Configuration

Аутентификация компонента Google Functions предназначена для использования с учётными записями сервисов GCP. Подробнее см. в разделе «Аутентификация в Google Cloud» (opens in a new tab) .

Имея ключ учётной записи службы , вы можете предоставить учётные данные для аутентификации коду приложения. Учётные данные безопасности Google можно задать через конечную точку компонента:

String endpoint = "google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json";

Или установив переменную окружения GOOGLE_APPLICATION_CREDENTIALS:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"

URI Format

google-functions://functionName[?options]

Вы можете добавить параметры запроса к URI в следующем формате:?options=value&option2=value&…​

Например, чтобы вызвать функцию myCamelFunctionиз проекта myProjectи местоположения us-central1, используйте следующий фрагмент:

from("direct:start")
    .to("google-functions://myCamelFunction?project=myProject&location=us-central1&operation=callFunction&serviceAccountKey=/home/user/Downloads/my-key.json");

Configuring Options

Компоненты Camel настраиваются на двух отдельных уровнях:

  • уровень компонентов

  • уровень конечной точки

Configuring Component Options

На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.

Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.

У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.

Вы можете настроить компоненты, используя:

  • Компонент DSL (opens in a new tab) .

  • в файле конфигурации ( application.propertiesфайлы *.yaml, и т.д.).

  • непосредственно в коде Java.

Configuring Endpoint Options

астройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.

Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.

Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .

Заполнители свойств обеспечивают несколько преимуществ:

  • Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Они позволяют вынести конфигурацию за пределы кода.

  • Они помогают коду стать более гибким и пригодным для повторного использования.

В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.

Component Options

The Google Cloud Functions component supports 2 options, which are listed below.

lazyStartProducer (producer)

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

autowiredEnabled (advanced)

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: boolean

Endpoint Options

Конечная точка Google Cloud Functions настраивается с использованием синтаксиса URI:

google-functions:functionName

Со следующими параметрами пути и запроса :

Path Parameters (1 parameters)

functionName (common)

  • Обязательно Имя функции, определенное пользователем.

  • По умолчанию:

  • Тип: String

Query Parameters (7 parameters)

serviceAccountKey (common)

  • Обязательно Имя функции, определенное пользователем.

  • По умолчанию:

  • Тип: String

location (producer)

  • Тип: Местоположение (регион) облака Google, где расположена функция.

  • По умолчанию:

  • Тип: String

operation (producer)

  • Операция, которую необходимо выполнить над производителем.

    Значения перечисления:

    • listFunctions

    • getFunction

    • callFunction

    • generateDownloadUrl

    • generateUploadUrl

    • createFunction

    • updateFunction

    • deleteFunction

  • По умолчанию:

  • Тип: GoogleCloudFunctionsOperations

pojoRequest (producer)

  • Тип: Указывает, является ли запрос запросом pojo.

  • По умолчанию: false

  • Тип: boolean

project (producer)

  • Имя проекта Google Cloud, в котором находится функция.

  • По умолчанию:

  • Тип: String

lazyStartProducer (producer (advanced))

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

client (advanced)

  • Autowired Клиент, который будет использоваться при вызове службы.

  • По умолчанию:

  • Тип: CloudFunctionsServiceClient

Usage

Message Headers

Компонент Google Cloud Functions поддерживает 5 заголовков сообщений, которые перечислены ниже:

GoogleCloudFunctionsOperation (producer)

Constant: OPERATION (opens in a new tab)

  • Операция, которую необходимо выполнить.

    Значения перечисления:

    • listFunctions

    • getFunction

    • callFunction

    • generateDownloadUrl

    • generateUploadUrl

    • createFunction

    • updateFunction

    • deleteFunction

  • По умолчанию:

  • Тип: GoogleCloudFunctionsOperations

GoogleCloudFunctionsEntryPoint (producer)

Constant: ENTRY_POINT (opens in a new tab)

  • Тип: Имя функции (как определено в исходном коде), которая будет выполнена. Используется для операции createFunction.

  • По умолчанию:

  • Тип: String

GoogleCloudFunctionsRuntime (producer)

Constant: RUNTIME (opens in a new tab)

  • Среда выполнения, в которой будет запущена функция. Возможные значения: nodejs10 nodejs12 nodejs14 python37 python38 python39 go111 go113 java11 dotnet3 ruby26 nodejs6 nodejs8 Используется для операции createFunction..

  • По умолчанию:

  • Тип: String

GoogleCloudFunctionsSourceArchiveUrl (producer)

Constant: SOURCE_ARCHIVE_URL (opens in a new tab)

  • Тип: URL-адрес облачного хранилища Google, начинающийся с gs://, указывает на ZIP-архив, содержащий функцию. Используется для операции createFunction.

  • По умолчанию:

  • Тип: String

GoogleCloudFunctionsResponseObject (producer)

Constant: RESPONSE_OBJECT (opens in a new tab)

  • Объект ответа, полученный в результате вызова клиента Google Functions.

  • По умолчанию:

  • Тип: Object

Google Functions Producer operations

Компонент Google Functions обеспечивает следующую операцию на стороне производителя:

  • listFunctions

  • getFunction

  • callFunction

  • generateDownloadUrl

  • generateUploadUrl

  • createFunction

  • updateFunction

  • deleteFunction

Если вы не укажете операцию по умолчанию, производитель будет использовать callFunction ее.

Advanced component configuration

Если вам необходимо больше контроля над clientконфигурацией экземпляра, вы можете создать свой собственный экземпляр и ссылаться на него в конфигурации компонента Camel google-functions:

from("direct:start")
    .to("google-functions://myCamelFunction?client=#myClient");

Google Functions Producer Operation examples

  • ListFunctions: Эта операция вызывает клиент Google Functions и получает список облачных функций.
//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}")

Эта операция получит список облачных функций для проекта myProjectи местоположения us-central1.

  • GetFunction: эта операция получает объект Cloud Functions
//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");

Эта операция получит CloudFunctionобъект для проекта myProject, местоположение us-central1и functionName myCamelFunction.

  • CallFunction: эта операция вызывает функцию с помощью HTTP-запроса
//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: эта операция генерирует подписанный URL для загрузки исходного кода развернутой функции.
//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:эта операция генерирует подписанный URL для загрузки исходного кода функции.
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: эта операция создает новую функцию.
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: эта операция обновляет существующую функцию.
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: эта операция удаляет функцию с заданным именем из указанного проекта.
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");

Spring Boot Auto-Configuration

При использовании google-functions с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-google-functions-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

Компонент поддерживает 3 опции, которые перечислены ниже.

camel.component.google-functions.autowired-enabled

  • Тип: Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: Boolean

camel.component.google-functions.enabled

  • Включить ли автоматическую настройку компонента google-functions. По умолчанию эта опция включена.

  • По умолчанию:

  • Тип: Boolean

camel.component.google-functions.lazy-start-producer

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: Boolean