Lambda - AWS IoT Core

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Lambda

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

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

要求

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

  • AWS IoT 要调用 Lambda 函数,必须配置授予lambda:InvokeFunction权限的策略。 AWS IoT您只能调用 Lambda 策略 AWS 区域 所在位置定义的 Lambda 函数。Lambda 函数使用基于资源的策略,因此您必须将该策略附加到 Lambda 函数本身。

    使用以下 AWS CLI 命令附加授予lambda:InvokeFunction权限的策略。

    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"

    add-permission 命令需要以下参数:

    --function-name

    Lambda 函数的名称 添加新的权限来更新函数的资源策略。

    --region

    函数 AWS 区域 的。

    --principal

    获取权限的委托人。这应该是iot.amazonaws.com为了 AWS IoT 允许调用 Lambda 函数。

    --source-arn

    规则的 ARN。您可以使用get-topic-rule AWS CLI 命令获取规则的 ARN。

    --source-account

    定义规则 AWS 账户 的地方。

    --statement-id

    唯一的语句标识符。

    --action

    要在此声明中允许的 Lambda 操作。 AWS IoT 要允许调用 Lambda 函数,请指定。lambda:InvokeFunction

    重要

    如果您在不提供source-arn或的情况下为 AWS IoT 委托人添加权限source-account,则任何 AWS 账户 使用您的 Lambda 操作创建规则的人都可以激活规则,从中调用您的 Lambda 函数。 AWS IoT

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

  • 如果您使用 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 示例在规则中定义了 Lambda 操作。 AWS IoT

{ "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 示例定义了在规则中使用替换模板的 Lambda 操作。 AWS IoT

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

另请参阅