使用 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 每次觸發時都會發送郵件。

相同的基本框圖如下所示:

Basic Block Diagram

使用 AWS SES 驗證電子郵件 ID

登入 AWS 並轉到 AWS SES 服務,如下所示:

Customer Engagement

現在,點選簡單電子郵件服務,如下圖所示:

Simple Email

點選左側的電子郵件地址,如下圖所示:

Email Address

它顯示一個按鈕驗證新的電子郵件地址。點選它。

Verify Email Address

輸入您要驗證的電子郵件地址。點選驗證此電子郵件地址按鈕。您將收到來自 AWS 的郵件,郵件主題為:Amazon Web Services – 電子郵件地址驗證請求(美國東部(弗吉尼亞北部)區域)。

點選郵件中提供的連結以驗證電子郵件地址。驗證後,它將顯示電子郵件 ID,如下所示:

Display Email

建立角色以使用 AWS SES、CloudWatch 和 AWS Lambda

您還可以建立一個角色,該角色允許使用這些服務。為此,請轉到 IAM 並選擇角色。新增所需的策略並建立角色。注意此處建立的角色是events with lambda

Event With Lambda

建立用於傳送電子郵件的 Lambda 函式

您需要按照步驟使用 nodejs 作為執行時建立 Lambda 函式。

Lambda Event Emails

現在,新增觸發器到 Lambda,如下圖所示:

Add Triggers Lambda

新增詳細資訊到CloudWatch Events 觸發器,如下所示:

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
廣告