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 函数,则您必须配置一个策略,以便向 Amazon IoT 授予 lambda:InvokeFunction的权限。您只能调用在与您的 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-arnsource-account 的情况下为 Amazon IoT 主体添加权限,则通过 Lambda 操作创建规则的所有 Amazon Web Services 账户都可以激活规则,以便从 Amazon IoT 调用 Lambda 函数。

    有关更多信息,请参阅 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 示例定义了 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()}" } } ] } }

另请参阅