Создать триггер для почты, который вызывает контейнер Serverless Containers
Создайте триггер для почты, который будет вызывать контейнер Serverless Containers, когда на электронную почту приходит письмо. Адрес электронной почты генерируется сервисом автоматически во время создания триггера.
Перед началом работы
Для создания триггера вам понадобятся:
-
Контейнер, который триггер будет вызывать. Если у вас нет контейнера:
-
(Опционально) Очередь Dead Letter Queue, куда будут перенаправляться сообщения, которые не смог обработать контейнер. Если у вас нет очереди, создайте ее.
-
Сервисные аккаунты с правами:
- на вызов контейнера;
- (опционально) на запись в очередь Dead Letter Queue;
- (опционально) на загрузку объектов в бакет.
Вы можете использовать один и тот же сервисный аккаунт или разные. Если у вас нет сервисного аккаунта, создайте его.
-
(Опционально) Бакет, в который будут сохраняться вложения из писем. Если у вас нет бакета, создайте его с ограниченным доступом.
Создать триггер
Примечание
Триггер начинает работать в течение 5 минут после создания.
-
В консоли управления
перейдите в каталог, в котором хотите создать триггер. -
Выберите сервис Serverless Containers.
-
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- (Опционально) Введите имя и описание триггера.
- В поле Тип выберите
Почта
. - В поле Запускаемый ресурс выберите
Контейнер
.
-
(Опционально) В блоке Настройки сохранения вложений:
- В поле Бакет выберите бакет, в который будут сохраняться вложения из писем.
- В поле Сервисный аккаунт укажите сервисный аккаунт, у которого есть права на загрузку объектов в бакет Object Storage.
-
В блоке Настройки контейнера выберите его и сервисный аккаунт, от имени которого он будет вызываться.
-
В блоке Настройки группирования сообщений укажите:
- Время ожидания, с. Допустимые значения от 1 до 60 секунд, значение по умолчанию — 1 секунда.
- Размер группы. Допустимые значения от 1 до 100, значение по умолчанию — 1.
Триггер группирует сообщения не дольше указанного времени ожидания и отправляет их в контейнер. Число сообщений при этом не превышает указанный размер группы.
-
(Опционально) В блоке Настройки повторных запросов:
- В поле Интервал укажите время, через которое будет сделан повторный вызов контейнера, если текущий завершился неуспешно. Допустимые значения — от 10 до 60 секунд, значение по умолчанию — 10 секунд.
- В поле Количество попыток укажите количество повторных вызовов контейнера, которые будут сделаны, прежде чем триггер отправит сообщение в Dead Letter Queue. Допустимые значения — от 1 до 5, значение по умолчанию — 1.
-
(Опционально) В блоке Настройки Dead Letter Queue выберите очередь Dead Letter Queue и сервисный аккаунт с правами на запись в нее.
-
Нажмите кнопку Создать триггер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать триггер, который вызывает контейнер, выполните команду:
yc serverless trigger create mail \
--name <имя_триггера> \
--batch-size <размер_группы_сообщений> \
--batch-cutoff <максимальное_время_ожидания> \
--attachements-bucket <имя_бакета> \
--attachements-service-account-id <идентификатор_сервисного_аккаунта> \
--invoke-container-id <идентификатор_контейнера> \
--invoke-container-service-account-id <идентификатор_сервисного_аккаунта> \
--retry-attempts <количество_повторных_вызовов> \
--retry-interval <интервал_между_повторными_вызовами> \
--dlq-queue-id <идентификатор_очереди_Dead_Letter_Queue> \
--dlq-service-account-id <идентификатор_сервисного_аккаунта>
Где:
--name
— имя триггера.
--batch-size
— размер группы сообщений. Необязательный параметр. Допустимые значения от 1 до 10, значение по умолчанию — 1.--batch-cutoff
— максимальное время ожидания. Необязательный параметр. Допустимые значения от 1 до 60 секунд, значение по умолчанию — 1 секунда. Триггер группирует сообщения не дольшеbatch-cutoff
и отправляет их в контейнер. Число сообщений при этом не превышаетbatch-size
.
--attachements-bucket
— имя бакета, в который будут сохраняться вложения из писем. Необязательный параметр.--attachements-service-account-id
— идентификатор сервисного аккаунта, у которого есть права на загрузку объектов в бакет Object Storage. Необязательный параметр.
--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: "2022-12-04T08:45:31.131391Z"
name: mail-trigger
rule:
mail:
email: a1s8h8avglh2********-cho1****@serverless.yandexcloud.net
batch_settings:
size: "3"
cutoff: 20s
attachments_bucket:
bucket_id: bucket-for-attachments
service_account_id: ajejeis235ma********
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.
Чтобы создать триггер для почты, который вызывает контейнер:
-
Опишите в конфигурационном файле параметры триггера:
resource "yandex_function_trigger" "my_trigger" { name = "<имя_триггера>" container { id = "<идентификатор_контейнера>" service_account_id = "<идентификатор_сервисного_аккаунта>" retry_attempts = <количество_повторных_вызовов> retry_interval = <интервал_между_повторными_вызовами> } mail { attachments_bucket_id = "<имя_бакета>" service_account_id = "<идентификатор_сервисного_аккаунта>" batch_cutoff = <максимальное_время_ожидания> batch_size = <размер_группы_сообщений> } dlq { queue_id = "<идентификатор_очереди_Dead_Letter_Queue>" service_account_id = "<идентификатор_сервисного_аккаунта>" } }
Где:
-
name
— имя триггера. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
container
— параметры контейнера:id
— идентификатор контейнера.service_account_id
— идентификатор сервисного аккаунта с правами на вызов контейнера.
retry_attempts
— количество повторных вызовов, которые будут сделаны, прежде чем триггер отправит сообщение в Dead Letter Queue. Необязательный параметр. Допустимые значения — от 1 до 5, значение по умолчанию — 1.retry_interval
— время, через которое будет сделан повторный вызов контейнера, если текущий завершился неуспешно. Необязательный параметр. Допустимые значения — от 10 до 60 секунд, значение по умолчанию — 10 секунд.
-
mail
— параметры триггера:attachments_bucket_id
— имя бакета, в который будут сохраняться вложения из писем. Необязательный параметр.service_account_id
— идентификатор сервисного аккаунта, у которого есть права на загрузку объектов в бакет Object Storage. Необязательный параметр.
batch_cutoff
— максимальное время ожидания. Необязательный параметр. Допустимые значения от 1 до 60 секунд, значение по умолчанию — 1 секунда. Триггер группирует сообщения не дольшеbatch_cutoff
и отправляет их в контейнер. Число сообщений при этом не превышаетbatch_size
.batch_size
— размер группы сообщений. Необязательный параметр. Допустимые значения от 1 до 10, значение по умолчанию — 1.
dlq
— параметры очереди сообщений Dead Letter Queue:queue_id
— идентификатор очереди Dead Letter Queue. Необязательный параметр.service_account_id
— идентификатор сервисного аккаунта с правами на запись в очередь Dead Letter Queue. Необязательный параметр.
Более подробную информацию о параметрах ресурса
yandex_function_trigger
в Terraform см. в документации провайдера . -
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
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.
Serverless Containers автоматически сгенерирует адрес электронной почты, при отправке писем на который будет запускаться триггер. Чтобы посмотреть его, получите подробную информацию о триггере.
Проверить результат
Проверьте, что триггер работает корректно. Для этого посмотрите логи контейнера, в них отображается информация о вызовах.