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-namefunction_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::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: !Reffunction_namePrincipal: "iot.amazonaws.com" SourceAccount:account-idSourceArn: 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()}" } } ] } }
以下の資料も参照してください。
-
「AWS Lambda デベロッパーガイド」の 「AWS Lambda とは?」