将 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 通过电话发送消息。

这是一个基本框图,解释了相同的内容 -

框图 Sns

在 SNS 中创建主题

您必须按照以下步骤在 SNS 中创建主题 -

步骤1

登录 AWS 控制台并转到 Amazon 中的 SNS 服务,如下所示 -

亚马逊社交网络服务

第2步

单击简单通知服务并在其中创建主题。

通知服务

步骤3

然后,您必须单击“创建新主题”按钮,如下所示 -

新话题

步骤4

输入主题名称显示名称,然后单击创建主题。您应该在显示中看到主题名称,如下所示 -

主题名称

在 IAM 中创建权限角色

要创建一个角色来使用AWS Lambda和SNS服务,我们需要登录AWS控制台。然后,从 Amazon 服务中选择 IAM,然后单击左侧的角色,如下所示。

角色权限

请注意,我们已添加针对 SNS、Lambda 和 CloudWatch 的策略。添加角色名称并单击创建角色按钮即可完成角色创建过程。

新增政策

创建 AWS Lambda 函数

在本节中,让我们了解如何使用nodejs作为运行时创建AWS Lambda函数。

为此,请登录 AWS 控制台并从 AWS 服务中选择 AWS Lambda。添加函数名称、角色详细信息等并创建 AWS Lambda 函数,如图所示。

创建拉姆达

添加 SNS 触发器

要添加 SNS 触发器,请输入 SNS 配置详细信息,如下所示 -

添加社交网络

然后,选择SNS 主题并将触发器添加到 AWS Lambda 函数,如下所示 -

社交网络话题

然后,添加下面给出的 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 触发 -

发布到主题

首先选择要发布的主题名称。单击“发布到主题”按钮 -

发布主题

输入主题消息详细信息,如下所示 -

留言详情

您还可以选择JSON消息格式以JSON风格发送。单击屏幕末尾的发布消息按钮。

在 CloudWatch 服务中查看消息详细信息

登录AWS控制台并打开CloudWatch服务。单击左侧的日志,然后选择创建的 AWS Lambda 函数的日志。您可以找到以下显示的日志,其中包含如上所示创建的消息 -

查看留言

在 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 中的消息以及上面给出的电话号码。

输入主题

单击发布消息以发布消息。您会在电话号码上看到一条消息,如下所示 -

发布消息