Lambda - AWS IoT Core

Lambda

Lambda (lambda) アクションは、AWS Lambda 関数を呼び出し、MQTT メッセージを渡します。AWS IoT は Lambda 関数を非同期で呼び出します。

Lambda アクションを使用してルールを作成およびテストする方法を示すチュートリアルに従うことができます。詳細については、「チュートリアル: AWS Lambda 関数を使用して通知をフォーマットする」を参照してください。

要件

このルールアクションには、以下の要件があります。

  • AWS IoT で Lambda 関数を呼び出すには、AWS IoT に lambda:InvokeFunction アクセス許可を付与するポリシーを設定する必要があります。呼び出すことができるのは、Lambda ポリシーが存在するのと同じ AWS リージョンで定義された Lambda 関数のみです。Lambda 関数はリソースベースのポリシーを使用するため、ポリシーを Lambda 関数自体にアタッチする必要があります。

    lambda:InvokeFunction アクセス許可を付与するポリシーをアタッチするには、次の AWS CLI コマンドを使用します。このコマンドを、以下のように置き換えます。

    • function_name を Lambda 関数の名前に置き換えます。関数のリソースポリシーを更新するための新しいアクセス許可を追加します。

    • region を関数の AWS リージョン に置き換えます。

    • account-id をルールを定義している AWS アカウント 番号に置き換えます。

    • rule-name を、Lambda アクションを定義する AWS IoT ルールの名前で置き換えます。

    • unique_id を一意のステートメント識別子で置き換えます。

    重要

    source-arn または source-account を指定せずに、AWS IoT プリンシパルの許可を追加すると、Lambda アクションを使用してルールを作成するすべての AWS アカウント が、AWS IoT から Lambda 関数を呼び出すルールをアクティブ化できるようになります。

    詳細については、「AWS 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"
  • AWS IoT コンソールを使用して Lambda ルールアクションのルールを作成している場合、Lambda 関数は自動的にトリガーされます。代わりに、AWS::IoT::TopicRule LambdaAction を設定した AWS CloudFormation を使用する場合は、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
  • Lambda 内の保管中のデータを暗号化するために AWS KMS カスタマーマネージド AWS KMS key を使用する場合、サービスには発信者に代わって AWS KMS key を使用するための許可が必要です。詳しくは、[AWS LambdaDeveloper Guide]( デベロッパーガイド)の[Encryption at rest](保管時の暗号化)を参照してください。

パラメータ

このアクションで 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 例では、AWS 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 例では、AWS 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()}" } } ] } }

以下の資料も参照してください。