使用 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
广告