AWS IoT
開発者ガイド

AWS Lambda ルールを作成する

ルールをトリガーした MQTT メッセージのデータを渡して、Lambda 関数を呼び出すルールを定義できます。これにより、受信メッセージからデータを抽出してから、別の AWS またはサードパーティーサービスを呼び出すことができます。このチュートリアルでは、「AWS IoT 開始方法のチュートリアル」を完了しており、Amazon SNS トピックを作成してサブスクライブしたとします。ここで、「Lambda 開始方法のチュートリアル」で作成した Amazon SNS トピックにメッセージをパブリッシュする AWS IoT 関数を作成します。また、ルールをトリガーした MQTT メッセージのデータを渡して Lambda 関数を呼び出す Lambda ルールを作成します。

このチュートリアルでは、AWS IoT MQTT クライアントを使用して、ルールをトリガーするメッセージを送信します。

Lambda 関数の作成

  1. AWS Lambda コンソールで、[関数の作成] を選択します。

  2. [Create function (関数の作成)] ページで、[Blueprints (設計図)] を選択します。[設計図] フィルタフィールドに「hello-world」と入力し、Enter キーを押します。[hello-world-python] 設計図を選択し、[設定] を選択します。

  3. [基本的な情報] で、関数に名前を入力します。

    注記

    ルールの名前や説明に個人を特定できる名前や情報を使用することはお勧めしません。

  4. [Execution Role (実行ロール)] ドロップダウンリストから、[Create new role from AWS policy templates (AWS ポリシーテンプレートから新しいロールを作成)] を選択します。ロールの名前を入力します。[ポリシーテンプレート] で、[Amazon SNS Publish policy (Amazon SNS 発行ポリシー)] を選択します。ドロップダウンメニューの外側をクリックして閉じます。

  5. [Create function] を選択します。

  6. AWS Lambda コンソールで、Lambda 関数の名前を選択します。Lambda 関数に関する情報が表示されます。ページの [関数コード] セクションまで下にスクロールし、既存のコードを以下のコードに置き換えます。

    from __future__ import print_function import json import boto3 print('Loading function') def lambda_handler(event, context): # Parse the JSON message eventText = json.dumps(event) # Print the parsed JSON message to the console; you can view this text in the Monitoring tab in the Lambda console or in the CloudWatch Logs console print('Received event: ', eventText) # Create an SNS client sns = boto3.client('sns') # Publish a message to the specified topic response = sns.publish ( TopicArn = 'arn:aws:iam::123456789012:role/service-role/myLambdaFunctionRole', Message = eventText ) print(response)

    注記

    TopicArn の値を、以前に作成した Amazon SNS トピックの ARN に置き換えます。

    [Save] を選択します。

Lambda 関数をテストする

  1. Lambda 関数の詳細ページの右上で、[Select a test event (テストイベントを選択)] から、[Configure test events (テストイベントの設定)] を選択します。

  2. [Configure test event (テストイベントの設定)] にテストイベントの名前を入力し、JSON メッセージを次のように置き換えます。

    { "message" : "Hello, world" }

    [Create] を選択します。

  3. Lambda 関数の詳細ページの右上で、[テスト] を選択し、テストイベントで指定したメッセージを使用して Lambda 関数をテストします。

  4. [Execution result (実行の結果)] タブの Lambda 関数コードの下に、 Lambda 関数からの出力が表示されます。

Lambda ルールを作成する

このセクションでは、Lambda アクションとエラーアクションを使用してルールを作成するステップについて説明します。Lambda アクションは Lambda 関数を呼び出します。Lambda 関数の呼び出し中にエラーが発生した場合、エラーアクションはlambda/error MQTT トピックにメッセージを発行します。これは、ルールをテストする場合に役立ちます。

  1. AWS IoT コンソールを参照し、ナビゲーションペインから [Software (ソフトウェア)] を選択します。

  2. [作成] を選択して、AWS IoT ルールを作成します。

  3. [ルールの作成] ページで、ルールの名前を入力します。

  4. [ルールクエリステートメント] エディタで、以下のクエリを入力します。

    SELECT * FROM "my/lambda/topic"
  5. [Set one or more actions] で、[Add action] を選択します。

  6. [アクションを選択してください] セクションで、[Lambda 関数にメッセージを送信する]、[アクションの設定] の順に選択します。

  7. [Configure action (アクションの設定)] で、[選択] を選択します。

  8. Lambda 関数を選択します。

  9. [Add action] を選択します。

  10. [Create a rule (ルールの作成)] ページの [Error action (エラーアクション)] で、[Add action (アクションの追加)] を選択します。

  11. [Set an action as error action (エラーアクションとしてアクションを設定)] で、[AWS IoT トピックにメッセージを再発行]、[アクションの設定] を選択します。

  12. [アクションの設定] で、[トピック] に lambda/error と入力します。

  13. [このアクションを実行するための AWS IoT アクセス権限を付与するロールを選択または作成します] で、[ロールの作成] を選択します。

  14. [新しいロールの作成] で、ロールの名前を入力し、[ロールの作成] を選択します。

  15. [アクションの設定] で、[アクションの追加] を選択します。

  16. [ルールの作成] で [ルールの作成] を選択します。

Lambda ルールをテストする

  1. Lambda ルールをテストするには、AWS IoT コンソールを開き、ナビゲーションペインで [テスト] を選択します。

  2. MQTT クライアントの [Subscription topic (トピックのサブスクリプション)] で「lambda/error」と入力し、[Subscribe to topic (トピックへのサブスクライブ)] を選択します。

  3. [発行] に「my/lambda/topic」と入力し、 [Publish to topic (トピックに発行)] を選択して、デフォルトの JSON メッセージを発行します。

このメッセージを公開するとルールがトリガーされ、Lambda 関数が呼び出されます。Lambda 関数は、Amazon SNS トピックに登録された電話番号に Amazon SNS メッセージをプッシュします。テキストメッセージが表示されない場合は、MQTT クライアントで、lambda/error にメッセージが公開されていないか確認してください。

Lambda ルールのトラブルシューティング

Lambda 機能を呼び出してもテキストメッセージが届かない場合は、電話番号が Amazon SNS トピックに登録されていることを確認してください。電話番号が登録されている場合は、Lambda 関数の CloudWatch ログを確認します。AWS Lambda は CloudWatch にログを書き込むため、Lambda 関数からの出力を確認することができます。

CloudWatch ログを表示するには

  1. Lambda コンソールのナビゲーションペインで、[関数] を選択します。

  2. Lambda 関数を選択します。

  3. Lambda 関数詳細ページで、[モニタリング] タブを選択します。

  4. [CloudWatch のログを表示] を選択します。

  5. 最新のストリームを選択します。

  6. ログストリームには、Lambda 関数によって書き込まれたログが表示されます。