Создать триггер для бюджетов, который вызывает контейнер Serverless Containers
Создайте триггер для бюджетов, который будет вызывать контейнер Serverless Containers при превышении пороговых значений.
Перед началом работы
Для создания триггера вам понадобятся:
-
Контейнер, который триггер будет вызывать. Если у вас нет контейнера:
-
(Опционально) Очередь Dead Letter Queue, куда будут перенаправляться сообщения, которые не смог обработать контейнер. Если у вас нет очереди, создайте ее.
-
Сервисный аккаунт с правами на вызов контейнера и (опционально) запись в очередь Dead Letter Queue. Вы можете использовать один и тот же сервисный аккаунт или разные. Если у вас нет сервисного аккаунта, создайте его.
- Бюджет, при превышении порога которого триггер будет запускаться. Если у вас нет бюджета, создайте его.
Создать триггер
Примечание
Триггер начинает работать в течение 5 минут после создания.
-
В консоли управления
перейдите в каталог, в котором хотите создать триггер. -
Перейдите
в сервис Serverless Containers. -
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
-
Введите имя и описание триггера.
-
В поле Метки нажмите кнопку Добавить метку и укажите метки в формате
ключ: значение. -
В поле Тип выберите
Бюджет.
-
-
В блоке Настройки бюджета выберите платежный аккаунт и бюджет. Можно выбрать Все бюджеты.
-
В блоке Приёмники:
-
В поле Тип приёмника выберите
Контейнер. -
В блоке Настройки контейнера выберите его и сервисный аккаунт, от имени которого он будет вызываться.
-
(Опционально) В блоке Настройки повторных запросов:
- В поле Интервал укажите время, через которое будет сделан повторный вызов контейнера, если текущий завершился неуспешно. Допустимые значения — от 10 до 60 секунд, значение по умолчанию — 10 секунд.
- В поле Количество попыток укажите количество повторных вызовов контейнера, которые будут сделаны, прежде чем триггер отправит сообщение в Dead Letter Queue. Допустимые значения — от 1 до 5, значение по умолчанию — 1.
-
(Опционально) В блоке Настройки Dead Letter Queue выберите очередь Dead Letter Queue и сервисный аккаунт с правами на запись в нее.
-
(Опционально) В поле Фильтр укажите jq-шаблон для фильтрации событий, передаваемых в приемник. Если фильтр не указан, в приемник передаются все события.
-
(Опционально) В поле Шаблон преобразования укажите jq-шаблон для преобразования событий перед отправкой в приемник. Если шаблон не указан, события не преобразуются.
-
-
Нажмите кнопку Создать триггер.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Чтобы создать триггер, который вызывает контейнер, выполните команду:
yc serverless trigger create billing-budget \
--name <имя_триггера> \
--billing-account-id <идентификатор_платежного_аккаунта> \
--budget-id <идентификатор_бюджета> \
--invoke-container-id <идентификатор_контейнера> \
--invoke-container-service-account-id <идентификатор_сервисного_аккаунта> \
--retry-attempts 1 \
--retry-interval 10s \
--dlq-queue-id <идентификатор_очереди_Dead_Letter_Queue> \
--dlq-service-account-id <идентификатор_сервисного_аккаунта>
Где:
--name— имя триггера.--billing-account-id— идентификатор платежного аккаунта.--budget-id— идентификатор бюджета.
--invoke-container-id— идентификатор контейнера.--invoke-container-service-account-id— идентификатор сервисного аккаунта с правами на вызов контейнера.--retry-attempts— количество повторных вызовов, которые будут сделаны, прежде чем триггер отправит сообщение в Dead Letter Queue. Необязательный параметр. Допустимые значения — от 1 до 5, значение по умолчанию — 1.--retry-interval— время, через которое будет сделан повторный вызов контейнера, если текущий завершился неуспешно. Необязательный параметр. Допустимые значения — от 10 до 60 секунд, значение по умолчанию — 10 секунд.--dlq-queue-id— идентификатор очереди Dead Letter Queue. Необязательный параметр.--dlq-service-account-id— идентификатор сервисного аккаунта с правами на запись в очередь Dead Letter Queue. Необязательный параметр.
Результат:
id: a1sfe084v4h2********
folder_id: b1g88tflruh2********
created_at: "2019-12-04T08:45:31.131391Z"
name: budget-trigger
rule:
billing-budget:
billing-account-id: dn2char50jh2********
budget-id: dn2jnshmdlh2********
invoke_container:
container_id: d4eofc7n0mh2********
service_account_id: aje3932acdh2********
retry_settings:
retry_attempts: "1"
interval: 10s
dead_letter_queue:
queue-id: yrn:yc:ymq:ru-central1:aoek49ghmkh2********:dlq
service-account-id: aje3932acdh2********
status: ACTIVE
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
Чтобы создать триггер для бюджетов, который вызывает контейнер:
-
Опишите в конфигурационном файле параметры триггера:
resource "yandex_serverless_triggers" "my_trigger" { name = "<имя_триггера>" source { billing_budget { billing_account_id = "<идентификатор_платежного_аккаунта>" budget_id = "<идентификатор_бюджета>" } } action { invoke_container { container_id = "<идентификатор_контейнера>" path = "<HTTP-путь>" service_account_id = "<идентификатор_сервисного_аккаунта>" } retry_policy { retry_attempts = "<количество_повторных_отправок>" interval = "<интервал_между_повторными_отправками>" } dead_letter { dead_letter_queue { queue_arn = "<ARN_очереди_Dead_Letter_Queue>" service_account_id = "<идентификатор_сервисного_аккаунта>" } } } }Где:
-
name— имя триггера. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
description— описание триггера. Необязательный параметр. -
labels— метки триггера в форматеключ:значение. Необязательный параметр.
-
source— параметры источника событий:-
billing_budget— параметры бюджета:billing_account_id— идентификатор платежного аккаунта.budget_id— идентификатор бюджета. Необязательный параметр. Если параметр не указан, триггер срабатывает для любого бюджета платежного аккаунта.
-
-
action— параметры приемника. Блок можно указать несколько раз, чтобы триггер вызывал несколько ресурсов, в том числе разных типов. Максимальное количество ресурсов ограничено лимитами.-
invoke_container— параметры контейнера:container_id— идентификатор контейнера.path— HTTP-путь, по которому будет вызван контейнер. Необязательный параметр.service_account_id— идентификатор сервисного аккаунта с правами на вызов контейнера.
-
filter— фильтрация событий перед отправкой в приемник. Необязательный блок.jq— jq-шаблон для фильтрации событий, передаваемых в приемник. Если не указан, в приемник передаются все события.
-
transformer— преобразование событий перед отправкой в приемник. Необязательный блок.jq— jq-шаблон для преобразования событий перед отправкой в приемник. Если не указан, события не преобразуются.
-
retry_policy— параметры повторных запросов. Необязательный блок.interval— время, через которое будет сделана повторная отправка события, если текущая завершилась неуспешно.retry_attempts— количество повторных отправок, которые будут сделаны, прежде чем триггер отправит событие в Dead Letter Queue.
-
dead_letter— параметры очереди сообщений Dead Letter Queue. Необязательный блок.-
dead_letter_queue— параметры очереди:queue_arn— ARN очереди.service_account_id— идентификатор сервисного аккаунта с правами на запись в очередь.message_attributes— атрибуты, которые будут добавлены к каждому сообщению в очереди, в форматеключ:значение. Необязательный параметр.
-
-
Подробнее о параметрах ресурса
yandex_serverless_triggersв документации провайдера. -
-
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Terraform создаст все требуемые ресурсы. Проверить появление ресурсов можно в консоли управления
или с помощью команды CLI:yc serverless trigger list -
Чтобы создать триггер для бюджетов, воспользуйтесь методом REST API create для ресурса Trigger или вызовом gRPC API TriggerService/Create.
Проверить результат
Проверьте, что триггер работает корректно. Для этого посмотрите логи контейнера, в них отображается информация о вызовах.