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 控制台中,选择 Create function (创建函数)

  2. Create function (创建函数) 页面中,选择 Use a blueprint (使用蓝图)。在蓝图筛选条件字段中,输入 hello-world,然后按 Enter。选择 hello-world-python 蓝图,然后选择配置

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

    注意

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

  4. Execution role (执行角色) 中,选择 Create a new role from AWS policy templates (从 AWS 策略模板创建新角色)。在角色名称下,请为角色输入一个名称。从策略模板中,选择 Amazon SNS publish policy (Amazon SNS 发布策略)。在下拉菜单外部单击将其关闭。

  5. 选择 Create function (创建函数)

  6. 在 Lambda 控制台中,选择您的 Lambda 函数的名称。将显示有关 Lambda 函数的信息。滚动到 Function code (函数代码) 部分,将现有代码替换为以下内容:

    from __future__ import print_function import json import boto3 print('Loading function') def lambda_handler(event, context): # Parse the JSON message eventText = json.dumps(event) # Print the parsed JSON message to the console; you can view this text in the Monitoring tab in the Lambda console or in the CloudWatch Logs console print('Received event: ', eventText) # Create an SNS client sns = boto3.client('sns') # Publish a message to the specified topic response = sns.publish ( TopicArn = 'arn:aws:iam::123456789012:role/service-role/myLambdaFunctionRole', Message = eventText ) print(response)

    注意

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

    选择 Save

测试 Lambda 函数

  1. 在 Lambda 函数详细信息页面的右上角,从选择测试事件中,选择配置测试事件

  2. 配置测试事件中,输入测试事件的名称并将 JSON 消息替换为以下内容:

    { "message" : "Hello, world" }

    选择创建

  3. 在 Lambda 函数详细信息页面的右上角,选择 Test (测试) 以使用您在测试事件中指定的消息来测试您的 Lambda 函数。

  4. 在您的 Lambda 函数代码下,在执行结果选项卡上,您将看到 Lambda 函数的输出。

创建 Lambda 规则

本节介绍使用 Lambda 操作和错误操作创建规则的步骤。Lambda 操作调用您的 Lambda 函数。如果在调用 Lambda 函数时出现错误,错误操作会将一则消息发布到 lambda/error MQTT 主题。当测试规则时,这非常有用。

  1. 浏览到 AWS IoT 控制台,在导航窗格中,选择 Act (操作)

  2. 选择 Create (创建) 以创建 AWS IoT 规则。

  3. 创建规则页面上,输入规则的名称。

  4. 规则查询语句中,输入以下查询:

    SELECT * FROM "my/lambda/topic"
  5. 设置一个或多个操作中,选择添加操作

  6. 选择操作下,选择Send a message to a Lambda function (将消息发送到 Lambda 函数),然后选择配置操作

  7. 配置操作中,选择选择

  8. 选择您的 Lambda 函数。

  9. 选择添加操作

  10. 创建规则页面上,在错误操作中,选择添加操作

  11. 将操作设置为错误操作页上,选择将消息重新发布到 AWS IoT 主题,然后选择配置操作

  12. 配置操作页上,在主题下,输入 lambda/error

  13. 选择或创建角色以向 AWS IoT 授予执行此操作的权限下,选择 Create role (创建角色)

  14. 创建新角色中,输入角色的名称,然后选择 Create role (创建角色).

  15. 配置操作中,选择添加操作

  16. 创建规则中,选择创建规则

测试 Lambda 规则

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

  2. 在 MQTT 客户端中,在订阅主题下,输入 lambda/error,然后选择订阅主题

  3. 发布下,输入 my/lambda/topic,然后选择发布到主题以发布默认的 JSON 消息。

发布此消息应触发规则并调用您的 Lambda 函数。您的 Lambda 函数将 Amazon SNS 消息推送至订阅了您的 Amazon SNS 主题的电话号码。如果您没有收到文本消息,请在 MQTT 客户端中,检查是否有任何消息发布到 lambda/error

Lambda 规则故障排除

如果您的 Lambda 函数被调用,但您未收到文本消息,请确保您的电话号码已订阅您的 Amazon SNS 主题。如果您的电话号码已订阅主题,请检查 Lambda 函数的 CloudWatch 日志。AWS Lambda 将日志写入 CloudWatch,这让您可以查看 Lambda 函数的输出。

查看 CloudWatch Logs

  1. 在 Lambda 控制台中,从导航窗格中选择 Functions (函数)

  2. 选择您的 Lambda 函数。

  3. 在 Lambda 函数详情页面上,选择监控选项卡。

  4. 选择查看 CloudWatch 中的日志

  5. 选择最新的日志流。

  6. 日志流显示 Lambda 函数写入的日志。