使用 Lambda 函式與 Amazon SNS



Amazon SNS 是一種用於推送通知的服務。在本節中,我們將透過一個示例來解釋 AWS Lambda 和 Amazon SNS 的工作原理,在這個示例中,我們將執行以下操作:

  • 在 SNS 服務中建立主題,並使用 AWS Lambda 將主題新增到 CloudWatch

  • 向提供的電話號碼傳送 SNS 文字訊息。

先決條件

要在 SNS 服務中建立主題並使用 AWS Lambda 將主題新增到 CloudWatch,我們無需遵循以下步驟:

  • 在 SNS 中建立主題
  • 在 IAM 中建立用於許可權的角色
  • 建立 AWS Lambda 函式
  • 釋出到主題以啟用觸發器
  • 在 CloudWatch 服務中檢查訊息詳細資訊。

要向提供的電話號碼傳送 SNS 文字訊息,我們需要執行以下操作:

  • 在 AWS Lambda 中新增程式碼以將訊息傳送到您的手機。

示例

在本例中,我們將建立一個 SNS 主題。當在主題中輸入詳細資訊以釋出時,將觸發 AWS Lambda。主題詳細資訊記錄在 CloudWatch 中,並且 AWS Lambda 會向手機發送一條訊息。

這是一個基本的框圖,解釋了相同的內容:

Block Diagram Sns

在 SNS 中建立主題

您需要按照以下步驟在 SNS 中建立主題:

步驟 1

登入 AWS 控制檯,然後轉到 Amazon 中的 SNS 服務,如下所示:

Amazon Sns Service

步驟 2

單擊簡單通知服務,然後單擊其中的建立主題

Notification Service

步驟 3

然後,您需要單擊建立新主題按鈕,如下所示:

New Topic

步驟 4

輸入主題名稱顯示名稱,然後單擊建立主題。您應該在顯示屏上看到主題名稱,如下所示:

Topic Name

在 IAM 中建立用於許可權的角色

要建立用於與 AWS Lambda 和 SNS 服務一起使用的角色,我們需要登入 AWS 控制檯。然後,從 Amazon 服務中選擇 IAM,並從左側單擊角色,如下所示。

Role Permission

觀察到我們已為 SNS、Lambda 和 CloudWatch 添加了策略。新增角色名稱,然後單擊建立角色按鈕以完成角色建立過程。

Added Policies

建立 AWS Lambda 函式

在本節中,讓我們瞭解如何使用 nodejs 作為執行時建立 AWS Lambda 函式。

為此,請登入 AWS 控制檯,然後從 AWS 服務中選擇 AWS Lambda。新增函式名稱、角色詳細資訊等,然後建立 AWS Lambda 函式,如下所示。

Create Lambda

新增 SNS 觸發器

要新增 SNS 觸發器,請輸入 SNS 配置詳細資訊,如下所示:

Add Sns

然後,選擇SNS 主題,並將觸發器新增到 AWS Lambda 函式,如下所示:

Sns Topic

然後,新增以下 AWS lambda 程式碼:

exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const sns = event.Records[0].Sns.Message;
   console.log(sns)
   callback(null, sns);
};

在上面的程式碼中,event.Records[0].Sns.Message 給出了新增的訊息詳細資訊。我們添加了控制檯日誌以在 CloudWatch 中檢視它們。現在,使用所需的記憶體和時間分配儲存 Lambda 函式。

釋出到主題以啟用觸發器

回想一下,我們已在步驟 1 中建立了 SNS 中的主題。我們現在將在主題中釋出,並在 CloudWatch 中檢視詳細資訊,這些詳細資訊將由 AWS Lambda 觸發:

釋出到主題

首先選擇要釋出的主題的名稱。單擊釋出到主題按鈕:

Publish Topic

輸入主題訊息詳細資訊,如下所示:

Message Details

您還可以選擇JSON訊息格式以JSON樣式傳送。在螢幕末尾單擊釋出訊息按鈕。

在 CloudWatch 服務中檢查訊息詳細資訊

登入 AWS 控制檯並開啟 CloudWatch 服務。單擊左側的日誌,然後選擇為建立的 AWS Lambda 函式建立的日誌。您可以找到以下日誌顯示,其中包含如上所示建立的訊息:

Check Message

在 AWS Lambda 中新增程式碼以將訊息傳送到您的手機

這裡將使用 SNS 文字訊息使用 AWS Lambda 將訊息傳送到手機。您可以使用以下程式碼更新 AWS Lambda 程式碼,如下所示:

const aws =  require("aws-sdk");
const sns = new aws.SNS({
   region:'us-east-1'
});
exports.handler = function(event, context, callback) {
   console.log("AWS lambda and SNS trigger ");
   console.log(event);
   const snsmessage = event.Records[0].Sns.Message;
   console.log(snsmessage);
   sns.publish({
      Message: snsmessage,
      PhoneNumber: '+911212121212'
   }, function (err, data) {
      if (err) {
         console.log(err);
         callback(err, null);
      } else {
         console.log(data);
         callback(null, data);
      }	
   });
};

我們添加了 AWS SDK 和 SNS 服務以用於傳送訊息。來自 SNS 的事件中的訊息將作為文字訊息傳送到提供的電話號碼。

例如,請觀察以下程式碼:

sns.publish({
   Message: snsmessage,
   PhoneNumber: '+911212121212'
}, function (err, data) {
   if (err) {
      console.log(err);
      callback(err, null);
   } else {
      console.log(data);
      callback(null, data);
   }	
});

現在輸入主題以在 cloudwatch 和上面提供的電話號碼中檢視訊息。

Enter Topic

單擊釋出訊息以釋出訊息。您將在提供的電話號碼上看到一條訊息,如下所示:

Publish Message
廣告