

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

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

# モジュール 3 (パート 1): での Lambda 関数 AWS IoT Greengrass
<a name="module3-I"></a>

このモジュールでは、 AWS IoT Greengrass コアデバイスから MQTT メッセージを送信する Lambda 関数を作成してデプロイする方法を説明します。モジュールでは、Lambda 関数の設定、MQTT メッセージングを許可するために使用するサブスクリプション、およびコアデバイスへのデプロイについて説明します。

[モジュール 3 (パート 2)](module3-II.md) では、 AWS IoT Greengrass コアで実行されているオンデマンドの Lambda 関数と存続期間の長い Lambda 関数の違いについて説明します。

開始する前に、[モジュール 1](module1.md) と[モジュール 2](module2.md) を完了し、実行中の AWS IoT Greengrass コアデバイスがあることを確認してください。

**ヒント**  
または、コアデバイスをセットアップするスクリプトを使用する場合は、「[クイックスタート: Greengrass デバイスのセットアップ](quick-start.md)」を参照してください。このスクリプトは、このモジュールで使用される Lambda 関数を作成してデプロイすることもできます。

このモジュールは完了までに約 30 分かかります。

**Topics**
+ [Lambda 関数の作成とパッケージ化](create-lambda.md)
+ [の Lambda 関数を設定する AWS IoT Greengrass](config-lambda.md)
+ [Greengrass コアデバイスにクラウド設定をデプロイする](configs-core.md)
+ [Lambda 関数がコアデバイスで実行されていることを確認する](lambda-check.md)

# Lambda 関数の作成とパッケージ化
<a name="create-lambda"></a>

