Вызвать функцию асинхронно
Примечание
Функциональность находится на стадии Preview.
Настройте асинхронный вызов
- В консоли управления
перейдите в каталог, в котором находится функция. - Выберите сервис Cloud Functions.
- Выберите функцию.
- Перейдите на вкладку Редактор.
- В блоке Асинхронный вызов активируйте переключатель Включить.
- В поле Количество повторных попыток укажите количество повторных вызовов функции, которые будут сделаны, прежде чем вызов будет считаться неуспешным.
- В поле Сервисный аккаунт укажите сервисный аккаунт, у которого есть права на вызов функции.
- Укажите в полях Назначение для успешного результата и Назначение для неуспешного результата, куда отправлять сообщения об успешном и неуспешном вызовах функции соответственно:
Не задано
— не отправлять сообщения.Message Queue
— отправлять сообщения в очередь Message Queue:- Очередь сообщений — очередь Message Queue, в которую нужно отправлять сообщения.
- Сервисный аккаунт — сервисный аккаунт, у которого есть права на запись в очередь.
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы настроить асинхронный вызов, выполните команду:
yc serverless function version create \
--function-name=<имя_функции> \
--runtime <среда_выполнения> \
--entrypoint <точка_входа> \
--memory <объем_RAM> \
--execution-timeout <максимальное_время_выполнения> \
--source-version-id <идентификатор_версии> \
--async-max-retries <количество_повторных_вызовов> \
--async-service-account-id <идентификатор_сервисного_аккаунта> \
--async-success-ymq-arn <очередь_сообщений> \
--async-success-sa-id <идентификатор_сервисного_аккаунта> \
--async-failure-ymq-arn <очередь_сообщений> \
--async-failure-sa-id <идентификатор_сервисного_аккаунта>
Где:
--function-name
— имя функции.--runtime
— среда выполнения.--entrypoint
— точка входа, указывается в формате<имя_файла_с_функцией>.<имя_обработчика>
.--memory
— объем RAM.--execution-timeout
— максимальное время выполнения функции до таймаута.--source-version-id
— идентификатор версии функции, код которой вы хотите скопировать.--async-max-retries
— количество повторных вызовов функции, которые будут сделаны, прежде чем вызов будет считаться неуспешным.--async-service-account-id
— идентификатор сервисного аккаунта, у которого есть права на вызов функции.--async-success-ymq-arn
— ARN очереди Message Queue, в которую нужно отправлять сообщения об успешных вызовах функции. Если параметр не указан, сообщения не отправляются.--async-success-sa-id
— идентификатор сервисного аккаунта с правами на запись в очередьasync-success-ymq-arn
.--async-failure-ymq-arn
— ARN очереди Message Queue, в которую нужно отправлять сообщения о неуспешных вызовах функции. Если параметр не указан, сообщения не отправляются.--async-failure-sa-id
— идентификатор сервисного аккаунта с правами на запись в очередьasync-failure-ymq-arn
.
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы настроить асинхронный вызов:
-
Откройте файл конфигурации Terraform и добавьте к описанию функции блок
async_invocation
:resource "yandex_function" "test-function" { name = "<имя_функции>" user_hash = "<хеш_функции>" runtime = "<среда_выполнения>" entrypoint = "<точка_входа>" memory = "<объем_RAM>" execution_timeout = "<максимальное время выполнения>" service_account_id = "<идентификатор_сервисного_аккаунта>" async_invocation { retries_count = "<количество_повторных_вызовов>" service_account_id = "<идентификатор_сервисного_аккаунта>" ymq_failure_target { service_account_id = "<идентификатор_сервисного_аккаунта>" arn = "<очередь_сообщений>" } ymq_success_target { service_account_id = "идентификатор_сервисного_аккаунта" arn = "<очередь_сообщений>" } } }
Где:
async_invocation
— параметры асинхронного вызова:retries_count
— количество повторных вызовов функции, которые будут сделаны, прежде чем вызов будет считаться неуспешным.service_account_id
— сервисный аккаунт, у которого есть права на вызов функции.ymq_failure_target
— параметры очереди для неуспешного вызова:service_account_id
— сервисный аккаунт с правами на запись в очередь для неуспешного асинхронного вызова.arn
— ARN очереди Message Queue, в которую нужно отправлять сообщения о неуспешных вызовах функции. Если параметр не указан, сообщения не отправляются.
ymq_success_target
— параметры очереди для успешного вызова:service_account_id
— сервисный аккаунт с правами на запись в очередь для успешного асинхронного вызова.arn
— ARN очереди Message Queue, в которую нужно отправлять сообщения об успешных вызовах функции. Если параметр не указан, сообщения не отправляются.
Более подробную информацию о параметрах ресурса
yandex_function
см. в документации провайдера . -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить изменение функции и ее настройки можно в консоли управления
yc serverless function version get <идентификатор_версии_функции>
Чтобы настроить асинхронный вызов, воспользуйтесь методом REST API createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
Вызовите функцию
Вызовите функцию по HTTPS, указав параметр строки запроса ?integration=async
.