Предполагается, что запланированные события происходят через регулярные промежутки времени на основе набора правил. Запланированные события используются для выполнения лямбда-функции после интервала, определенного в сервисах cloudwatch. Их лучше всего использовать для работы на cron вместе с AWS Lambda. В этой главе на простом примере объясняется, как отправлять почту через каждые 5 минут с использованием запланированных событий и AWS Lambda.
реквизиты
Требования для использования лямбда-функции с запланированными событиями следующие:
- Подтвердите идентификатор электронной почты, используя AWS SES
- Создать роль для использования AWS SES, Cloudwatch и AWS Lambda
- Создать лямбда-функцию для отправки электронной почты
- Добавить правило для запланированных событий из AWS CloudWatch
пример
Пример, который мы рассмотрим, добавит событие CloudWatch к функции AWS Lambda. Cloudwatch запустит AWS Lambda на основе временной привязки к ней. Например, в примере ниже мы использовали 5 минут в качестве триггера. Это означает, что каждые 5 минут будет запускаться AWS Lambda, а AWS Lambda будет отправлять почту при каждом запуске.
Базовая блок-схема для этого показана ниже —
Подтвердите идентификатор электронной почты, используя AWS SES
Войдите в AWS и перейдите в сервис AWS SES, как показано ниже —
Теперь нажмите Simple Email Service, как показано на рисунке —
Нажмите Адреса электронной почты слева, как показано на рисунке —
Он отображает кнопку Подтвердить новый адрес электронной почты . Нажмите на это.
Введите адрес электронной почты, который вы хотите проверить. Нажмите кнопку Подтвердить этот адрес электронной почты . На этот идентификатор электронной почты вы получите письмо от AWS с темой электронного письма: Amazon Web Services — запрос подтверждения адреса электронной почты в регионе Восток США (Северная Вирджиния)
Нажмите на ссылку, указанную в письме, чтобы подтвердить адрес электронной почты. После проверки будет отображаться идентификатор электронной почты следующим образом:
Создать роль для использования AWS SES, Cloudwatch и AWS Lambda
Вы также можете создать роль, которая дает разрешение на использование услуг. Для этого перейдите в IAM и выберите Роль. Добавьте необходимые политики и создайте роль. Обратите внимание, что роль, созданная здесь, — это события с лямбдой .
Создать лямбда-функцию для отправки электронной почты
Вам нужно будет выполнить шаги, чтобы создать функцию Lambda, используя время выполнения в качестве nodejs.
Теперь добавьте триггер к лямбде, как показано на рисунке —
Добавьте детали в CloudWatch Events Trigger, как показано ниже —
Обратите внимание, что событие будет запускаться через каждые 5 минут в соответствии с созданным триггером правила.
Лямбда-код для отправки электронной почты приведен ниже —
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' }); exports.handler = function(event, context, callback) { var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "this mail comes from aws lambda event scheduling" } }, Subject: { Data: "Event scheduling from aws lambda" } }, Source: "[email protected]" }; console.log('===SENDING EMAIL==='); var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } }); };
Теперь нам нужен сервис AWS SES. Вы можете добавить это, используя код, показанный ниже —
var aws = require('aws-sdk'); var ses = new aws.SES({ region: 'us-east-1' });
Чтобы отправить почту с узлаjjs , мы создали объект eParams, который имеет такие детали, как пример почты, идентификатор почты и тело с сообщением следующим образом:
var eParams = { Destination: { ToAddresses: ["[email protected]"] }, Message: { Body: { Text: { Data: "this mail comes from aws lambda event scheduling" } }, Subject: { Data: "Event scheduling from aws lambda" } }, Source: "[email protected]" };
Лямбда-код для отправки электронной почты выглядит следующим образом —
var email = ses.sendEmail(eParams, function(err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); console.log("EMAIL CODE END"); console.log('EMAIL: ', email); context.succeed(event); callback(null, "email is send"); } });
Теперь давайте сохраним эту функцию Lambda и проверим идентификатор электронной почты на наличие писем. На приведенном ниже снимке экрана показано, что письмо отправляется из AWS Lambda через каждые 5 минут.