

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

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

# モジュール 6: 他の AWS サービスへのアクセス
<a name="module6"></a>

この高度なモジュールでは、 AWS IoT Greengrass コアがクラウド内の他の AWS サービスとやり取りする方法を示します。これは、[モジュール 5](module5.md) のトラフィックライトの例を基に構築されており、シャドウステータスを処理してサマリーを Amazon DynamoDB テーブルにアップロードする、Lambda 関数を追加します。

![\[AWS IoT は、ライトスイッチデバイスとトラフィックライトデバイスシャドウに接続されている AWS IoT Greengrass コアに接続されています。Traffic Light Device Shadow は DynamoDB テーブルに接続された Lambda 関数に接続されています。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-089.5.png)


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

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

**注記**  
このモジュールは、DynamoDB にテーブルを作成して更新します。このモジュールのオペレーションは小さいものが多く、ほとんどはアマゾン ウェブ サービス Free Tier 内に収まりますが、一部のステップを実行するとアカウントへの請求が発生する場合があります。料金に関する詳細については、「[DynamoDB 料金](https://aws.amazon.com/dynamodb/pricing/)」を参照してください。

**Topics**
+ [グループロールの設定](config-iam-roles.md)
+ [Lambda 関数の作成と設定](create-config-lambda.md)
+ [サブスクリプションを設定する](config_subs.md)
+ [通信をテストする](comms-test.md)

# グループロールの設定
<a name="config-iam-roles"></a>

グループロールは、ユーザーが作成して Greengrass グループにアタッチした [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。このロールには、デプロイされた Lambda 関数 (およびその他の AWS IoT Greengrass 機能) が AWS サービスにアクセスするために使用するアクセス許可が含まれています。詳細については、「[Greengrass グループのロール](group-role.md)」を参照してください。

IAM コンソールでグループロールを作成するには、次の手順 (概要) を使用します。

1. 1 つ以上のリソースに対するアクションを許可または拒否するポリシーを作成します。

1. Greengrass サービスを信頼されたエンティティとして使用するロールを作成します。

1. ポリシーをロールにアタッチします。

次に、 AWS IoT コンソールで、ロールを Greengrass グループに追加します。

**注記**  
Greengrass グループには 1 つのグループロールがあります。アクセス権限を追加する場合は、アタッチされたポリシーを編集するか、さらにポリシーをアタッチできます。

 

このステップでは、Amazon DynamoDB テーブルでアクションを記述、作成、更新する許可を与えるアクセス権限ポリシーを作成します。次に、そのポリシーを新しいロールにアタッチして、そのロールを Greengrass グループに関連付けます。

最初に、このモジュールの Lambda 関数に必要なアクセス権限を付与するカスタマー管理ポリシーを作成します。

1. IAM コンソールのナビゲーションペインで、[**Policies**]、[**Create policy**] の順に選択します。

1. **JSON** タブで、プレースホルダーコンテンツを以下のポリシーに置き換えます。このモジュールの Lambda 関数はこれらのアクセス権限を使用して、`CarStats` という名前の DynamoDB テーブルを作成および更新します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PermissionsForModule6",
               "Effect": "Allow",
               "Action": [
                   "dynamodb:DescribeTable",
                   "dynamodb:CreateTable",
                   "dynamodb:PutItem"
               ],
               "Resource": "arn:aws:dynamodb:*:*:table/CarStats"
           }
       ]
   }
   ```

------

1. [**次へ: タグ**]、[**次へ: 確認**] の順に選択します。このチュートリアルでは、タグは使用しません。

1. [**Name (名前)**] に **greengrass\$1CarStats\$1Table** と入力し、[**Create policy (ポリシーの作成)**] を選択します。

    

   次に、新しいポリシーを使用するロールを作成します。

1. ナビゲーションペインで **ロール** を選択してから、**ロールを作成する** を選択します。

1. **[信頼されたエンティティタイプ]** から、**[AWS サービス]** を選択します。

1. **[ユースケース]** の **[その他の AWS サービスのユースケース]** で、**[Greengrass]** を選択し、**[Greengrass]** を選択して、**[次へ]** をクリックします。

1. **[Permissions policies]** (アクセス許可ポリシー) で、新しい **greengrass\$1CarStats\$1Table** ポリシーを選択したら **[Next]** (次へ) をクリックします。

1. **[ロール名]** には、「**Greengrass\$1Group\$1Role**」と入力します。

1. **[説明]** に **Greengrass group role for connectors and user-defined Lambda functions** と入力します。

1. [**ロールの作成**] を選択してください。

   次に、ロールを Greengrass グループに追加します。

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

1. **[Greengrass グループ]** で、目的のグループを選択します。

1. **[Settings]** (設定)、**[Associate role]** (ロールを関連付ける) の順に設定します。

1. ロール一覧から **Greengrass\$1Group\$1Role** を選択してから、**[Associate role]** (ロールを関連付ける) を選択します。

# Lambda 関数の作成と設定
<a name="create-config-lambda"></a>

このステップでは、信号を通過する車の台数を追跡する Lambda 関数を作成します。`GG_TrafficLight` のシャドウステータスが `G` に変わるたびに、Lambda 関数は乱数化された車の数 (1〜20) の通過をシミュレートします。`G` ライトが 3 回変わるたびに、最小値や最大値などの基本的な統計情報が Lambda 関数から DynamoDB テーブルに送信されます。

1. コンピュータに `car_aggregator` という名前のフォルダを作成します。

1. GitHub の [TrafficLight ](https://github.com/aws/aws-greengrass-core-sdk-python/tree/master/examples/TrafficLight) サンプルフォルダから、`carAggregator.py` ファイルを `car_aggregator` フォルダにダウンロードします。このファイルに、Lambda 関数コードが記述されています。
**注記**  
このサンプル Python ファイルは、便宜上 AWS IoT Greengrass Core SDK リポジトリに保存されますが、 AWS IoT Greengrass Core SDK は使用しません。

1. 米国東部 (バージニア北部) リージョンで作業していない場合は、 を開き`carAggregator.py`、次の行`region_name`で AWS IoT コンソールで現在選択されている AWS リージョン に変更します。サポートされている AWS リージョンのリストについては、 [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)の「」を参照してください*Amazon Web Services 全般のリファレンス*。

   ```
   dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
   ```

1. 次のコマンドを[コマンドライン](https://en.wikipedia.org/wiki/Command-line_interface)ウィンドウで実行し、[AWS SDK for Python (Boto3)](https://github.com/boto/boto3/blob/develop/README.rst) パッケージとその依存関係を `car_aggregator` フォルダにインストールします。Greengrass Lambda 関数は AWS SDK を使用して他の AWS サービスにアクセスします。(Windows の場合は、[昇格されたコマンドプロンプト](https://technet.microsoft.com/en-us/library/cc947813(v=ws.10).aspx)を使用します)。

   ```
   pip install boto3 -t path-to-car_aggregator-folder
   ```

   この結果、ディレクトリの一覧は以下のようになります。  
![\[carAggregator.py を示すディレクトリ一覧のスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-095.png)

1. `car_aggregator` フォルダの内容を `.zip` ファイルに圧縮し、`car_aggregator.zip` という名前を付けます。(フォルダではなく、フォルダの内容を圧縮します。) これが Lambda 関数デプロイパッケージです。

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

   [**関数の作成**] を選択してください。  
![\[関数名が GG_Car_Aggregator に設定され、ランタイムが Python 3.7 に設定された基本情報セクション。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/gg-get-started-095.5.png)

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. [Upload] (アップロード) を選択し、`car_aggregator.zip` デプロイパッケージを選択します。次に、**[保存]** を選択します。

   1. <a name="lambda-console-runtime-settings-para"></a>関数の **[Code]** (コード) タブにある **[Runtime settings]** (ランタイム設定) で **[Edit]** (編集) を選択し、次の値を入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + **[ハンドラ]** に **carAggregator.function\$1handler** と入力します。

   1. **[保存]** を選択します。

1. Lambda 関数を発行し、**GG\$1CarAggregator** という名前のエイリアスを作成します。詳細な手順については、モジュール 3 (パート 1) の「[Lambda 関数の発行](create-lambda.md#publish-function-version)」ステップと「[エイリアスの作成](create-lambda.md#create-version-alias)」ステップを参照してください。

1.  AWS IoT コンソールで、先ほど作成した Lambda 関数を AWS IoT Greengrass グループに追加します。

   1. グループ設定ページで、**[Lambda functions]** (Lambda 関数) を選択し、**[My Lambda functions]** (自分の Lambda 関数) で、**[Add]** (追加)を選択します。

   1. **Lambda function** (Lambda 関数) には、**[GG\$1Car\$1Aggregator]** を選択します。

   1. **Lambda 関数のバージョン**で、公開したバージョンのエイリアスを選択します。

   1. **[メモリ制限]** に **64 MB** と入力します。

   1. **[Pinned]** (固定) で、**[True]** を選択します。

   1. **[Add Lambda function]** (Lambda 関数の追加) を選択します。
**注記**  
以前のモジュールで作成した他の Lambda 関数は削除してかまいません。

# サブスクリプションを設定する
<a name="config_subs"></a>

このステップでは、GG\$1TrafficLight シャドウから更新済みの状態情報を GG\$1Car\$1Aggregator Lambda 関数に送信するためのサブスクリプションを作成します。このサブスクリプションは、[モジュール 5](module5.md) で作成したサブスクリプションに対する追加されたものです。すべてが、このモジュールに必須のサブスクリプションです。

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

1. **[Create a subscription]** (サブスクリプションの作成) ページで、以下の操作を行います。

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

   1. **[Target type]** (ターゲットタイプ) は、**[Lambda function]** (Lambda 関数)、**[GG\$1Car\$1Aggregator]** の順に選択します。

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

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

   このモジュールには、新しいサブスクリプションと、モジュール 5 で作成した[サブスクリプション](config-dev-subs.md#module5-subscriptions)が必要です。

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

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

# 通信をテストする
<a name="comms-test"></a>

1. コンピュータで 2 つの[コマンドライン](https://en.wikipedia.org/wiki/Command-line_interface)ウィンドウを開きます。[モジュール 5](module5.md) と同様に、1 つのウィンドウは GG\$1Switch クライアントデバイス用、もう 1 つは GG\$1TrafficLight クライアントデバイス用です。それらを使用して、モジュール 5 で実行したのと同じコマンドを実行します。

   GG\$1Switch クライアントデバイスの次のコマンドを実行します。

   ```
   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
   ```

   GG\$1TrafficLight クライアントデバイスに次のコマンドを実行します。

   ```
   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 に更新し、その新しい状態が信号に表示されます。

