Lambda - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Lambda

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

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

要求

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

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

    使用以下 Amazon CLI 命令附加授予lambda:InvokeFunction权限的策略。在此命令中,替换:

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

    • region使用函数 Amazon Web Services 区域 的。

    • account-id使用定义规则的 Amazon Web Services 账户 数字。

    • rule-name使用您要为其定义 Lambda 操作的 Amazon IoT 规则的名称。

    • unique_id带有唯一的语句标识符。

    重要

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

    有关更多信息,请参阅 Amazon 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"
  • 如果您使用 Amazon IoT 控制台为 Lambda 规则操作创建规则,则会自动触发 Lambda 函数。如果 Amazon CloudFormation 改为使用的 AWS::IoT::TopicRule LambdaAction,则必须添加AWS::lambda::Permission资源。然后,该资源授予您触发 Lambda 函数的权限。

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

    • function_name使用 Lambda 函数的名称。

    • region使用函数 Amazon Web Services 区域 的。

    • account-id使用定义规则的 Amazon Web Services 账户 数字。

    • rule-name使用您要为其定义 Lambda 操作的 Amazon 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
  • 如果您使用 Amazon KMS 客户托管 Amazon KMS key 对 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 示例在规则中定义了 Lambda 操作。 Amazon 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 操作。 Amazon 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()}" } } ] } }

另请参阅