存続期間の長い Lambda 関数のテスト - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行することを強くお勧めします。 AWS IoT Greengrass Version 2これにより、重要な新機能が追加され、プラットフォーム のサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

存続期間の長い Lambda 関数のテスト

存続期間の長い Lambda 関数は AWS IoT Greengrass コアが起動すると自動的に起動します (そして単一のコンテナまたはサンドボックスで実行されます)。関数ハンドラの外部で定義される変数と事前処理ロジックは、この関数ハンドラの毎回の呼び出しのために保持されます。ハンドラ関数の複数の呼び出しは、前の呼び出しが実行されるまでキューに入れられます。

このモジュールで使用される greengrassHelloWorldCounter.py コードは、関数ハンドラの外部で my_counter 変数を定義します。

注記

コードは、AWS Lambda コンソールまたは GitHub の AWS IoT Greengrass Core SDK for Python で確認できます。

このステップでは、Lambda 関数と AWS IoT に MQTT メッセージの交換を許可するサブスクリプションを作成します。その後、グループをデプロイして関数をテストします。

  1. グループの設定ページで [Subscriptions] (サブスクリプション)、[Add] (追加) の順に選択します。

  2. [Source type] (ソースのタイプ) で、[Lambda function] (Lambda 機能) を選択し、次に [Greengrass_HelloWorld_Counter] を選択します。

  3. [Target type] (ターゲットタイプ) から、[Service] (サービス)、[IoT Cloud] (IoT クラウド) の順に選択します。

  4. [トピックのフィルター] に「hello/world/counter」と入力します。

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

    この単一のサブスクリプションは、Greengrass_HelloWorld_Counter Lambda 関数から AWS IoT への一方向のみに向かいます。この Lambda 関数をクラウドから呼び出す (またはトリガーする) には、反対方向のサブスクリプションを作成する必要があります。

  6. 以下の値を使用する別のサブスクリプションを追加するには、ステップ 1 ~ 5 に従ってください。このサブスクリプションにより、Lambda 関数は AWS IoT からのメッセージを受信することができます。このサブスクリプションは、関数を呼び出す AWS IoT コンソールからメッセージを送信するときに使用します。

    • ソースは、[Service] (サービス)、[IoT Cloud] (IoT クラウド) の順に選択します。

    • ターゲットは、[Lambda function] (Lambda 関数)、[Greengrass_HelloWorld_Counter] の順に選択します。

    • [トピックのフィルター] に「hello/world/counter/trigger」と入力します。

    このトピックのフィルターで /trigger 拡張を使用しているのは、2 つ作成したサブスクリプション間で相互の干渉を避けるためです。

  7. コアデバイスへのクラウド設定のデプロイ」の説明に従って Greengrass デーモンが実行されていることを確認します。

  8. グループ設定ページで、[Deploy] (デプロイ) を選択します。

  9. デプロイが完了したら、AWS IoT コンソールのホームページに戻って [Test] (テスト) を選択します。

  10. 次のフィールドを設定します。

    • [Subscription topic (サブスクリプショントピック)] で、hello/world/counter と入力します。

    • [サービスの品質] で [0] を選択します。

    • [MQTT ペイロード表示] で、[ペイロードを文字列として表示 (より正確)] を選択します。

  11. [Subscribe] (サブスクライブ) を選択します。

    このモジュールのパート 1 とは異なり、hello/world/counter へのサブスクライブ後にメッセージは表示されません。これは、hello/world/counter トピックに発行する greengrassHelloWorldCounter.py コードが、関数が呼び出されたときにのみ実行される関数ハンドラの内部にあるためです。

    このモジュールでは、hello/world/counter/trigger トピックで MQTT メッセージを受信したときに呼び出される Greengrass_HelloWorld_Counter Lambda 関数を設定しました。

    [Greengrass_HelloWorld_Counter] から [IoT クラウド] へのサブスクリプションにより、この関数は hello/world/counter トピックで AWS IoT にメッセージを送信できます。[IoT クラウド] から [Greengrass_HelloWorld_Counter] へのサブスクリプションにより、AWS IoT は hello/world/counter/trigger トピックで関数にメッセージを送信できます。

  12. 存続期間の長いライフサイクルをテストするには、hello/world/counter/trigger トピックにメッセージを発行することで、Lambda 関数を呼び出します。デフォルトのメッセージを使用できます。

    [Publish to topic] (トピックに発行) ボタンが強調表示された、hello/world/counter/trigger に送られたデフォルトの「Hello from AWS IoT」メッセージ。
    注記

    この Greengrass_HelloWorld_Counter 関数は、受信したメッセージの内容を無視します。function_handler のコードを実行するだけで、hello/world/counter トピックにメッセージが送信されます。このコードは、GitHub の「AWS IoT Greengrass Core SDK for Python」から確認できます。

hello/world/counter/trigger トピックにメッセージが発行されるたびに、my_counter 変数が増分されます。この呼び出し回数は、Lambda 関数から送信されたメッセージに示されています。関数の関数ハンドラには 20 秒のスリープサイクル (time.sleep(20)) が含まれているので、ハンドラを繰り返しトリガーすると AWS IoT Greengrass コアからの応答はキューに入れられます。

1、2、そして 3 と [呼び出しカウント] の増分を示すスクリーンショット。