本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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
权限的策略。在此命令中,替换:-
function_name
使用 Lambda 函数的名称。添加新的权限来更新函数的资源策略。 -
region
使用函数 AWS 区域 的。 -
account-id
使用定义规则的 AWS 账户 数字。 -
rule-name
使用您要为其定义 Lambda 操作的 AWS IoT 规则的名称。 -
unique_id
带有唯一的语句标识符。
重要
如果您在不提供
source-arn
或的情况下为 AWS IoT 委托人添加权限source-account
,则任何 AWS 账户 使用您的 Lambda 操作创建规则的人都可以激活规则,从中调用您的 Lambda 函数。 AWS IoT有关更多信息,请参阅 AWS Lambda 权限。
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" -
-
如果您使用 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
-
要调ARN用的 Lambda 函数的。 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()}" } } ] } }
另请参阅
-
什么是 AWS Lambda? 在《AWS Lambda 开发者指南》中