

サポート終了通知: 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)」を参照してください。

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

# モジュール 5: デバイスシャドウの操作
<a name="module5"></a>

この高度なモジュールでは、クライアントデバイスが AWS IoT Greengrass グループ内の[AWS IoT デバイスシャドウ](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)とやり取りする方法を示します。*シャドウ* は、モノの現在または目的の状態に関する情報を保存するための JSON ドキュメントです。このモジュールでは、1 つのクライアントデバイス (`GG_Switch`) が別のクライアントデバイス (`GG_TrafficLight`) のステータスをどのように変更できるか、またこれらのステータスをどのように AWS IoT Greengrass クラウドに同期できるかを学びます。

![\[AWS IoT Greengrass core は、トラフィックライトデバイスシャドウとライトスイッチデバイスに接続されています。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-077.5.png)


開始する前に、[Greengrass デバイスのセットアップ](quick-start.md)スクリプトを実行するか、[モジュール 1](module1.md) と[モジュール 2](module2.md) を完了していることを確認します。また、クライアントデバイスを AWS IoT Greengrass コアに接続する方法も理解しておく必要があります ([モジュール 4](module4.md)）。他のコンポーネントやデバイスは必要ありません。

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

**Topics**
+ [デバイスとサブスクリプションの設定](config-dev-subs.md)
+ [必要なファイルのダウンロード](file-download.md)
+ [通信をテストする (デバイス同期を無効にする)](comms-disabled.md)
+ [通信をテストする (デバイス同期を有効にする)](comms-enabled.md)

# デバイスとサブスクリプションの設定
<a name="config-dev-subs"></a>

 AWS IoT Greengrass コアがインターネットに接続されている AWS IoT 場合、シャドウを に同期できます。このモジュールで、まずクラウドへのシャドウ同期を行わずにローカルシャドウを使用します。次に、クラウド同期を有効にします。

各クライアントデバイスには、独自の Shadow があります。詳細については、「AWS IoT デベロッパーガイド」の「[AWS IoT Device Shadow サービス](https://docs.aws.amazon.com/iot/latest/developerguide/iot-device-shadows.html)」を参照してください。

1. グループ設定ページで、**[Client devices]** (クライアントデバイス) タブを選択します。

1. **クライアントデバイス**タブから、 AWS IoT Greengrass グループに 2 つの新しいクライアントデバイスを追加します。このプロセスの詳細なステップについては、「[AWS IoT Greengrass グループにクライアントデバイスを作成する](device-group.md)」を参照してください。
   + クライアントデバイスにそれぞれ **GG\$1Switch** と **GG\$1TrafficLight** という名前を付けます。
   + 両クライアントデバイス用のセキュリティリソースを生成してダウンロードします。
   + クライアントデバイスのセキュリティリソースのファイル名にある証明書 ID を書き留めます。これらの値は後で使用します。

1. これらのクライアントデバイスのセキュリティ認証情報用のフォルダをコンピュータに作成します。証明書とキーをこのフォルダーにコピーします。

1. クライアントデバイスが AWS クラウドと同期せずに、ローカルシャドウを使用するように設定されていることを確認します。そうでない場合は、クライアントデバイスを選択し、**[Sync shadow]** (同期シャドウ)、**[Disable shadow sync with cloud]** (クラウドとのシャドウ同期を無効にする) の順に選択します。

1. <a name="module5-subscriptions"></a>次の表のサブスクリプションをグループに追加します。例えば、最初のサブスクリプションを作成するには、以下のようにします。

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

   1. **[Source type]** (ソースタイプ) は、**[Client device]** (クライアントデバイス)、**[GG\$1Switch]** の順に選択します。

   1. **[Target type]** (ターゲットタイプ) は、**[Service]** (サービス)、**[Local Shadow Service]** (ローカルシャドウサービス) の順に選択します。

   1. [**トピックのフィルター**] に「**\$1aws/things/GG\$1TrafficLight/shadow/update**」と入力します。

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

   トピックは、表に示されているとおりに正確に入力する必要があります。ワイルドカードを使用してサブスクリプションの一部を統合することはできますが、この方法はお勧めしません。詳細については、「AWS IoT デベロッパーガイド」の「[Device Shadow MQTT トピック](https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html)」を参照してください。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/config-dev-subs.html)

   **[Subscriptions]** (サブスクリプション) タブに新しいサブスクリプションが表示されます。
**注記**  
`$` 文字の詳細については、「[予約されたトピック](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#reserved-topics)」を参照してください。

1. <a name="enable-automatic-detection"></a>Greengrass コアが IP アドレスのリストを公開できるように、自動検出が有効になっていることを確認してください。クライアントデバイスはこの情報を使用してコアを検出します。以下の操作を実行します。

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

   1. **[System Lambda functions]** (システム Lambda 関数) から、**[IP detector]** (IP ディテクター)、**[Edit]** (編集) の順に選択します。

   1. **[Edit IP detector settings]** (IP ディテクター設定の編集) で、**[Automatically detect and override MQTT broker endpoints]** (MQTT ブローカーのエンドポイントを自動的に検出して上書きする)、**[Save]** (保存) の順に選択します。

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

1. <a name="console-actions-deploy"></a>グループ設定ページで、**[Deploy]** (デプロイ) を選択します。

# 必要なファイルのダウンロード
<a name="file-download"></a>

1. まだインストールしていない場合は、 AWS IoT Device SDK for Python をインストールします。手順については、[AWS IoT Device SDK for Python のインストール](IoT-SDK.md) のステップ 1 を参照してください。

   この SDK は、クライアントデバイスがコアデバイス AWS IoT と AWS IoT Greengrass 通信するために使用されます。

1. GitHub の [ TrafficLight](https://github.com/aws/aws-greengrass-core-sdk-python/tree/master/examples/TrafficLight) サンプルフォルダから、`trafficLight.py` ファイル `lightController.py` とファイルをコンピュータにダウンロードします。GG\$1Switch および GG\$1TrafficLight のクライアントデバイス証明書とキーを含むフォルダにそれらを保存します。

   `lightController.py` スクリプトは GG\$1Switch クライアントデバイスに対応し、`trafficLight.py` スクリプトは GG\$1TrafficLight クライアントデバイスに対応します。  
![\[2 つの Python スクリプトおよびデバイス証明書とキーを含むファイルのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-082.png)
**注記**  
サンプル Python ファイルは、便宜上 AWS IoT Greengrass Core SDK for Python リポジトリに保存されますが、 AWS IoT Greengrass Core SDK は使用しません。

# 通信をテストする (デバイス同期を無効にする)
<a name="comms-disabled"></a>

1. <a name="ping-device"></a>コンピュータと AWS IoT Greengrass コアデバイスが、同じネットワークを使用してインターネットに接続されていることを確認します。

   1.  AWS IoT Greengrass コアデバイスで、次のコマンドを実行して IP アドレスを見つけます。

      ```
      hostname -I
      ```

   1. コンピュータで、コアの IP アドレスを使用して次のコマンドを実行します。**ping** コマンドを停止するには、Ctrl \$1 C を使用できます。

      ```
      ping IP-address
      ```

      次のような出力は、コンピュータと AWS IoT Greengrass コアデバイス間の通信が成功したことを示します (パケット損失 0%)。  
![\[正常な ping コマンドの出力。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-075.5.png)
**注記**  
実行中の EC2 インスタンスに ping を実行できない場合は AWS IoT Greengrass、インスタンスのインバウンドセキュリティグループルールで [Echo リクエスト](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-ping)メッセージの ICMP トラフィックが許可されていることを確認してください。詳細については、「*Amazon EC2 ユーザーガイド*」の「[セキュリティグループへのルールの追加](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule)」を参照してください。  
Windows ホストコンピュータでは、セキュリティが強化された Windows ファイアウォールアプリケーションで、インバウンドエコーリクエストを許可するインバウンドルール ([**File and Printer Sharing (Echo Request - ICMPv4-In)**] など) を有効にするか作成することが必要になる場合もあります。

1.  AWS IoT エンドポイントを取得します。

   1. <a name="iot-settings"></a>[AWS IoT コンソール](https://console.aws.amazon.com/iot/)のナビゲーションペインから、**[Settings]** (設定) を選択します。

   1. <a name="iot-settings-endpoint"></a>**[Device data endpoint]** (デバイスデータエンドポイント) にある**[Endpoint]** (エンドポイント) の値を書き留めておきます。次の手順では、この値を使用してコマンド内の *AWS\$1IOT\$1ENDPOINT* プレースホルダーを置き換えます。
**注記**  
[エンドポイントが証明書タイプに対応している](gg-core.md#certificate-endpoints)ことを確認してください。

1. <a name="repeated-step"></a>コンピュータ ( AWS IoT Greengrass コアデバイスではない) で、2 [つのコマンドライン](https://en.wikipedia.org/wiki/Command-line_interface) (ターミナルまたはコマンドプロンプト) ウィンドウを開きます。1 つは、GG\$1Switch クライアントデバイス用のウィンドウで、もう 1 つは GG\$1TrafficLight クライアントデバイス用のウィンドウを表します。

   1. <a name="run-switch-device"></a>GG\$1Switch クライアントデバイスウィンドウから以下のコマンドを実行します。
      + *path-to-certs-folder* を、証明書、キー、および Python ファイルを含むフォルダへのパスに置き換えます。
      + *AWS\$1IOT\$1ENDPOINT* をエンドポイントに置き換えます。
      + 2 つの *switchCertId* インスタンスを、GG\$1Switch クライアントデバイスのファイル名に含まれる証明書 ID に置き換えます。

      ```
      cd path-to-certs-folder
      python lightController.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert switchCertId-certificate.pem.crt --key switchCertId-private.pem.key --thingName GG_TrafficLight --clientId GG_Switch
      ```

   1. <a name="run-trafficlight-device"></a>GG\$1TrafficLight クライアントデバイスウィンドウから次のコマンドを実行します。
      + *path-to-certs-folder* を、証明書、キー、および Python ファイルを含むフォルダへのパスに置き換えます。
      + *AWS\$1IOT\$1ENDPOINT* をエンドポイントに置き換えます。
      + 2 つの *lightCertId* インスタンスを、GG\$1TrafficLight クライアントデバイスのファイル名に含まれる証明書 ID に置き換えます。

      ```
      cd path-to-certs-folder
      python trafficLight.py --endpoint AWS_IOT_ENDPOINT --rootCA AmazonRootCA1.pem --cert lightCertId-certificate.pem.crt --key lightCertId-private.pem.key --thingName GG_TrafficLight --clientId GG_TrafficLight
      ```

      20 秒ごとに、スイッチはシャドウステータスを G、Y、R に更新し、次に示されているように、ライトはその新しいステータスを表示します。

      GG\$1Switch 出力  
![\[GG_Switch に関連付けられた出力のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-083.png)

      GG\$1TrafficLight 出力  
![\[GG_TrafficLight に関連付けられた出力のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-084.png)

   初めて実行すると、各クライアントデバイススクリプトは AWS IoT Greengrass 検出サービスを実行して (インターネット経由で) AWS IoT Greengrass コアに接続します。クライアントデバイスが AWS IoT Greengrass コアを検出して正常に接続したら、今後のオペレーションをローカルで実行できます。
**注記**  
<a name="check-connection-info"></a> `lightController.py` および `trafficLight.py` スクリプトは、スクリプトと同じフォルダに作成される `groupCA` フォルダに接続情報を保存します。接続エラーが表示された場合は、`ggc-host` ファイルの IP アドレスが、Core に設定した IP アドレスエンドポイントと一致することを確認してください。

1.  AWS IoT コンソールで、 AWS IoT Greengrass グループを選択し、**クライアントデバイス**タブを選択し、**GG\$1TrafficLight** を選択してクライアントデバイスの詳細 AWS IoT ページを開きます。

1. **[Device Shadows]** (デバイスシャドウ) タブを選択します。GG\$1Switch の状態の変更後は、このシャドウは更新できません。これは、GG\$1TrafficLight が**[Disable shadow sync with cloud]** (クラウドとのシャドウ同期を無効にする) に設定されているためです。

1. GG\$1Switch (`lightController.py`) のクライアントデバイスウィンドウで、Ctrl \$1 C を押します。GG\$1TrafficLight (`trafficLight.py`) ウィンドウでステータス変更メッセージの受信が停止されていることがわかります。

   次のセクションでコマンドを実行できるように、これらのウィンドウを開いたままにしてください。

# 通信をテストする (デバイス同期を有効にする)
<a name="comms-enabled"></a>

このテストでは、 AWS IoTと同期するように GG\$1TrafficLight デバイスシャドウを構成します。前のテストと同じコマンドを実行しますが、今回は GG\$1Switch が更新リクエストを送信したときにクラウド内のシャドウ状態が更新されます。

1.  AWS IoT コンソールで、 AWS IoT Greengrass グループを選択し、**クライアントデバイス**タブを選択します。

1. GG\$1TrafficLight デバイスを選択して、**[Sync shadow]** (シャドウの同期)を選択して **[Enable shadow sync with cloud]** (クラウドとのシャドウ同期を有効にする) を選択します。

   デバイスシャドウ同期が更新されたという通知を受信します。

1. <a name="console-actions-deploy"></a>グループ設定ページで、**[Deploy]** (デプロイ) を選択します。

1. 2 つのコマンドラインウィンドウで、[GG\$1Switch](comms-disabled.md#run-switch-device) と [GG\$1TrafficLight](comms-disabled.md#run-trafficlight-device) クライアントデバイスについて、前のテストのコマンドを実行します。

1. 次に、 AWS IoT コンソールでシャドウの状態を確認します。 AWS IoT Greengrass グループを選択し、**クライアントデバイス**タブを選択し、**GG\$1TrafficLight** を選択し、**デバイスシャドウ**タブを選択し、**クラシックシャドウ**を選択します。

   GG\$1TrafficLight シャドウの への同期を有効にしたため AWS IoT、GG\$1Switch が更新を送信するたびにクラウド内のシャドウ状態を更新する必要があります。この機能を使用して、クライアントデバイスのステータスを AWS IoTに公開することができます。
**注記**  
必要に応じて、 AWS IoT Greengrass コアログ、特に を表示して問題をトラブルシューティングできます`runtime.log`。  

   ```
   cd /greengrass/ggc/var/log
   sudo cat system/runtime.log | more
   ```
 `GGShadowSyncManager.log` と `GGShadowService.log` を確認することもできます。詳細については、「[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md)」を参照してください。

クライアントデバイスとサブスクリプションを設定したままにします。これらは次のモジュールで使用します。同じコマンドも実行します。