Lambda - AWS IoT Core

Lambda

Lambda (lambda) 操作调用 AWS Lambda 函数,传入 MQTT 消息。AWS IoT 将异步调用 Lambda 函数。

您可以按照教程执行操作,该教程向您说明如何使用 Lambda 操作创建并测试规则。有关更多信息,请参阅 教程:使用 AWS Lambda 函数格式化通知

要求

此规则操作具有以下要求:

  • 如需使用 AWS IoT 调用 Lambda 函数,则您必须配置一个策略,以便向 AWS IoT 授予 lambda:InvokeFunction的权限。您只能调用在与您的 Lambda 策略所在同一 AWS 区域 中定义的 Lambda 函数。Lambda 函数使用基于资源的策略,因此您必须将该策略附加到 Lambda 函数本身。

    使用以下 AWS CLI 命令附加授予 lambda:InvokeFunction 权限的策略:在该命令中,将:

    • function_name 替换为 Lambda 函数的名称。添加新的权限来更新函数的资源策略。

    • region 替换为函数的 AWS 区域。

    • account-id 替换为定义规则的 AWS 账户 号码。

    • rule-name 替换为您正在为其定义 Lambda 操作的 AWS IoT 规则的名称。

    • unique_id 替换为唯一的语句标识符。

    重要

    如果您在不提供 source-arnsource-account 的情况下为 AWS IoT 主体添加权限,则通过 Lambda 操作创建规则的所有 AWS 账户都可以激活规则,以便从 AWS IoT 调用 Lambda 函数。

    有关更多信息,请参阅 AWS Lambda 权限

    aws lambda add-permission \ --function-name function_name \ --region region \ --principal iot.amazonaws.com \ --source-arn arn:aws:iot:region:account-id:rule/rule_name \ --source-account account-id --statement-id unique_id --action "lambda:InvokeFunction"
  • 如果您使用 AWS IoT 控制台为 Lambda 规则操作创建规则,则会自动触发 Lambda 函数。如果您使用 AWS CloudFormation 而不是 AWS::IoT::TopicRule LambdaAction,您必须添加一个 AWS::lambda::Permission 资源。然后该资源授予您触发 Lambda 函数的权限。

    以下代码显示了如何添加此资源的示例。在此示例中:

    • function_name 替换为 Lambda 函数的名称。

    • region 替换为函数的 AWS 区域。

    • account-id 替换为定义规则的 AWS 账户 号码。

    • rule-name 替换为您正在为其定义 Lambda 操作的 AWS IoT 规则的名称。

    Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: !Ref function_name Principal: "iot.amazonaws.com" SourceAccount: account-id SourceArn: arn:aws:iot:region:account-id:rule/rule_name
  • 如果您使用 AWS KMS 客户自主管理型 AWS KMS key 加密 Lambda 中的静态数据,服务必须具有代表调用方使用 AWS KMS key 的权限。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的静态加密

参数

使用此操作创建 AWS IoT 规则时,您必须指定以下信息:

functionArn

要调用的 Lambda 函数的 ARN。AWS IoT 必须具有调用函数的权限。有关更多信息,请参阅 要求

如果您未指定 Lambda 函数的版本或别名,则将关闭该函数的最新版本。如果要关闭 Lambda 函数的特定版本,则可指定版本或别名。要指定一个版本或别名,请将该版本或别名附加到 Lambda 函数的 ARN。

arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias

有关版本控制和别名的更多信息,请参阅 AWS Lambda 函数版本控制和别名

支持替换模板:仅限 API 和 AWS CLI

示例

下面的 JSON 示例定义了 AWS IoT 规则中的 Lambda 函数。

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "lambda": { "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction" } } ] } }

下面的 JSON 示例定义了 AWS IoT 规则中一个带有替代模板的 Lambda 操作。

{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "lambda": { "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:${topic()}" } } ] } }

另请参阅