Создание функции на Java
Создайте и выполните функцию на Java, которая приветствует пользователя.
Перед началом работы
Создайте каталог в Yandex Cloud.
Создайте функцию
- В консоли управления
перейдите в каталог, в котором хотите создать функцию. - Выберите сервис Cloud Functions.
- Нажмите кнопку Создать функцию.
- Введите имя функции —
java-function
. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать функцию, выполните команду:
yc serverless function create --name=java-function
Результат:
id: b09bhaokchn9********
folder_id: aoek49ghmknn********
created_at: "2019-06-14T10:03:37.475Z"
name: java-function
log_group_id: eolm8aoq9vcp********
http_invoke_url: https://functions.yandexcloud.net/b09bhaokchn9********
status: ACTIVE
Создать функцию можно с помощью метода API create.
Создать функцию можно с помощью плагина Yandex Cloud Toolkit
Создайте первую версию функции
Чтобы создать версию функции, вы можете воспользоваться одним из форматов загрузки кода. Для примера будет использован ZIP-архив.
Важно
Файл больше 3,5 МБ необходимо загружать через Object Storage. Подробнее об ограничениях читайте в разделе Квоты и лимиты в Cloud Functions.
Подготовьте ZIP-архив с кодом функции
-
Сохраните следующий код в файл с названием
Handler.java
:import java.util.HashMap; import java.util.Map; import java.util.function.Function; class Request { Map<String, String> queryStringParameters; } class Response { private int statusCode; private Map<String, String> headers; private Boolean isBase64Encoded; private String body; public Response(int statusCode, Map<String, String> headers, Boolean isBase64Encoded, String body) { this.statusCode = statusCode; this.headers = headers; this.isBase64Encoded = isBase64Encoded; this.body = body; } } public class Handler implements Function<Request, Response> { private Integer statusCode = 200; private Boolean isBase64Encoded = false; @Override public Response apply(Request request) { Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "text/plain"); String name = request.queryStringParameters.get("name"); return new Response(statusCode, headers, isBase64Encoded, String.format("Hello, %s!", name)); } }
-
Добавьте файл
Handler.java
в ZIP-архивhello-java.zip
.
Создайте версию функции
- В консоли управления
перейдите в каталог, в котором находится функция. - Выберите сервис Cloud Functions.
- Выберите функцию
java-function
. - В разделе Последняя версия нажмите кнопку Создать в редакторе.
- Выберите среду выполнения
java17
и нажмите кнопку Продолжить. - Задайте параметры версии:
- Способ —
ZIP-архив
. - Файл — прикрепите файл
hello-java.zip
. - Точка входа —
Handler
. - Таймаут, c —
3
. - Память —
128 МБ
. - Сервисный аккаунт —
Не выбрано
.
- Способ —
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать версию функции, выполните команду:
yc serverless function version create \
--function-name=java-function \
--runtime java11 \
--entrypoint Handler \
--memory 128m \
--execution-timeout 3s \
--source-path ./hello-java.zip
Где:
--function-name
— имя функции, версию которой вы хотите создать.--runtime
— среда выполнения.--entrypoint
— точка входа.--memory
— объем RAM.--execution-timeout
— максимальное время выполнения функции до таймаута.--source-path
— ZIP-архив с кодом функции и необходимыми зависимостями.
Результат:
done (1s)
id: d4evvn8obisa********
function_id: d4elpv8pft63********
created_at: "2020-08-01T19:09:19.531Z"
runtime: java11
entrypoint: Handler
resources:
memory: "134217728"
execution_timeout: 3s
image_size: "4096"
status: ACTIVE
tags:
- $latest
log_group_id: ckg3qh8h363p********
Создать версию функции можно с помощью метода API createVersion.
Создать версию функции можно с помощью плагина Yandex Cloud Toolkit
Вызовите функцию
Примечание
Чтобы любой пользователь мог вызывать функцию, необходимо сделать ее публичной. Подробнее о правах читайте в разделе Управление доступом в Cloud Functions.
- В консоли управления
перейдите в каталог, в котором находится функция. - Выберите сервис Cloud Functions.
- Выберите функцию.
- Перейдите на вкладку Тестирование.
- В поле Тег версии укажите
$latest
, чтобы вызвать последнюю версию функции. - В поле Шаблон данных выберите
Без шаблона
. - В поле Входные данные введите:
{"queryStringParameters": {"name": "Username"}}
- Нажмите кнопку Запустить тест.
- В разделе Результат тестирования, в поле Состояние функции, будет показан статус тестирования. Важно: максимальное время выполнения функции до таймаута (включая начальную инициализацию при первом запуске) — 10 минут.
- В поле Ответ функции появится результат выполнения функции:
{ "statusCode": 200, "headers": { "Content-Type": "text/plain" }, "isBase64Encoded": false, "body": "Hello, Username!" }
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы вызвать функцию, выполните команду:
yc serverless function invoke <идентификатор_функции> -d '{"queryStringParameters": {"name": "Username"}}'
Результат:
{"statusCode":200,"headers":{"Content-Type":"text/plain"},"isBase64Encoded":false,"body":"Hello, Username!"}
По умолчанию вызывается версия функции с тегом $latest
.
Ссылку для вызова функции можно найти на вкладке Обзор, в поле Ссылка для вызова.
Для обеспечения безопасности функцию можно вызвать только по протоколу HTTPS. Вызовите ее как обычный HTTPS-запрос, вставив ссылку в адресную строку браузера и добавив в URL параметр name
:
https://functions.yandexcloud.net/<идентификатор_функции>?name=Username
На странице появится ответ:
Hello, Username!
Вызвать функцию можно с помощью плагина Yandex Cloud Toolkit
Что дальше
- Прочитайте, какой должна быть структура функции для вызова разными способами (HTTP, CLI), в разделе Вызов функции в Cloud Functions.
- Ознакомьтесь с концепциями сервиса.
- Посмотрите, что можно делать с функциями и версиями в пошаговых инструкциях.