本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Lambda
Lambda (lambda
) 操作调用 Amazon Lambda 函数,传入 MQTT 消息。Amazon IoT 将异步调用 Lambda 函数。
您可以按照教程执行操作,该教程向您说明如何使用 Lambda 操作创建并测试规则。有关更多信息,请参阅教程:使用 Amazon Lambda函数格式化通知:
要求
此规则操作具有以下要求:
-
如需使用 Amazon IoT 调用 Lambda 函数,则您必须配置一个策略,以便向 Amazon IoT 授予
lambda:InvokeFunction
的权限。您只能调用在与您的 Lambda 策略所在同一 Amazon Web Services 区域 中定义的 Lambda 函数。Lambda 函数使用基于资源的策略,因此您必须将该策略附加到 Lambda 函数本身。使用以下 Amazon CLI 命令附加授予
lambda:InvokeFunction
权限的策略:aws lambda add-permission --function-name
function_name
--regionregion
--principal iot.amazonaws.com --source-arn arn:aws:iot:region
:account-id
:rule/rule_name
--source-accountaccount-id
--statement-idunique_id
--action "lambda:InvokeFunction"add-permission
命令需要以下参数:--function-name
-
Lambda 函数的名称 添加新的权限来更新函数的资源策略。
--region
-
函数的Amazon Web Services 区域。
--principal
-
获取权限的委托人。这应该是
iot.amazonaws.com
,以便授予 Amazon IoT 调用 Lambda 函数的权限。 --source-arn
-
规则的 ARN。您可以使用
get-topic-rule
Amazon CLI 命令来获取规则的 ARN。 --source-account
-
在其中定义规则的Amazon Web Services 账户。
--statement-id
-
唯一的语句标识符。
--action
-
要在此语句中允许的 Lambda 操作。要允许 Amazon IoT 调用 Lambda 函数,请指定
lambda:InvokeFunction
。
重要
如果您在不提供源 Amazon IoT 或
source-arn
的情况下为source-account
委托人添加权限,则通过 Lambda 操作创建规则的所有 Amazon Web Services 账户 都可以触发规则,以便从 Amazon IoT 调用 Lambda 函数。有关更多信息,请参阅 Amazon Lambda 权限。
-
如果您使用 Amazon Key Management Service (Amazon KMS) 客户托管的 Amazon KMS key (KMS 密钥)对 Lambda 中的数据进行静态加密,服务必须具有代表调用方使用 Amazon KMS key 的权限。有关更多信息,请参阅 Amazon Lambda开发人员指南中的静态加密。
参数
使用此操作创建 Amazon IoT 规则时,您必须指定以下信息:
functionArn
-
要调用的 Lambda 函数的 ARN。Amazon IoT 必须具有调用函数的权限。有关更多信息,请参阅要求:
如果您未指定 Lambda 函数的版本或别名,则将执行该函数的最新版本。如果要执行 Lambda 函数的特定版本,则可执行其版本或别名。要指定一个版本或别名,请将该版本或别名附加到 Lambda 函数的 ARN。
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias
有关版本控制和别名的更多信息,请参阅 Amazon Lambda 函数版本控制和别名。
支持替换模板:仅限 API 和 Amazon CLI
示例
下面的 JSON 示例定义了 Amazon 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 示例定义了 Amazon 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()}" } } ] } }
另请参阅
-
Amazon Lambda 开发人员指南中的什么是 Amazon Lambda?