サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、「 からの移行 AWS IoT Greengrass Version 1」を参照してください。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
存続期間の長い Lambda 関数のテスト
存続期間の長い Lambda 関数は、 AWS IoT Greengrass コアが 1 つのコンテナ (またはサンドボックス) で起動して実行されると自動的に起動します。関数ハンドラの外部で定義される変数と事前処理ロジックは、この関数ハンドラの毎回の呼び出しのために保持されます。ハンドラ関数の複数の呼び出しは、前の呼び出しが実行されるまでキューに入れられます。
このモジュールで使用される greengrassHelloWorldCounter.py コードは、関数ハンドラの外部で my_counter 変数を定義します。
注記
コードは、 AWS Lambda コンソールまたは GitHub の AWS IoT Greengrass Core SDK for Python
このステップでは、Lambda 関数と が MQTT メッセージを AWS IoT 交換できるようにするサブスクリプションを作成します。その後、グループをデプロイして関数をテストします。
-
グループの設定ページで [Subscriptions] (サブスクリプション)、[Add] (追加) の順に選択します。
-
[Source type] (ソースのタイプ) で、[Lambda function] (Lambda 機能) を選択し、次に [Greengrass_HelloWorld_Counter] を選択します。
-
[Target type] (ターゲットタイプ) から、[Service] (サービス)、[IoT Cloud] (IoT クラウド) の順に選択します。
-
[トピックのフィルター] に「
hello/world/counter」と入力します。 -
[Create subscription] を選択します。
この単一のサブスクリプションは、Lambda 関数から への 1
Greengrass_HelloWorld_Counterつの方向にのみ移行します AWS IoT。この Lambda 関数をクラウドから呼び出す (またはトリガーする) には、反対方向のサブスクリプションを作成する必要があります。 -
以下の値を使用する別のサブスクリプションを追加するには、ステップ 1 ~ 5 に従ってください。このサブスクリプションにより、Lambda 関数は AWS IoTからのメッセージを受信することができます。このサブスクリプションは、 AWS IoT 関数を呼び出すコンソールからメッセージを送信するときに使用します。
-
ソースは、[Service] (サービス)、[IoT Cloud] (IoT クラウド) の順に選択します。
-
ターゲットは、[Lambda function] (Lambda 関数)、[Greengrass_HelloWorld_Counter] の順に選択します。
-
[トピックのフィルター] に「
hello/world/counter/trigger」と入力します。
このトピックのフィルターで
/trigger拡張を使用しているのは、2 つ作成したサブスクリプション間で相互の干渉を避けるためです。 -
「コアデバイスへのクラウド設定のデプロイ」の説明に従って Greengrass デーモンが実行されていることを確認します。
-
グループ設定ページで、[Deploy] (デプロイ) を選択します。
-
デプロイが完了したら、 AWS IoT コンソールのホームページに戻り、テストを選択します。
-
以下のフィールドを設定します。
-
[Subscription topic (サブスクリプショントピック)] で、
hello/world/counterと入力します。 -
[サービスの品質] で [0] を選択します。
-
[MQTT ペイロード表示] で、[ペイロードを文字列として表示 (より正確)] を選択します。
-
-
[サブスクライブ] を選択します。
このモジュールのパート 1 とは異なり、
hello/world/counterへのサブスクライブ後にメッセージは表示されません。これは、hello/world/counterトピックに発行するgreengrassHelloWorldCounter.pyコードが、関数が呼び出されたときにのみ実行される関数ハンドラの内部にあるためです。このモジュールでは、
hello/world/counter/triggerトピックで MQTT メッセージを受信したときに呼び出されるGreengrass_HelloWorld_CounterLambda 関数を設定しました。[Greengrass_HelloWorld_Counter] から [IoT クラウド] へのサブスクリプションにより、この関数は
hello/world/counterトピックで AWS IoT にメッセージを送信できます。IoT Cloud to Greengrass_HelloWorld_Counter サブスクリプションにより AWS IoT 、 はhello/world/counter/triggerトピックの 関数にメッセージを送信できます。 -
存続期間の長いライフサイクルをテストするには、
hello/world/counter/triggerトピックにメッセージを発行することで、Lambda 関数を呼び出します。デフォルトのメッセージを使用できます。
注記
この
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 コアからのレスポンスがキューに入れられます。