Создать версию функции
Чтобы создать версию функции, вы можете воспользоваться одним из форматов загрузки кода. Для примера будет использован ZIP-архив.
Важно
Файл больше 3,5 МБ необходимо загружать через Object Storage. Подробнее об ограничениях читайте в разделе Квоты и лимиты в Cloud Functions.
Подготовить ZIP-архив с кодом функции
-
Сохраните следующий код в файл с названием
index.js
:exports.handler = async function (event, context) { let name = 'World'; if (event.queryStringParameters && event.queryStringParameters.name) { name = event.queryStringParameters.name } return { 'statusCode': 200, 'headers': { 'Content-Type': 'text/plain' }, 'isBase64Encoded': false, 'body': `Hello, ${name}!` } };
-
Добавьте файл
index.js
в ZIP-архивhello-js.zip
.
Создать версию функции
При создании версии необходимо задать следующие параметры:
- Среда выполнения — предоставляет дополнительные библиотеки и переменные окружения, к которым можно получить доступ из кода функции. Соответствует языку программирования, на котором написана ваша функция. Подробнее см. в разделе Среда выполнения.
- Точка входа — функция, которая будет вызываться в качестве обработчика.
- Таймаут, c — максимальное время выполнения функции, после которого сервис прервет выполнение, не дожидаясь ответа. Включает в себя время начальной инициализации при первом запуске.
- В консоли управления
перейдите в каталог, в котором находится функция. - Выберите сервис Cloud Functions.
- Выберите функцию, версию которой хотите создать.
- В разделе Последняя версия нажмите кнопку Создать в редакторе.
- Выберите среду выполнения. Отключите опцию Добавить файлы с примерами кода.
- Нажмите кнопку Продолжить.
- Подготовьте код функции:
- Среда выполнения:
nodejs18
. - Способ:
ZIP-архив
. - Файл:
hello-js.zip
. - Точка входа:
index.handler
.
- Среда выполнения:
- Задайте параметры версии:
- Таймаут, c:
5
. - Память:
128 МБ
. - Сервисный аккаунт:
Не выбрано
. - Переменные окружения:
Не выбрано
.
- Таймаут, c:
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать версию функции, выполните команду:
yc serverless function version create \
--function-name=my-nodejs-function \
--runtime nodejs18 \
--entrypoint index.handler \
--memory 128m \
--execution-timeout 5s \
--source-path ./hello-js.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: nodejs18
entrypoint: index.handler
resources:
memory: "134217728"
execution_timeout: 5s
image_size: "4096"
status: ACTIVE
tags:
- $latest
log_options:
folder_id: b1g681qpemb4********
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать новую версию функции:
-
Откройте файл конфигурации Terraform и измените параметры функции:
yandex_function
— описание создаваемой функции и ее исходный код.name
— имя функции.description
— текстовое описание функции.user_hash
— произвольная строка, определяющая версию функции. При изменениях функции необходимо менять и эту строку. Функция обновится при изменении этой строки.runtime
— среда выполнения функции.entrypoint
— имя функции в исходном коде, которая будет служить точкой входа в приложения.memory
— объем памяти в мегабайтах, отведенный для выполнения функции.execution_timeout
— таймаут выполнения функции.service_account_id
— идентификатор сервисного аккаунта, от имени которого будет запускаться функция.content
— исходный код функции.content.0.zip_filename
— имя ZIP-архива, содержащего исходный код функции.
Пример структуры конфигурационного файла:
resource "yandex_function" "test-function" { name = "test-function" description = "Test function" user_hash = "first-function" runtime = "nodejs18" entrypoint = "main" memory = "128" execution_timeout = "10" service_account_id = "<идентификатор_сервисного_аккаунта>" content { zip_filename = "<путь_к_ZIP-архиву>" } }
Примечание
При изменении имени или описания функции версия создана не будет.
Более подробную информацию о параметрах ресурса
yandex_function
см. в документации провайдера . -
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.
Проверить появление версии можно в консоли управления
yc serverless function version list --function-name <имя_функции>
Чтобы создать версию функции, воспользуйтесь методом REST API createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
Пример запроса
Чтобы воспользоваться примерами, установите cURL
-
Загрузите в бакет Object Storage ZIP-архив с кодом версии функции
hello-js.zip
. -
Подготовьте файл
body.json
с телом запроса:{ "functionId": "<идентификатор_функции>", "runtime": "nodejs18", "entrypoint": "index.handler", "resources": { "memory": "134217728" }, "executionTimeout": "5s", "serviceAccountId": "<идентификатор_сервисного_аккаунта>", "package": { "bucketName": "<имя_бакета>", "objectName": "hello-js.zip" }, }
Где:
functionId
— идентификатор функции, версию которой вы хотите создать.runtime
— среда выполнения.entrypoint
— точка входа, указывается в формате<имя_файла_без_расширения>.<имя_обработчика>
.memory
— объем RAM.executionTimeout
— максимальное время выполнения функции до таймаута.serviceAccountId
— идентификатор сервисного аккаунта, которому назначена роль, разрешающая чтение данных в бакете.bucketName
— имя бакета, в который вы загрузили ZIP-архив c кодом функции и необходимыми зависимостями.objectName
— ключ объекта с кодом функции в бакете.
-
Выполните запрос:
export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data "@<путь_к_файлу_body.json>" \ https://serverless-functions.api.cloud.yandex.net/functions/v1/versions
Результат:
{ "done": false, "metadata": { "@type": "type.googleapis.com/yandex.cloud.serverless.functions.v1.CreateFunctionVersionMetadata", "functionVersionId": "d4e25m0gila4********" }, "id": "d4edk0oobcc9********", "description": "Create function version", "createdAt": "2023-10-11T11:22:21.286786431Z", "createdBy": "ajeol2afu1js********", "modifiedAt": "2023-10-11T11:22:21.286786431Z" }
Создать версию функции можно с помощью плагина Yandex Cloud Toolkit
Примечание
Для сохранения целостности связей изменение и удаление версий функции не предусмотрено. Подробнее о взаимосвязи ресурсов читайте в разделе Функция.