将 Lambda 函数与计划事件结合使用

计划事件应该根据规则集定期发生。计划事件用于在 CloudWatch 服务中定义的间隔后执行 Lambda 函数。它们最适合与 AWS Lambda 一起用于处理 cron 作业。本章将通过简单示例说明如何使用计划事件和 AWS Lambda 每 5 分钟发送一次邮件。

前提条件

使用 Lambda 函数和计划事件的要求如下 −

  • 使用 AWS SES 验证电子邮件 ID
  • 创建角色以使用 AWS SES、Cloudwatch 和 AWS Lambda
  • 创建 Lambda 函数以发送电子邮件
  • 从 AWS CloudWatch 添加计划事件规则

示例

我们将要考虑的示例将 CloudWatch 事件添加到 AWS Lambda 函数。Cloudwatch 将根据附加到它的时间模式触发 AWS Lambda。例如,在下面的例子中,我们使用 5 分钟作为触发器。这意味着每 5 分钟,AWS Lambda 将被触发一次,并且 AWS Lambda 将在触发时发送邮件。

其基本框图如下所示 −

基本框图

使用 AWS SES 验证电子邮件 ID

登录 AWS 并转到 AWS SES 服务,如下所示 −

客户参与

现在,单击简单电子邮件服务,如下所示 −

简单电子邮件

单击电子邮件地址在左侧显示为 −

电子邮件地址

它会显示一个按钮验证新电子邮件地址。单击它。

验证电子邮件地址

输入您要验证的电子邮件地址。单击验证此电子邮件地址按钮。您将在该电子邮件 ID 上收到来自 AWS 的邮件,邮件主题为:Amazon Web Services – 美国东部(弗吉尼亚北部)地区的电子邮件地址验证请求

单击邮件中提供的链接以验证电子邮件地址。验证后,将显示电子邮件 ID,如下所示 −

显示电子邮件

创建角色以使用 AWS SES、Cloudwatch 和 AWS Lambda

您还可以创建一个授予使用服务权限的角色。为此,请转到 IAM 并选择角色。添加所需的策略并创建角色。请注意,此处创建的角色是 events with lambda

Event With Lambda

创建 Lambda 函数以发送电子邮件

您必须按照以下步骤使用运行时作为 nodejs 创建 Lambda 函数。

Lambda Event Emails

现在,将触发器添加到 Lambda,如下所示 −

Add Triggers Lambda

将详细信息添加到 CloudWatch Events Trigger,如下所示 −

Cloudwatch Events

请注意,根据创建的规则触发器,该事件将每 5 分钟触发一次。

发送电子邮件的 Lambda 代码如下 −

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
   var eParams = {
      Destination: {
         ToAddresses: ["xxxxxxxt12@gmail.com"]
      },
      Message: {
         Body: {
            Text: {
               Data: "this mail comes from aws lambda event scheduling"
            }
         },
         Subject: {
            Data: "Event scheduling from aws lambda"
         }
      },
      Source: "coxxxxxx@gmail.com"
   };
   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 对象,其中包含诸如 示例邮件、邮件 ID包含消息的正文 之类的详细信息,如下所示 −

var eParams = {
   Destination: {
      ToAddresses: ["xxxxxxxx12@gmail.com"]
   },
   Message: {
      Body: {
         Text: {
            Data: "this mail comes from aws lambda event scheduling"
         }
      },
      Subject: {
         Data: "Event scheduling from aws lambda"
      }
   },
   Source: "coxxxxxx@gmail.com"
};

发送电子邮件的Lambda代码如下 −

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 函数并检查邮件的电子邮件 ID。下面的屏幕截图显示,每 5 分钟从 AWS Lambda 发送一次邮件。

Event Scheduling