Invoking a function asynchronously
Note
This feature is in the Preview stage.
Setting up asynchronous invocation
- In the management console
, select the folder containing the function. - Select Cloud Functions.
- Select a function.
- Go to the Editor tab.
- Under Asynchronous call, switch the Enable toggle to on.
- In the Number of retries field, specify the number of invocation retries before the call is considered failed.
- In the Service account field, specify a service account with rights to invoke the function.
- In the Destination for successful result and Destination for unsuccessful result fields, specify where messages on successful and unsuccessful function calls should be sent to, respectively:
Not specified
: Do not send messages.Message Queue
: Send messages to a queue in Message Queue:- Message Queue: Queue in Message Queue to send messages to.
- Service account: Service account with rights to write messages to the queue.
- Click Save changes.
If you do not have the Yandex Cloud command line interface yet, install and initialize it.
The folder specified in the CLI profile is used by default. You can specify a different folder using the --folder-name
or --folder-id
parameter.
To set up asynchronous invocation, run the following command:
yc serverless function version create \
--function-name=<function_name> \
--runtime <runtime_environment> \
--entrypoint <entry_point> \
--memory <RAM_size> \
--execution-timeout <execution_timeout> \
--source-version-id <version_ID> \
--async-max-retries <number_of_retries> \
--async-service-account-id <service_account_ID> \
--async-success-ymq-arn <message_queue> \
--async-success-sa-id <service_account_ID> \
--async-failure-ymq-arn <message_queue> \
--async-failure-sa-id <service_account_ID>
Where:
--function-name
: Function name.--runtime
: Runtime environment.--entrypoint
: Entry point in the following format:<function_file_name>.<handler_name>
.--memory
: Amount of RAM.--execution-timeout
: Maximum function running time before the timeout is reached.--source-version-id
: ID of the function version from which you want to copy the code.--async-max-retries
: Number of retries before the invocation fails.--async-service-account-id
: ID of the service account with permissions to invoke the function.--async-success-ymq-arn
: ARN of the destination queue in Message Queue for messages about successful function invocations. If you skip this parameter, no messages will be sent.--async-success-sa-id
: ID of the service account with permissions to write to theasync-success-ymq-arn
queue.--async-failure-ymq-arn
: ARN of the destination queue in Message Queue for messages about failed function invocations. If you skip this parameter, no messages will be sent.--async-failure-sa-id
: ID of the service account with permissions to write to theasync-failure-ymq-arn
queue.
Terraform
For more information about the provider resources, see the documentation on the Terraform
If you change the configuration files, Terraform automatically detects which part of your configuration is already deployed, and what should be added or removed.
If you don't have Terraform, install it and configure the Yandex Cloud provider.
To set up asynchronous invocation:
-
Open the Terraform configuration file and add the
async_invocation
section to the function description:resource "yandex_function" "test-function" { name = "<function_name>" user_hash = "<function_hash>" runtime = "<runtime_environment>" entrypoint = "<entry_point>" memory = "<RAM_size>" execution_timeout = "<execution_timeout>" service_account_id = "<service_account_ID>" async_invocation { retries_count = "<number_of_retries>" service_account_id = "<service_account_ID>" ymq_failure_target { service_account_id = "<service_account_ID>" arn = "<message_queue>" } ymq_success_target { service_account_id = "service_account_ID" arn = "<message_queue>" } } }
Where:
async_invocation
: Asynchronous invocation parameters:retries_count
: Number of retries before the invocation fails.service_account_id
: Service account with permissions to invoke the function.ymq_failure_target
: Parameters of the queue for failed invocations:service_account_id
: Service account with permissions to write to the queue for failed asynchronous invocations.arn
: ARN of the destination queue in Message Queue for messages about failed function invocations. If you skip this parameter, no messages will be sent.
ymq_success_target
: Parameters of the queue for successful invocations:service_account_id
: Service account with permissions to write to the queue for successful asynchronous invocations.arn
: ARN of the destination queue in Message Queue for messages about successful function invocations. If you skip this parameter, no messages will be sent.
For more information about the
yandex_function
resource properties, see the provider documentation . -
Apply the changes:
-
In the terminal, change to the folder where you edited the configuration file.
-
Make sure the configuration file is correct using the command:
terraform validate
If the configuration is correct, the following message is returned:
Success! The configuration is valid.
-
Run the command:
terraform plan
The terminal will display a list of resources with parameters. No changes are made at this step. If the configuration contains errors, Terraform will point them out.
-
Apply the configuration changes:
terraform apply
-
Confirm the changes: type
yes
in the terminal and press Enter.
-
You can check the function update and its new configuration using the management console
yc serverless function version get <function_version_ID>
To set up asynchronous invocation, use the createVersion REST API method for the Function resource or the FunctionService/CreateVersion gRPC API call.
Invoke the function
Invoke the function using the HTTPS protocol and specifying the ?integration=async
query string parameter.