AWS IoT
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

创建 Lambda 规则

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

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

本教程还假定您正在使用 AWS IoT 按钮来触发 Lambda 规则。如果您没有 AWS IoT 按钮,您可以在此处购买一个,也可以使用 MQTT 客户端发送触发规则的 MQTT 消息。

创建 Lambda 函数

创建 Lambda 函数:

  1. AWS Lambda 控制台 中,选择 Get Started Now,如果您之前创建过 Lambda 函数,请选择 Create a Lambda function

  2. Select blueprint 页面,在 Filter 字段键入 hello-world,然后选择 hello-world 蓝图。

  3. Configure triggers 页面,选择 Lambda 图标左侧的框,然后从下拉菜单中选择 AWS IoT

  4. Device Serial Number 字段,键入您的按钮的设备序列号 (DSN)。此 DSN 印在 AWS IoT 按钮的背面。如果您尚未给 AWS IoT 按钮生成证书和私有密钥,请选择 Generate certificate and keys。否则,请跳至步骤 6。

  5. 选择用于下载证书 PEM 和私有密钥的链接。将这些文件保存在计算机中的安全位置。

    按照在线说明操作来配置您的 AWS IoT 按钮。

  6. 确保选中 Enable trigger 复选框,然后选择 Next

  7. Configure function 页面上,键入 Lambda 函数的名称和描述。在 Runtime 中,选择 Node.js 6.10

  8. 向下滚动至页面的 Lambda function code 部分。使用以下代码替换现有代码:

    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.clickType + " message from button ID: " + event.serialNumber; // 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-east-1:123456789012:MyIoTButtonSNSTopic" }; sns.publish(params, context.done); };

    注意

    使用您先前创建的 Amazon SNS 主题的 ARN 替换 TopicArn 的值。

  9. 向下滚动至页面的 Lambda function handler and role 部分。对于 Role,请选择 Create a custom role。此时 IAM 控制台将打开,您可以创建一个 Lambda 在执行 Lambda 函数时可代入的 IAM 角色。

    编辑角色策略以授予该角色向您的 Amazon SNS 主题发布消息的权限:

    1. 选择 View Policy Document

    2. 选择 Edit 以编辑角色的策略。

    3. 使用以下文档替换当前策略文档:

      { "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-east-1:123456789012:MyIoTButtonSNSTopic" } ] }

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

      注意

      使用您先前创建 Amazon SNS 主题的 ARN 替换第二个 Resource 的值。

  10. 选择 Allow

  11. Advanced settings 页面中的各项设置保留为默认设置,然后选择 Next

  12. Review 页面上,选择 Create function

测试您的 Lambda 函数

测试 Lambda 函数:

  1. Actions 菜单上,选择 Configure test event

  2. 复制以下 JSON 并将其粘贴到 Input test event 页面上,然后选择 Save and test

    { "serialNumber": "ABCDEFG12345", "clickType": "SINGLE", "batteryVoltage": "2000 mV" }
  3. 在 AWS Lambda 控制台中,滚动至页面底部。Log output 部分将显示 Lambda 函数已写入控制台的输出。

创建 Lambda 规则

您已经创建了 Lambda 函数,接下来您可以创建用于调用 Lambda 函数的规则。

  1. AWS IoT 控制台中,在左侧导航窗格中选择 Rules

  2. Rules 页面,选择 Create

  3. 键入规则的名称和描述。

  4. 输入以下规则设置:

  5. Set one or more actions 中,选择 Add action

  6. Select an action 页面,选择 Invoke a Lambda function passing the message data,然后选择 Configure action

  7. Function name 下拉列表中选择 Lambda 函数名称,然后选择 Add action

  8. 选择 Create rule 来创建您的 Lambda 函数。

测试您的 Lambda 规则

本教程假定您已经完成了 AWS IoT 入门教程,其中包括:

  • 配置 AWS IoT 按钮。

  • 使用手机号码创建和订阅 Amazon SNS 主题。

您的按钮已完成配置并连接到 Wi-Fi,且您已经配置了 Amazon SNS 主题,现在您可以按一下按钮来测试您的 Lambda 规则。您的手机应该会收到一条 SMS 文本消息,其中包含:

  • 您的按钮的序列号。

  • 按钮按压类型 (按一下或按两下)。

  • 电池电压。

该消息的内容应与以下内容类似:

IOT BUTTON> { "serialNumber" : "ABCDEFG12345", "clickType" : "SINGLE", "batteryVoltage" : "2000 mV" }

如果您没有按钮,您可以在此处购买一个,也可以使用 AWS IoT MQTT 客户端作为替代。

  1. AWS IoT 控制台中,选择 Test

  2. MQTT client 页面上,在 Publish 部分的 Specify a topic 中键入 iotbutton/ABCDEFG12345

    Payload 中,键入以下 JSON,然后选择 Publish to topic

    { "serialNumber" : "ABCDEFG12345", "clickType" : "SINGLE", "batteryVoltage" : "2000 mV" }
  3. 您的手机会收到一条消息。