[Yandex Cloud documentation](../../../index.md) > [Yandex Cloud Functions](../../index.md) > [Step-by-step guides](../index.md) > Creating a trigger > Creating a trigger for budgets

# Creating a trigger for budgets that invokes Cloud Functions

Create a [trigger for budgets](../../concepts/trigger/budget-trigger.md) that invokes [Cloud Functions](../../concepts/function.md) when threshold values are exceeded.

## Getting started {#before-you-begin}

To create a trigger, you will need:

* Function the trigger will invoke. If you do not have a function:

    * [Create a function](../function/function-create.md).
    * [Create a function version](../function/version-manage.md).

* Optionally, a [dead-letter queue](../../concepts/dlq.md) where to redirect the messages the function failed to process. If you do not have a queue, [create one](../../../message-queue/operations/message-queue-new-queue.md).

* [Service accounts](../../../iam/concepts/users/service-accounts.md) with permissions to invoke the function and, optionally, write to the dead letter queue. You can use the same service account or different ones. If you do not have a service account, [create one](../../../iam/operations/sa/create.md).

* Budget for which a trigger will fire in case it is exceeded. If you do not have a budget, [create one](../../../billing/operations/budgets.md).

## Creating a trigger {#trigger-create}

{% note info %}

The trigger is initiated within five minutes after it is created.

{% endnote %}

{% list tabs group=instructions %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), select the folder where you want to create a trigger.

    1. Navigate to **Cloud Functions**.

    1. In the left-hand panel, select ![image](../../../_assets/console-icons/gear-play.svg) **Triggers**.

    1. Click **Create trigger**.

    1. Under **Basic settings**:

        * Enter a name and description for the trigger.
        * In the **Type** field, select **Budget**.
        * In the **Launched resource** field, select **Function**.

    1. Under **Budget settings**, select your billing account and budget. You can select **Any budget**.

    1. Under **Function settings**, select a function and specify:

        * [Function version tag](../../concepts/function.md#tag).
        * [Service account](../../../iam/concepts/users/service-accounts.md) to use for invoking the function.

    1. Optionally, under **Repeat request settings**:

        * In the **Interval** field, specify how long to wait before retrying the function if it fails. The values may range from 10 to 60 seconds. The default value is 10 seconds.
        * In the **Number of attempts** field, specify the number of function retries before the trigger sends a message to the dead letter queue. The values may range from 1 to 5. The default value is 1.

    1. Optionally, under **Dead Letter Queue settings**, select a dead-letter queue and a service account with write permissions for that queue.

    1. Click **Create trigger**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    To create a trigger that invokes a function, run this command:

    ```bash
    yc serverless trigger create billing-budget \
      --name <trigger_name> \
      --billing-account-id <billing_account_ID> \
      --budget-id <budget_ID> \
      --invoke-function-id <function_ID> \
      --invoke-function-service-account-id <service_account_ID> \
      --retry-attempts 1 \
      --retry-interval 10s \
      --dlq-queue-id <dead-letter_queue_ID> \
      --dlq-service-account-id <service_account_ID>
    ```

    Where:

    * `--name`: Trigger name.
    * `--billing-account-id`: Billing account ID.
    * `--budget-id`: Budget ID.
    
    * `--invoke-function-id`: Function ID.
    * `--invoke-function-service-account-id`: ID of the service account with permissions to invoke the function.
    * `--retry-attempts`: Number of invocation retries before the trigger sends a message to the dead-letter queue. This is an optional setting. The values may range from 1 to 5. The default value is 1.
    * `--retry-interval`: Time to wait before retrying the function if it fails. This is an optional setting. The values may range from 10 to 60 seconds. The default value is 10 seconds.
    * `--dlq-queue-id`: Dead-letter queue ID. This is an optional setting.
    * `--dlq-service-account-id`: ID of the service account with write permissions for the dead-letter queue. This is an optional setting.

    Result:

    ```text
    id: a1sfe084v4**********
    folder_id: b1g88tflru**********
    created_at: "2019-12-04T08:45:31.131391Z"
    name: budget-trigger
    rule:
      billing-budget:
        billing-account-id: dn2char50j**********
        budget-id: dn2jnshmdlc1********
        invoke_function:
          function_id: d4eofc7n0m03********
          function_tag: $latest
          service_account_id: aje3932acd0c********
          retry_settings:
            retry_attempts: "1"
            interval: 10s
          dead_letter_queue:
            queue-id: yrn:yc:ymq:ru-central1:aoek49ghmknn********:dlq
            service-account-id: aje3932acd0c********
    status: ACTIVE
    ```

- API {#api}

  To create a trigger for budgets, use the [create](../../triggers/api-ref/Trigger/create.md) REST API method for the [Trigger](../../triggers/api-ref/Trigger/index.md) resource or the [TriggerService/Create](../../triggers/api-ref/grpc/Trigger/create.md) gRPC API call.

{% endlist %}

## Checking the result {#check-result}

Check that the trigger works correctly. To do this, view [function logs](../function/function-logs.md) that show information on invocations.

## Useful links {#see-also}

* [Creating a trigger for budgets that invokes a container from Serverless Containers](../../../serverless-containers/operations/budget-trigger-create.md)
* [Creating a trigger for budgets that sends messages to WebSocket connections](../../../api-gateway/operations/trigger/budget-trigger-create.md)
* [Creating a budget trigger that invokes a Cloud Functions function to stop VM instances](../../tutorials/serverless-trigger-budget-vm.md)