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

创建 Lambda 规则

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

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

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

创建 Lambda 函数

要创建 Lambda 函数,请执行以下操作:

  1. AWS Lambda 控制台中,选择立即开始使用,如果您之前创建过 Lambda 函数,请选择创建 Lambda 函数

  2. 蓝图页面上的添加筛选条件字段中,输入 hello-world,然后选择 hello-world 蓝图。选择配置按钮。

  3. 在以下页面输入函数名称。在角色下,选择创建自定义角色

    此时 IAM 控制台将打开,您可以创建 IAM 在执行 Lambda 函数时可担任的一个 Lambda 角色。

    要编辑角色策略以授予该角色向您的 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 主题发布消息的权限。

      注意

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

  4. 选择 Allow。IAM 控制台关闭。

  5. 返回 Lambda 控制台。选择 Create function

  6. 在函数配置页面,从左侧的列中选择 AWS IoT。页面上将显示配置触发器部分。

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

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

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

  9. 确保选中启用触发器复选框,然后选择添加。选择右上角的保存来保存此更改。

  10. 在函数配置页面,选择 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.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); };

    注意

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

    选择右上角的保存来保存此更改。

测试 Lambda 函数

要测试 Lambda 函数,请执行以下操作:

  1. 在函数配置页面的右上角,选择测试。如果您尚未创建测试,则系统会显示配置测试事件页面。否则,该页面将显示为一个选项,位于操作菜单和测试按钮之间的下拉菜单中。

  2. 复制以下 JSON 并将其粘贴到配置测试事件页面上,然后选择保存

    { "serialNumber": "ABCDEFG12345", "clickType": "SINGLE", "batteryVoltage": "2000 mV" }
  3. 再次选择测试按钮以运行测试。在 AWS Lambda 控制台中,滚动至页面底部。日志输出部分将显示 Lambda 函数已写入控制台的输出。

创建 Lambda 规则

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

  1. AWS IoT 控制台的左侧导航窗格中,选择行动

  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. 函数名称下拉列表中选择 Lambda 函数名称,然后选择添加操作

  8. 选择创建规则来创建 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 控制台中,选择测试

  2. MQTT 客户端页面上,在发布部分的 Specify a topic (指定主题) 中,键入 iotbutton/ABCDEFG12345

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

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