[Документация Yandex Cloud](../../../index.md) > [Yandex Cloud Functions](../../index.md) > [Пошаговые инструкции](../index.md) > Вызов функции > Вызвать функцию асинхронно

# Вызвать функцию асинхронно

{% note info %}

Функциональность находится на стадии [Preview](../../../overview/concepts/launch-stages.md).

{% endnote %}

## Настройте асинхронный вызов {#async}

{% list tabs group=instructions %}

- Консоль управления {#console}
    
    1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог, в котором находится функция.
    1. Перейдите в сервис **Cloud Functions**.
    1. Выберите функцию.
    1. Перейдите на вкладку **Редактор**.
    1. В блоке **Асинхронный вызов** активируйте переключатель **Включить**.
    1. В поле **Количество повторных попыток** укажите количество повторных вызовов функции, которые будут сделаны, прежде чем вызов будет считаться неуспешным.
    1. В поле **Сервисный аккаунт** укажите сервисный аккаунт, у которого есть права на вызов функции.
    1. Укажите в полях **Назначение для успешного результата** и **Назначение для неуспешного результата**, куда отправлять сообщения об успешном и неуспешном вызовах функции соответственно:
        * `Не задано` — не отправлять сообщения.
        * `Message Queue` — отправлять сообщения в очередь Message Queue:
            * **Очередь сообщений** — очередь Message Queue, в которую нужно отправлять сообщения.
            * **Сервисный аккаунт** — сервисный аккаунт, у которого есть права на запись в очередь.
    1. Нажмите кнопку **Сохранить изменения**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы настроить асинхронный вызов, выполните команду:

    ```bash
    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 {#tf}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  Чтобы настроить асинхронный вызов:

  1. Откройте файл конфигурации Terraform и добавьте к описанию функции блок `async_invocation`:

     ```hcl
     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/resources/function.md).

  1. Примените изменения:

     1. В терминале перейдите в директорию с конфигурационным файлом.
     1. Проверьте корректность конфигурации с помощью команды:
     
        ```bash
        terraform validate
        ```
     
        Если конфигурация является корректной, появится сообщение:
     
        ```bash
        Success! The configuration is valid.
        ```
     
     1. Выполните команду:
     
        ```bash
        terraform plan
        ```
     
        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
     1. Примените изменения конфигурации:
     
        ```bash
        terraform apply
        ```
     
     1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  Проверить изменение функции и ее настройки можно в [консоли управления](https://console.yandex.cloud) или с помощью команды [CLI](../../../cli/quickstart.md):

  ```bash
  yc serverless function version get <идентификатор_версии_функции>
  ```

- API {#api}

    Чтобы настроить асинхронный вызов, воспользуйтесь методом REST API [createVersion](../../functions/api-ref/Function/createVersion.md) для ресурса [Function](../../functions/api-ref/Function/index.md) или вызовом gRPC API [FunctionService/CreateVersion](../../functions/api-ref/grpc/Function/createVersion.md).

{% endlist %}

## Вызовите функцию {#invoke}

[Вызовите функцию](function-invoke.md) по HTTPS, указав параметр строки запроса `?integration=async`.

## Полезные ссылки {#see-also}

* [Асинхронный вызов функции](../../concepts/function-invoke-async.md)