Использование лямбда-функции с запланированными событиями
Предполагается, что запланированные события должны происходить через определенные промежутки времени в соответствии с набором правил. Запланированные события используются для выполнения лямбда-функции после интервала, определенного в службах облачного наблюдения. Их лучше всего использовать для работы с заданиями 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 Сервис, как показано -
Нажмите Email Addresses с левой стороны, как показано -
На нем отображается кнопка Verify a New Email Address. Щелкните по нему.
Войти Email Addressвы хотите проверить. НажмитеVerify This Email Addressкнопка. Вы получите письмо от AWS на этот идентификатор электронной почты с темой электронной почты: Amazon Web Services - запрос проверки адреса электронной почты в регионе Восток США (Северная Вирджиния)
Щелкните ссылку в письме, чтобы подтвердить адрес электронной почты. После проверки он отобразит идентификатор электронной почты следующим образом:
Создайте роль для использования AWS SES, Cloudwatch и AWS Lambda
Вы также можете создать роль, которая дает разрешение на использование служб. Для этого перейдите в IAM и выберите Роль. Добавьте необходимые политики и создайте роль. Обратите внимание, что здесь создана рольevents with lambda.
Создайте лямбда-функцию для отправки электронной почты
Вам нужно будет выполнить шаги, чтобы создать функцию Lambda, используя среду выполнения как nodejs.
Теперь добавьте триггер в Lambda, как показано -
Добавить детали в 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'
});
Для отправки почты от nodejs, мы создали eParams объект, который имеет такие детали, как example mail, to mail id и the body with message следующим образом -
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 минут.