AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建 AWS Lambda 规则

您可以定义一个规则来调用 Lambda 函数,该函数可以传入触发该规则的 MQTT 消息中的数据。如此一来,您可以处理传入的消息,然后调用其他 AWS 服务或第三方服务。

本教程假定您已经完成了 AWS IoT 入门教程并且使用自己的手机号码创建并订阅了一个 Amazon SNS 主题。现在您创建一个 Lambda 函数,用于向您在 Amazon SNS 入门教程中创建的 AWS IoT 主题发布消息。此外,您还创建一个用于调用 Lambda 函数的 Lambda 规则,该函数可以传入触发该规则的 MQTT 消息中的一些数据。

在本教程中,您将使用 AWS IoT MQTT 客户端发送用于触发规则的消息。

创建 Lambda 函数

  1. AWS Lambda 控制台中,选择创建函数

  2. Create function 页面上,选择 Blueprints。在蓝图筛选条件字段中,输入 hello-world,然后按 Enter。选择 hello-world 蓝图,然后选择配置

  3. 基本信息页面中,输入函数的名称。

    注意

    我们建议不要在您的规则名称或描述中使用个人身份信息。

  4. 角色下拉菜单中,选择创建自定义角色。这将在新选项卡中打开 IAM 控制台。在 IAM 控制台中,输入角色的名称,然后选择查看策略文档

  5. 选择编辑以编辑角色的策略并将策略文档替换为以下内容。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-2:123456789012:MyIotSNSTopic" } ] }

    该策略文档添加了向您的 Amazon SNS 主题发布消息的权限。

    注意

    将第二个 Resource 的值替换为您之前创建的 Amazon SNS 主题的 ARN。

    选择 Allow

  6. 在 Lambda 控制台中,选择创建函数

  7. 在函数的配置页面的添加触发器下,选择 AWS IoT

  8. 配置触发器IoT 类型下,选择自定义 IoT 规则。在规则下,选择创建新规则

    1. 规则名称中,输入规则的名称。

    2. 规则描述中,输入规则的简短描述。

    3. 规则查询语句中,输入 SELECT * FROM "my/lambda/topic"

    4. 选择 Enable trigger (启用触发器)。

    5. 选择 Add

    6. 在页面的右上角,选择保存

  9. 在函数的配置页面上,选择 Lambda 函数的名称。在页面的函数代码部分中,将现有代码替换为以下内容。

    console.log('Loading function'); // Load the AWS SDK var AWS = require("aws-sdk"); // Set up the code to call when the Lambda function is invoked exports.handler = (event, context, callback) => { // Load the message passed into the Lambda function into a JSON object var eventText = JSON.stringify(event, null, 2); // Log a message to the console; you can view this text in the Monitoring tab in the Lambda console or in the CloudWatch Logs console console.log("Received event:", eventText); // Create a string, extracting the click type and serial number from the message sent by the AWS IoT button var messageText = "Received " + event.message + " from AWS IoT rule"; // Write the string to the console console.log("Message to send: " + messageText); // Create an SNS object var sns = new AWS.SNS(); // Populate the parameters for the publish operation // - Message : the text of the message to send // - TopicArn : the ARN of the Amazon SNS topic to which you want to publish var params = { Message: messageText, TopicArn: "arn:aws:sns:us-west-2:123456789012:MyIotSNSTopic" }; sns.publish(params, context.done); };

    注意

    TopicArn 的值替换为您之前创建的 Amazon SNS 主题的 ARN。

    选择 Save

测试 Lambda 函数

  1. 在函数的配置页面的右上角,选择测试

  2. 配置测试事件页面上:

    1. 选择 Create new test event

    2. 输入测试事件的名称。

    3. 在文本框中,输入以下 JSON 代码:

      { "message" : "Hello, world" }
    4. 选择 Create

  3. 再次选择测试以运行测试。在 AWS Lambda 控制台中,滚动至页面底部。执行结果选项卡显示 Lambda 函数已写入控制台的输出。

测试 Lambda 规则

  1. 要测试您的 Lambda 规则,请打开 AWS IoT 控制台,并从导航窗格中选择测试

  2. 选择发布到主题

  3. 对于主题,输入 my/lambda/topic

  4. 对于消息,输入以下 JSON:

    { "message" : "Hello, world" }

    您应该在使用 SNS 配置的行中收到一条文本消息。