1. Lambda 関数の関数ハンドラが 3 回目のグリーンライトごと (3 分ごと) にトリガーされ、新しい DynamoDB レコードが作成されます。`lightController.py` と `trafficLight.py`が 3 分間実行されたら、 に移動し AWS マネジメントコンソール、DynamoDB コンソールを開きます。

1.  AWS リージョン メニューで**米国東部 (バージニア北部）** を選択します。これは、`GG_Car_Aggregator` 関数がテーブルを作成するリージョンです。

1. ナビゲーションペインで [**テーブル**] を選択し、[**CarStats**] テーブルを選択します。

1. **[View items]** (項目を表示) を選択すると、テーブル内のエントリが表示されます。

   通過した車に関する基本的な統計情報のあるエントリが表示されます (3 分間ごとに 1 つのエントリ)。必要に応じて更新ボタンを選択し、テーブルの更新を確認します。

1. テストに成功しない場合、Greengrass ログでトラブルシューティング情報を検索できます。

   1. <a name="root-access-logs"></a>root ユーザーに切り替え、`log` ディレクトリに移動します。 AWS IoT Greengrass ログにアクセスするには、ルートアクセス許可が必要です。

      ```
      sudo su
      cd /greengrass/ggc/var/log
      ```

   1. `runtime.log` でエラーがないかどうかを確認します。

      ```
      cat system/runtime.log | grep 'ERROR'
      ```

   1. Lambda 関数によって生成されたログを確認します。

      ```
      cat user/region/account-id/GG_Car_Aggregator.log
      ```

      <a name="check-connection-info"></a> `lightController.py` および `trafficLight.py` スクリプトは、スクリプトと同じフォルダに作成される `groupCA` フォルダに接続情報を保存します。接続エラーが表示された場合は、`ggc-host` ファイルの IP アドレスが、Core に設定した IP アドレスエンドポイントと一致することを確認してください。

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

これでこのチュートリアルは終了です。これで、 AWS IoT Greengrass プログラミングモデルとその基本的な概念を理解できたはずです。これには、 AWS IoT Greengrass コア、グループ、サブスクリプション、クライアントデバイス、エッジで実行される Lambda 関数のデプロイプロセスが含まれます。

DynamoDB テーブルと Greengrass Lambda 関数とサブスクリプションを削除できます。 AWS IoT Greengrass コアデバイスと AWS IoT クラウド間の通信を停止するには、コアデバイスでターミナルを開き、次のいずれかのコマンドを実行します。
+  AWS IoT Greengrass コアデバイスをシャットダウンするには：

  ```
  sudo halt
  ```
+  AWS IoT Greengrass デーモンを停止するには：

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