このモジュールの Python Lambda 関数の例では、Python 用の [AWS IoT Greengrass Core SDK](lambda-functions.md#lambda-sdks-core) を使用して MQTT メッセージを発行しています。

このステップでは、次の操作を行います。
+  AWS IoT Greengrass Core SDK for Python をコンピュータ ( AWS IoT Greengrass コアデバイスではない) にダウンロードします。
+ Lambda 関数コードと依存関係を含む関数デプロイパッケージを作成します。
+ Lambda コンソールを使用して Lambda 関数を作成し、デプロイパッケージをアップロードします。
+ Lambda 関数のバージョンを発行し、そのバージョンを指すエイリアスを作成します。

このモジュールを完了するには、Python 3.7 をコアデバイスにインストールする必要があります。

 <a name="create-lambda-procedure"></a>

1. <a name="download-ggc-sdk"></a> [AWS IoT Greengrass Core SDK](what-is-gg.md#gg-core-sdk-download) ダウンロードページから、 AWS IoT Greengrass Core SDK for Python をコンピュータにダウンロードします。

1. ダウンロードしたパッケージを解凍して、Lambda 関数コードおよび SDK を取得します。

   このモジュールの Lambda 関数では、以下を使用します。
   + `examples\HelloWorld` の `greengrassHelloWorld.py` ファイル。このファイルに、Lambda 関数コードが記述されています。関数は 5 秒ごとに 2 つのメッセージのいずれかを `hello/world` トピックに発行します。
   + `greengrasssdk` フォルダ。これは SDK です。

1. `greengrassHelloWorld.py` を含む `HelloWorld` フォルダに `greengrasssdk` フォルダをコピーします。

1. Lambda 関数デプロイパッケージを作成するには、`greengrassHelloWorld.py` と `greengrasssdk` フォルダを `hello_world_python_lambda.zip` という名前の `zip` 圧縮ファイルに保存します。`py` ファイルと `greengrasssdk` フォルダはディレクトリのルートにある必要があります。  
![\[zip 圧縮された hello_word_python_lambda.zip の内容を示すスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-017.png)

   UNIX 互換システム (Mac のターミナルを含む) では、次のコマンドを使用してファイルとフォルダをパッケージ化できます。

   ```
   zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py
   ```
**注記**  
ディストリビューションによっては、必要に応じて最初に `zip` をインストールします。そのために、`sudo apt-get install zip` などを実行します。(インストールコマンドはお客様のディストリビューションと異なる場合があります)。

   これで、Lambda 関数を作成して、デプロイパッケージをアップロードする準備ができました。

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

1. **Author from scratch** (製作者を最初から) を選択します。

1. 関数に **Greengrass\$1HelloWorld** という名前を付け、残りのフィールドを以下のように設定します。
   + **[ランタイム]** で **[Python 3.7]** を選択します。
   + **[アクセス許可]** はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは では使用されません AWS IoT Greengrass。

   [**Create function** (関数の作成)] を選択します。

1. Lambda 関数のデプロイパッケージをアップロードします。

   1. <a name="lambda-console-upload"></a>**[Code]** (コード) タブの **[Code source]** (コードソース) で、**[Upload from]** (アップロード元) を選択します。ドロップダウンから **[.zip ファイル]** を選択します。  
![\[[.zip ファイル] が強調表示された [アップロード元] ドロップダウンリスト。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **[アップロード]** を選択し、`hello_world_python_lambda.zip` デプロイパッケージを選択します。次に、**[保存]** を選択します。

   1. <a name="lambda-console-runtime-settings-para"></a>関数の **[Code]** (コード) タブにある **[Runtime settings]** (ランタイム設定) で **[Edit]** (編集) を選択し、次の値を入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + **[ハンドラ]** に **greengrassHelloWorld.function\$1handler** と入力します。  
![\[[Runtime] (ランタイム) フィールドが [Python 3.7] に設定され、[Handler] (ハンドラ) フィールドが [greengrassHelloWorld.function_handler] に設定された [Runtime settings] (ランタイム設定) セクション。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-023-2.png)

   1. <a name="lambda-console-save-config"></a>[**Save**] を選択します。
**注記**  
 AWS Lambda コンソールの**テスト**ボタンは、この関数では機能しません。 AWS IoT Greengrass Core SDK には、Greengrass Lambda 関数を AWS Lambda コンソールで個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば `greengrass_common`) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

1. <a name="publish-function-version"></a>Lambda 関数を発行します。

   1. ページの上部の **[Actions]** (アクション) メニューから、**[Publish new version]** (新しいバージョンを発行) を選択します。  
![\[[新しいバージョンを発行] が強調表示された [アクション] メニューのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-026.png)

   1. **[バージョンの説明]** に **First version** と入力し、**[発行]** を選択します。  
![\[[バージョンの説明] フィールドが「First version」に設定され、[発行] ボタンが強調表示されたスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-027.png)

1. <a name="create-version-alias"></a>Lambda 関数の[バージョン](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)の[エイリアス](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)を作成します。
**注記**  
Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

   1. ページ上部の **[Actions]** (アクション) メニューから、**[Create alias]** (エイリアスの作成) を選択します。  
![\[[エイリアスの作成] に設定された [アクション] メニューのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-028.png)

   1. エイリアスに **GG\$1HelloWorld** という名前を付け、バージョンを **1** (先ほど発行したバージョンに対応) に設定して、**[Save]** (保存) を選択します。
**注記**  
AWS IoT Greengrass は、**\$1LATEST** バージョンの Lambda エイリアスをサポートしていません。

         
![\[[名前] フィールドが [GG_HelloWorld]、[Version] (バージョン) が [1] に設定された [Create a new alias] (新しいエイリアスの作成) のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-029.png)

# の Lambda 関数を設定する AWS IoT Greengrass
<a name="config-lambda"></a>

これで、 AWS IoT Greengrassの Lambda 関数を設定する準備が整いました。

このステップでは、次の操作を行います。
+  AWS IoT コンソールを使用して、Lambda 関数を Greengrass グループに追加します。
+ Lambda 関数のグループ固有の設定を構成します。
+ Lambda 関数が MQTT メッセージを AWS IoTに発行できるようにするサブスクリプションをグループに追加します。
+ グループのローカルログ設定を構成します。

 

1. <a name="console-gg-groups"></a> AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. **[Greengrass groups]** (Greengrass グループ) で、[モジュール 2](module2.md) で作成したグループを選択します。

1. グループの設定ページで、**[Lambda functions]** (Lambda 関数) タブを選択してから、**[My Lambda functions]** (自分の Lambda 関数) セクションをスクロールして、**[Add Lambda function]** (Lambda 関数を追加) を選択します。

1. 前のステップで作成した Lambda 関数の名前を選択します (エイリアス名ではなく、**Greengrass\$1HelloWorld**)。

1. このバージョンでは、**Alias: GG\$1HelloWorld** を選択します。

1. **[Lambda function configuration]** (Lambda 関数の設定) セクションで、次のように変更します。
   + **[System user and group]** (システムユーザーとグループ) を **[Use group default]** (グループデフォルトの使用) に設定します。
   + **Lambda function containerization** (Lambda 関数のコンテナ化) を、**[Use group default]** (グループデフォルトの使用) に設定します。
   + [**タイムアウト**] を 25 秒に設定します。この Lambda 関数は、各呼び出しの前に 5 秒間スリープします。
   + **[Pinned]** (固定) で、**[True]** を選択します。

    
**注記**  
<a name="long-lived-lambda"></a>*存続期間の長い* (または*固定された*) Lambda 関数は、 AWS IoT Greengrass の起動後に自動的に起動し、独自のコンテナで実行し続けます。これはオンデマンド Lambda 関数とは対照的です。この関数は呼び出されたときに開始し、実行するタスクが残っていないときに停止します。詳細については、「[Greengrass Lambda 関数のライフサイクル設定](lambda-functions.md#lambda-lifecycle)」を参照してください。

1. **[Add Lambda function]** (Lambda 関数の追加) を選択して、変更を保存します。Lambda 関数のプロパティについては、「[グループ固有の設定による Greengrass Lambda 関数の実行の制御](lambda-group-config.md)」を参照してください。

   次に、 AWS IoT Coreに [MQTT](http://mqtt.org/) メッセージを送信することを Lambda 関数に許可するサブスクリプションを作成します。

   Greengrass Lambda 関数を使用して MQTT メッセージを以下と交換することができます。
   + Greengrass グループ内の[デバイス](what-is-gg.md#greengrass-devices)。
   + グループの[コネクタ](connectors.md)。
   + グループ内の他の Lambda 関数。
   + AWS IoT Core.
   + ローカルシャドウサービス。詳細については、「[モジュール 5: デバイスシャドウの操作](module5.md)」を参照してください。

   グループはサブスクリプションを使用して、これらのエンティティが互いに通信する方法を制御します。サブスクリプションは、予測可能なやり取りとセキュリティの層を提供します。

   サブスクリプションはソース、ターゲット、およびトピックで構成されます。ソースはメッセージの送信元です。ターゲットはメッセージの送信先です。このトピックでは、ソースからターゲットに送信されるデータをフィルタリングできます。ソースまたはターゲットは、Greengrass デバイス、Lambda 関数、コネクタ、デバイスシャドウ、 AWS IoT Coreのいずれかです。
**注記**  
サブスクリプションは、メッセージが送信元から宛先への特定の方向に流れるという意味でコントロールされます。双方向通信を許可するには、2 つのサブスクリプションを設定する必要があります。
**注記**  
 現在、サブスクリプショントピックフィルタでは、1 つのトピック内で 2 つ以上の `+` 文字を使用することはできません。トピックフィルタでは、トピックの末尾に加えることのできる `#` 文字は 1 つのみです。

   `Greengrass_HelloWorld` Lambda 関数は の`hello/world`トピックにのみメッセージを送信するため AWS IoT Core、Lambda 関数から 1 つのサブスクリプションを作成するだけで済みます AWS IoT Core。これは、次の手順で作成します。

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

    AWS CLIを使用したサブスクリプションの作成例については、「AWS CLI Command Reference」( コマンドリファレンス) の「[create-subscription-definition](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/greengrass/create-subscription-definition.html)」を参照してください。

1. **[Source type]** (ソースタイプ) で、**[Lambda function]** (Lambda 関数) を選択し、**[Source]** (ソース) に **[Greengrass\$1HelloWorld]** を選択します。

1. **[Target type]** (ターゲットタイプ) には、**[Service]** (サービス) を選択し、**[Target]** (ターゲット) には **[IoT Cloud]** (IoT クラウド) を選択します。

1. **[Topic filter]** (トピックのフィルター) には、**hello/world** と入力し、**[Create subscription]** (サブスクリプションの作成) を選択します。

1. グループのログ記録設定を定義します。このチュートリアルでは、Core デバイスのファイルシステムにログを書き込むように、 AWS IoT Greengrass システムコンポーネントとユーザー定義の Lambda 関数を設定します。

   1. グループの設定ページで、**[Logs]** (ログ) タブを選択します。

   1. **[Local logs configuration]** (ローカルログ設定) セクションで、**[Edit]** (編集) を選択します。

   1. **[Edit local logs configuration]** (ローカルログ設定の編集) ダイアログボックスで、ログレベルとストレージサイズの両方についてデフォルト値を保持し、**[Save]** (保存) を選択します。

   このチュートリアルの実行時に発生する可能性のある問題をトラブルシューティングするには、ログを使用します。問題のトラブルシューティングを行う場合は、ログレベルを一時的に [**デバッグ**] に変更できます。詳細については、「[ファイルシステムログへのアクセス](greengrass-logs-overview.md#gg-logs-local)」を参照してください。

1. <a name="disable-stream-manager-no-java"></a>Java 8 ランタイムがコアデバイスにインストールされていない場合は、インストールするか、ストリームマネージャーを無効にする必要があります。
**注記**  
このチュートリアルではストリームマネージャーを使用しませんが、チュートリアルで使用する **[デフォルトのグループ作成]** ワークフローでは、デフォルトでストリームマネージャーが有効になります。ストリームマネージャーが有効になっていても Java 8 がインストールされていない場合、グループのデプロイは失敗します。詳細については、「[ストリームマネージャーの要件](stream-manager.md#stream-manager-requirements)」を参照してください。

   ストリームマネージャーを無効にするには:

   1. グループ設定ページで、**[Lambda functions]** (Lambda 関数) タブを選択します。

   1. **[System Lambda functions]** (Lambda システム関数) セクションで、**[Stream manager]** (ストリームマネージャー)、**[Edit]** (編集) の順に選択します。

   1. [**無効化)**] を選択し、[**保存**] を選択します。

# Greengrass コアデバイスにクラウド設定をデプロイする
<a name="configs-core"></a>

1. Greengrass コアデバイスがインターネットに接続されていることを確認します。例えば、ウェブページに正常に移動できるか確認します。

1. コアデバイスで Greengrass デーモンが実行されていることを確認します。コアデバイスのターミナルで以下のコマンドを実行し、デーモンが実行されているかどうかを確認します。必要ならばデーモンを起動します。

   1. デーモンが実行中かどうかを確認するには、以下を実行します。

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      出力に `root` で実行中の `/greengrass/ggc/packages/1.11.6/bin/daemon` のエントリが含まれていれば、デーモンは実行されています。

   1. 次のようにしてデーモンを開始します。

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

   これで、Lambda 関数とサブスクリプション設定を Greengrass Core デバイスにデプロイする準備が整いました。

1. <a name="console-gg-groups"></a> AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. **[Greengrass groups]** (Greengrass グループ) で、[モジュール 2](module2.md) で作成したグループを選択します。

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

1. **[Lambda functions]** (Lambda 関数) タブの **[System Lambda functions]** (システム Lambda 関数) セクションで、**[IP detector]** (IP ディテクター) を選択します。

1. **[Edit]** (編集) を選択し、**[Automatically detect and override MQTT broker endpoints]** (MQTT ブローカーのエンドポイントを自動的に検出してオーバーライドする) を選択します。これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、 AWS IoT Greengrass は手動で指定されたエンドポイントもサポートしています。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。

最初のデプロイには数分かかる場合があります。デプロイが完了すると、[**Deployments**] ページの [**Status**] 列に [**Successfully completed**] と表示されます。

**注記**  
デプロイステータスは、ページヘッダーのグループ名の下にも表示されます。

トラブルシューティングのヘルプについては、[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md) を参照してください。

# Lambda 関数がコアデバイスで実行されていることを確認する
<a name="lambda-check"></a>

1. [AWS IoT コンソール](https://console.aws.amazon.com/iot/) のナビゲーションペインから、**[Test]** (テスト)、**[MQTT test client]** (MQTT テストクライアント) の順に選択します。

1. **[Subscribe to topic]** (トピックにサブスクライブする) タブを選択します。

1. **[Topic filter]** (トピックのフィルター) に**hello/world** を入力して **[Additional configuration]** (追加設定) を展開します。

1. 次の各フィールドに表示されている情報を入力します。
   + [**サービスの品質**] で [**0**] を選択します。
   + [**MQTT ペイロード表示**] で、[**ペイロードを文字列として表示 (より正確)**] を選択します。

    

1. **[サブスクライブ]** を選択します。

Lambda 関数がデバイスで実行されている場合、関数は以下のようなメッセージを `hello/world` トピックに発行します。

![\[メッセージが強調表示された hello/world トピックに送られたメッセージのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-045.png)


Lambda 関数は引き続き MQTT AWS IoT Greengrass メッセージを`hello/world`トピックに送信しますが、デーモンを停止しないでください。残りのモジュールでは、このデーモンが実行されていることを前提にしています。

グループから関数とサブスクリプションを削除することができます。
+ グループ設定ページの **[Lambda function]** (Lambda 関数) タブで、削除する Lambda 関数を選択し、**[Remove]** (削除) を選択します。
+ グループ設定ページの **[Subscriptions]** (サブスクリプション) タブからサブスクリプションを選択して、**[Delete]** (削除) を選択します。

関数とサブスクリプションは、次のグループデプロイ中にコアから削除されます。