

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

# IoT
<a name="iot-pattern-list"></a>

**Topics**
+ [データレイク内の AWS IoT SiteWise メタデータ属性を抽出およびクエリする](extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.md)
+ [クライアントデバイスによる AWS IoT Greengrass のセットアップとトラブルシューティング](set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.md)
+ [その他のパターン](iot-more-patterns-pattern-list.md)

# データレイク内の AWS IoT SiteWise メタデータ属性を抽出およびクエリする
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake"></a>

*Amazon Web Services、Ambarish Dongaonkar*

## 概要
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-summary"></a>

AWS IoT SiteWise はアセットモデルと階層を使用して、産業機器、プロセス、施設を表します。各モデルまたはアセットには、環境固有の複数の属性が含まれる場合があります。メタデータ属性の例には、アセットの設置場所または物理的な場所、プラントの詳細、機器識別子などがあります。これらの属性値は資産測定データを補完し、ビジネス価値を最大化します。機械学習 (ML) は、このメタデータをさらに詳しく把握し、エンジニアリングタスクを効率化します。

ただし、メタデータ属性を AWS IoT SiteWise サービスから直接クエリすることはできません。属性をクエリ可能にするには、属性を抽出してデータレイクに取り込む必要があります。このパターンでは、Python スクリプトを使用してすべての AWS IoT SiteWise アセットの属性を抽出し、Amazon Simple Storage Service (Amazon S3) バケットのデータレイクに取り込みます。このプロセスが完了したら、Amazon Athena の SQL クエリを使用して、 AWS IoT SiteWise メタデータ属性や測定データセットなどの他のデータセットにアクセスできます。メタデータ属性情報は、 AWS IoT SiteWise モニターやダッシュボードを操作する場合にも役立ちます。Amazon S3 バケット内の抽出された属性を使用して Amazon [Quick Sight ダッシュボード](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html)を構築することもできます。

パターンにはリファレンスコードがあり、 AWS Lambda や などのユースケースに最適なコンピューティングサービスを使用してコードを実装できます AWS Glue。

## 前提条件と制限事項
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+  AWS Lambda 関数または AWS Glue ジョブをセットアップするためのアクセス許可。
+ Amazon S3 バケット。
+ アセットモデルと階層は で設定されます AWS IoT SiteWise。詳細については、 AWS IoT SiteWise ドキュメントの[「アセットモデルの作成](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html)」を参照してください。

## アーキテクチャ
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-architecture"></a>

Lambda 関数または AWS Glue ジョブを使用して、このプロセスを完了できます。モデル数が 100 未満で、各モデルの属性が平均 15 個以下の場合は、Lambda を使用することをお勧めします。他のすべてのユースケースでは、 を使用することをお勧めします AWS Glue。

以下の図で、ソリューションアーキテクチャとワークフローを示します。

![\[アーキテクチャ図は、ここで説明されている抽出とクエリのプロセスを表しています。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/22b59ff7-3df3-4a5b-9973-d43967bd58fd/images/fa3d80bf-df9a-49fe-971c-a055339b2cd2.png)


1. スケジュールされた AWS Glue ジョブまたは Lambda 関数が実行されます。アセットメタデータ属性を から抽出 AWS IoT SiteWise し、Amazon S3 バケットに取り込みます。

1.  AWS Glue クローラはAmazon S3バケット内の抽出データをクロールし、 にテーブルを作成します AWS Glue Data Catalog。

1. Amazon Athena は、標準 SQL を使用して AWS Glue Data Catalog内のテーブルにクエリを実行します。

**自動化とスケール**

 AWS IoT SiteWise アセット設定の更新頻度に応じて、Lambda 関数または AWS Glue ジョブを毎日または毎週実行するようにスケジュールできます。

サンプルコードが処理できる AWS IoT SiteWise アセットの数に制限はありませんが、多数のアセットがあると、プロセスの完了に必要な時間が長くなる可能性があります。

## ツール
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-tools"></a>
+ 「[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)」はインタラクティブなクエリサービスで、Amazon S3 内のデータをスタンダード SQL を使用して直接分析できます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) は、産業用機器からデータを大規模に収集、モデル化、分析、視覚化するのに役立ちます。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
+ [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) は、Python アプリケーション、ライブラリ、またはスクリプトを と統合するのに役立つソフトウェア開発キットです AWS のサービス。

## エピック
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-epics"></a>

### ジョブまたは関数をセットアップする
<a name="set-up-the-job-or-function"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| IAM のアクセス許可を構成するには | IAM コンソールで、Lambda 関数または AWS Glue ジョブが引き受ける IAM ロールにアクセス許可を付与して、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.html)詳細については、IAM ドキュメントの「[Creating a role for an AWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)」を参照してください。 | AWS 全般 | 
| Lambda 関数または AWS Glue ジョブを作成します。 | Lambda を使用している場合は、新しい Lambda 関数を作成します。[**Runtime**] (ランタイム) では、[**Python**] を選択します。詳細については、Lambda ドキュメントの「[Python を使用した Lambda 関数のビルド](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)」を参照してください。を使用している場合は AWS Glue、 AWS Glue コンソールで新しい Python シェルジョブを作成します。詳細については、 AWS Glue ドキュメント[の「Python シェルジョブの追加](https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-job-python-properties)」を参照してください。  | AWS 全般 | 
| Lambda 関数または AWS Glue ジョブを更新します。 | 新しい Lambda 関数または AWS Glue ジョブを変更し、[「追加情報](#extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional)」セクションにコードサンプルを入力します。必要な場合、ユースケースに合わせてコードを変更します。詳細については、Lambda ドキュメントの[「コンソールエディタを使用してコードを編集する](https://docs.aws.amazon.com/lambda/latest/dg/foundation-console.html#code-editor)」およびAWS Glue ドキュメントの[「スクリプトの使用](https://docs.aws.amazon.com/glue/latest/dg/console-edit-script.html)」を参照してください。 | AWS 全般 | 

### ジョブまたは関数を実行する
<a name="run-the-job-or-function"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda 関数または AWS Glue ジョブを実行します。 | Lambda 関数または AWS Glue ジョブを実行します。詳細については、[Lambda ドキュメントの「Lambda 関数を呼び出す](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually)」または AWS Glue ドキュメントの[「トリガーを使用したジョブの開始](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html)」を参照してください。これにより、 AWS IoT SiteWise 階層内のアセットとモデルのメタデータ属性が抽出され、指定された Amazon S3 バケットに保存されます。 | AWS 全般 | 
|  AWS Glue クローラをセットアップします。 | CSV 形式のファイルに必要な形式分類子を使用して AWS Glue クローラを設定します。Lambda 関数または AWS Glue ジョブで使用される Amazon S3 バケットとプレフィックスの詳細を使用します。詳細については、 AWS Glue ドキュメントの[「クローラの定義](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)」を参照してください。 | AWS 全般 | 
|  AWS Glue クローラを実行します。 | クローラを実行して、Lambda 関数または AWS Glue ジョブによって作成されたデータファイルを処理します。クローラは、指定された にテーブルを作成します AWS Glue Data Catalog。詳細については、 AWS Glue ドキュメントの「」または[「トリガーを使用したクローラの開始](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html)」を参照してください。 | AWS 全般 | 
| メタデータ属性をクエリします。 | Amazon Athena を使用して、標準 SQL を使用して、ユースケース AWS Glue Data Catalog に応じて をクエリします。メタデータ属性テーブルは、他のデータベースやテーブルと結合できます。詳細については、Amazon Athena ドキュメントの「[Getting Started](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html)」を参照してください。 | AWS 全般 | 

## 関連リソース
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-resources"></a>
+ [Amazon Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ [AWS Glue ドキュメント](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [AWS IoT SiteWise API リファレンス](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/index.html)
+ [AWS IoT SiteWise ユーザーガイド](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)
  + [開始方法](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started.html)
  + [産業用アセットのモデリング](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models.html)
  + [アセットモデル間の関係 (階層) を定義する](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html)
  + [アセットの関連付けと関連付け解除](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/add-associated-assets.html)
  + [AWS IoT SiteWise デモの作成](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started-demo.html#create-getting-started-demo)
+ [IOTSiteWise](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotsitewise.html) (Python 用 SDK ドキュメント)
+ [Lambda ドキュメント](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)

## 追加情報
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional"></a>

**Code**

提供されているサンプルコードは参照用であり、使用状況に合わせて必要に応じてカスタマイズできます。

```
# Following code can be used in an AWS Lambda function or in an AWS Glue Python shell job. 
# IAM roles used for this job need read access to the AWS IoT SiteWise service and write access to the S3 bucket.
sw_client = boto3.client('iotsitewise')
s3_client = boto3.client('s3')
output = io.StringIO()
 
attribute_list=[]
bucket = '{3_bucket name}'
prefix = '{s3_bucket prefix}'
output.write("model_id,model_name,asset_id,asset_name,attribuet_id,attribute_name,attribute_value\n")
     
m_resp = sw_client.list_asset_models()
for m_rec in m_resp['assetModelSummaries']:
     model_id = m_rec['id']
     model_name = m_rec['name']
 
     attribute_list.clear()
     dam_response = sw_client.describe_asset_model(assetModelId=model_id)
     for rec in dam_response['assetModelProperties']:
         if 'attribute' in rec['type']:
            attribute_list.append(rec['name'])
     
     response = sw_client.list_assets(assetModelId=model_id, filter='ALL')
     for asset in response['assetSummaries']:
         asset_id = asset['id']
         asset_name = asset['name']
         resp = sw_client.describe_asset(assetId=asset_id)
         for rec in resp['assetProperties']:
            if rec['name'] in attribute_list:
                p_resp = sw_client.get_asset_property_value(assetId=asset_id, propertyId=rec['id'])
                if 'propertyValue' in p_resp:
                    if p_resp['propertyValue']['value']:
                        if 'stringValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['stringValue']) + "\n")                             
                        if 'doubleValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['doubleValue']) + "\n")
                        if 'integerValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['integerValue']) + "\n")
                         if 'booleanValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['booleanValue']) + "\n")
 
output.seek(0)
s3_client.put_object(Bucket=bucket, Key= prefix + '/data.csv', Body=output.getvalue())
output.close()
```

# クライアントデバイスによる AWS IoT Greengrass のセットアップとトラブルシューティング
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices"></a>

*Amazon Web Services、Marouane Sefiani、Akalanka De Silva*

## 概要
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-summary"></a>

AWS IoT Greengrass は、エッジデバイスで IoT ソフトウェアを構築、デプロイ、管理するためのモノのインターネット (IoT) エッジランタイムおよびクラウドサービスです。AWS IoT Greengrass のユースケースには以下が含まれます。
+ AWS IoT Greengrass ゲートウェイをホームオートメーションのハブとして使用するスマートホーム
+ AWS IoT Greengrass が製造現場からのデータの取り込みとローカル処理を容易にするスマートファクトリー

AWS IoT Greengrass は、通常は AWS IoT Core に直接接続する他のエッジデバイス (*クライアントデバイス*とも呼ばれる) の安全で認証された MQTT 接続エンドポイントとして機能します。この機能は、クライアントデバイスが AWS IoT Core エンドポイントに直接ネットワークアクセスできない場合に役立ちます。

AWS IoT Greengrass は、以下のユースケースでクライアントデバイスで使用するようにセットアップできます。
+ クライアントデバイスが AWS IoT Greengrass にデータを送信する場合
+ AWS IoT Greengrass が AWS IoT Core にデータを転送するには
+ AWS IoT Core ルールエンジンの高度な AWS IoT Core ルールエンジン特徴量を活用するには

これらの機能を使用するには、AWS IoT Greengrass デバイスに次のコンポーネントをインストールして設定する必要があります。
+ MQTT ブローカー
+ MQTT ブリッジ
+ クライアントデバイス認証
+ IP ディテクター

さらに、クライアントデバイスから公開されるメッセージは JSON 形式または 「[プロトコルバッファ (protobuf)](https://protobuf.dev/)」 形式である必要があります。

このパターンでは、これらの必要なコンポーネントをインストールして設定する方法を説明し、トラブルシューティングのヒントやベストプラクティスを提供します。

## 前提条件と制限
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ 「[AWS Command Line Interface (AWS CLI) バージョン 2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)」 
+ Python 3.7 以降を実行する 2 台のクライアントデバイス
+ Java ランタイム環境 (JRE) バージョン 8 以降と 「[Amazon Corretto 11](https://aws.amazon.com/corretto/)」 または 「[OpenJDK 11](https://openjdk.java.net/)」 を実行している 1 つのコアデバイス

**制限事項**
+ AWS IoT Core を利用できる AWS リージョンを選択する必要があります。AWS IoT Core のリージョンの最新リストについては、「[リージョン別の AWS サービス](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」 を参照してください。
+ コアデバイスには、少なくとも 172 MB の RAM と 512 MB のディスクスペースが必要です。

## アーキテクチャ
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-architecture"></a>

このパターンのソリューションアーキテクチャを次の図に示します。

![\[クライアントデバイスで AWS IoT Greengrass をセットアップするためのソリューションアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/0656c5ae-d979-4cf7-be92-a46fa81cab0d.png)


アーキテクチャには以下が含まれます。
+  2 つのクライアントデバイス 各デバイスには、プライベートキー、デバイス証明書、ルート認証局 (CA) 証明書が含まれます。MQTT クライアントを含む AWS IoT デバイス SDK も各クライアントデバイスにインストールされます。
+ AWS IoT Greengrass がデプロイされたコアデバイスには、以下のコンポーネントが含まれます。
  + MQTT ブローカー
  + MQTT ブリッジ
  + クライアントデバイス認証
  + IP ディテクター

このアーキテクチャは、以下のシナリオをサポートします。
+ クライアントデバイスは MQTT クライアントを使用して、コアデバイスの MQTT ブローカーを介して相互に通信できます。
+ クライアントデバイスは、コアデバイスの MQTT ブローカーと MQTT ブリッジを介してクラウド内の AWS IoT Core と通信することもできます。
+ クラウド内の AWS IoT Core は、MQTT テストクライアント、コアデバイスの MQTT ブリッジ、および MQTT ブローカーを介してクライアントデバイスにメッセージを送信できます。

クライアントデバイスとコアデバイス間の通信の詳細については、「[追加情報](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional)」 セクションを参照してください。

## ツール
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-tools"></a>

**AWS サービス**
+ 「[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)」 は、デバイス上で IoT アプリケーションを構築、デプロイ、管理するのに役立つオープンソースの IoT エッジランタイムおよびクラウドサービスです。
+ 「[AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html)」 は、インターネットに接続されたデバイスが AWS クラウドに接続するための安全な双方向通信を提供します。
+ 「[AWS IoT Device SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)」 はソフトウェア開発キットで、その中に、オープンソースライブラリ、サンプル付きのデベロッパーガイド、および移植ガイドが含まれているので、選択したプラットフォーム上で革新的な IoT 製品またはソリューションを構築できます。
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

## ベストプラクティス
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-best-practices"></a>
+ 変換や条件付きアクションなどの AWS IoT Core ルールエンジンの高度な特徴量を利用するには、クライアントデバイスからのメッセージのペイロードを JSON または Protobuf 形式にする必要があります。
+ MQTT ブリッジを双方向通信を許可するように設定します。
+ AWS IoT Greengrass で IP ディテクタコンポーネントを設定してデプロイし、コアデバイスの IP アドレスが MQTT ブローカー証明書のサブジェクト代替名 (SAN) フィールドに含まれるようにします。

## エピック
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-epics"></a>

### コアデバイスをセットアップ
<a name="set-up-the-core-device"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| コアデバイスに AWS IoT Greengrass セットアップします。 | 「[開発者ガイド](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html)」 の指示に従って AWS IoT Greengrass Core ソフトウェアをインストールします。 | AWS IoT Greengrass | 
| インストールの状態を確認します。 | 次のコマンドを使用して、コアデバイスで AWS IoT Greengrass サービスの状態を確認します。<pre>sudo systemctl status greengrass.service</pre>コマンドの期待される出力は次のようになります。<pre>Launched Nucleus successfully</pre> | AWS 全般 | 
| IAM ポリシーを設定し、それを Greengrass サービスロールにアタッチします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS 全般 | 
| AWS IoT Greengrass コアデバイスに必要なコンポーネントを設定してデプロイします。 | 次のコンポネントを設定、デプロイします。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Greengrass | 
| MQTT ブリッジが双方向通信を許可していることを確認します。 | クライアントデバイスと AWS IoT Core の間で MQTT メッセージをリレーするには、MQTT ブリッジコンポーネントを設定とデプロイして、リレーするトピックを指定します。例を示します。<pre>{<br />  "mqttTopicMapping": {<br />    "ClientDevicesToCloud": {<br />      "topic": "dt/#",<br />      "source": "LocalMqtt",<br />      "target": "IotCore"<br />    },<br />    "CloudToClientDevices": {<br />      "topic": "cmd/#",<br />      "source": "IotCore",<br />      "target": "LocalMqtt"<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 
| 認証コンポーネントがクライアントデバイスに接続してトピックをパブリッシュまたはサブスクライブできることを確認します。 | 次の `aws.greengrass.clientdevices.Auth` 設定では、すべてのクライアントデバイスに接続したり、メッセージを公開したり、すべてのトピックをサブスクライブすることを許可しています。<pre>{<br />  "deviceGroups": {<br />    "formatVersion": "2021-03-05",<br />    "definitions": {<br />      "MyPermissiveDeviceGroup": {<br />        "selectionRule": "thingName: *",<br />        "policyName": "MyPermissivePolicy"<br />      }<br />    },<br />    "policies": {<br />      "MyPermissivePolicy": {<br />        "AllowAll": {<br />          "statementDescription": "Allow client devices to perform all actions.",<br />          "operations": [<br />            "*"<br />          ],<br />          "resources": [<br />            "*"<br />          ]<br />        }<br />      }<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 

### クライアントデバイスをセットアップする
<a name="set-up-client-devices"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS IoT Device SDK をインストールします。 | AWS IoT Device SDK をクライアントデバイスにインストールします。サポートされている言語と関連する SDK の全リストについては、「[AWS IoT Core のキュメンテーション](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)」 を参照してください。たとえば、AWS IoT Device SDK for Python SDK for Python SDK は 「[GitHub にあります](https://github.com/aws/aws-iot-device-sdk-python-v2)」。この SDK をインストールするには:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)代わりに、SDK をソースリポジトリからインストールすることもできます。<pre># Create a workspace directory to hold all the SDK files<br />mkdir sdk-workspace<br />cd sdk-workspace<br /># Clone the repository<br />git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git<br /># Install using Pip (use 'python' instead of 'python3' on Windows)<br />python3 -m pip install ./aws-iot-device-sdk-python-v2</pre> | AWS 全般 IoT | 
| モノの作成 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Core | 
| CA 証明書を Greengrass コアデバイスからダウンロードします。 | Greengrass Core デバイスがオフライン環境で動作することが予想される場合は、Greengrass コア CA 証明書をクライアントデバイスで使用できるようにする必要があります。これにより、クライアントデバイスが MQTT ブローカーの証明書（Greengrass コア CA によって発行される）を検証できるようになります。そのため、この証明書のコピーを入手することが重要です。CA 証明書をダウンロードするには、次のいずれかの方法を使用します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS 全般 | 
| 認証情報をクライアントデバイスにコピーします。 | Greengrass コア CA 証明書、デバイス証明書、および秘密鍵をクライアントデバイスにコピーします。 | AWS 全般 | 
| クライアントデバイスをコアデバイスと関連付けます。 | クライアントデバイスをコアデバイスに関連付けて、コアデバイスを検出できるようにします。その後、「[Greengrass ディスカバリー API](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-discover-api.html)」 を使用して、関連するコアデバイスの接続、情報と証明書を取得することができます。詳細については、AWS IoT Greengrass ドキュメントの 「[クライアントデバイスを関連付ける](https://docs.aws.amazon.com/greengrass/v2/developerguide/associate-client-devices.html)」 を参照してください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)関連付けたクライアントデバイスで Greengrass ディスカバリ API を使用して、このコアデバイスを検出できるようになりました。 | AWS IoT Greengrass | 

### データを送受信します。
<a name="send-and-receive-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| あるクライアントデバイスから別のクライアントデバイスにデータを送信する。 | デバイスの MQTT クライアントを使用して、`dt/client1/sensor` トピックに関するメッセージを公開します。 | AWS 全般 | 
| クライアントデバイスから AWS IoT Core にデータを送信します。 | デバイスの MQTT クライアントを使用して、`dt/client1/sensor` トピックに関するメッセージを公開します。MQTT テストクライアントで、デバイスがメッセージを送信しているトピックを購読するか、すべてのトピックを **\$1** に登録します (「[詳細](https://docs.aws.amazon.com/iot/latest/developerguide/view-mqtt-messages.html)」 を参照)。 | AWS 全般 | 
| AWS IoT Core からクライアントデバイスにメッセージを送信します。 | MQTT テストクライアントページの **[トピックへの発行]** タブの **[トピック名]** フィールドに、メッセージのトピック名を入力します。この例では、`cmd/client1` トピックにを使用します。 | AWS 全般 | 

## トラブルシューティング
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| サーバー証明書エラーを確認できません。 | このエラーは、TLS ハンドシェイク中に MQTT ブローカーが提示した証明書を MQTT クライアントが検証できない場合に発生します。最も一般的な理由は、MQTT クライアントが CA 証明書を持っていないことです。以下の手順に従って、CA 証明書が MQTT クライアントに提供されていることを確認します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | 
| サーバー名を確認できませんというエラーです。 | このエラーは、MQTT クライアントが正しいサーバーに接続していることを検証できない場合に発生します。最も一般的な理由は、Greengrass デバイスの IP アドレスが証明書の SAN フィールドに記載されていないことです。前のソリューションの指示に従って MQTT ブローカー証明書を取得し、「[追加情報](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional)」 セクションで説明したように、SAN フィールドに AWS IoT Greengrass デバイスの IP アドレスが含まれていることを確認します。そうでない場合は、IP ディテクターコンポーネントが正しくインストールされていることを確認し、コアデバイスを再起動します。 | 
| 組み込みクライアントデバイスから接続する場合のみサーバー名を確認できない | 組み込みデバイスで使用される一般的な TLS ライブラリである Mbed TLS は、現在、Mbed TLS ライブラリコードに示されているように、証明書の SAN フィールドでの DNS 名検証のみをサポートしています。コアデバイスには独自のドメイン名がなく、IP アドレスに依存しているため、Mbed TLS を使用する TLS クライアントは TLS ハンドシェイク中にサーバー名の検証に失敗し、接続障害の原因となります。「[x509\$1crt\$1check\$1san 関数](https://github.com/Mbed-TLS/mbedtls/blob/6a327a5fdc2786cb50b4dbe5e3a75884a1f8435a/library/x509_crt.c#L2548)」 を使用して Mbed TLS ライブラリに SAN IP アドレス検証を追加することをお勧めします。 | 

## 関連リソース
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-resources"></a>
+ 「[AWS IoT Greengrass ドキュメント](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)」
+ 「[AWS IoT Core キュメント](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html)」
+ 「[MQTT ブローカーコンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-moquette-component.html)」
+ 「[MQTT ブリッジコンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-bridge-component.html)」
+ 「[クライアントデバイス認証コンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/client-device-auth-component.html)」
+ 「[IP ディテクターコンポーネント](https://docs.aws.amazon.com/greengrass/v2/developerguide/ip-detector-component.html)」
+ 「[AWS IoT デバイス SDK](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)」 
+ 「[AWS IoT Greengrass によるローカルクライアントデバイスの実装](https://aws.amazon.com/blogs/iot/implementing-local-client-devices-with-aws-iot-greengrass/)」 (AWS ブログ記事)
+ 「[RFC 5280 — インターネット X.509 パブリックキーインフラストラクチャ証明書と証明書失効リスト (CRL) プロファイル](https://www.rfc-editor.org/rfc/rfc5280)」

## 追加情報
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional"></a>

このセクションでは、クライアントデバイスとコアデバイスの間の通信に関する追加情報を提供します。

MQTT ブローカーはコアデバイスのポート 8883 で TLS クライアント接続を試行します。次の図は、MQTT ブローカーのサーバー証明書の例を示しています。

![\[MQTT ブローカーのサーバー証明書の例\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b2c324a1-60cd-4194-80e7-e5184662146a.png)


サンプル証明書には以下の詳細が表示されます。
+ 証明書は AWS IoT Greengrass Core CA によって発行されます。この証明書はローカルでコアデバイスに固有です。つまり、ローカル CA として機能します。
+ この証明書は、次の図に示す、クライアントの認証コンポーネントによって毎週自動的にローテーションされます。この間隔は、クライアント認証コンポーネントの設定で設定できます。

![\[MQTT ブローカーのサーバー証明書のローテーション\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/65bcdc5c-a71c-4f52-adcd-21910fabfc2a.png)

+ サブジェクト代替名 (SAN) は TLS クライアント側でのサーバー名検証において重要な役割を果たします。これにより、TLS クライアントは正しいサーバーに接続でき、TLS セッション設定中の中間者攻撃を回避できます。サンプル証明書の SAN フィールドは、このサーバーがローカルホスト (ローカル UNIX ドメインソケット) をリッスンしていて、ネットワークインターフェースの IP アドレスが 192.168.1.12 であることを示しています。

TLS クライアントは、証明書の SAN フィールドを使用して、サーバー検証中に正規のサーバーに接続していることを確認します。これとは対照的に、HTTP サーバーとブラウザー間の通常の TLS ハンドシェイクでは、サーバー検証プロセス中に、共通名 (CN) フィールドまたは SAN フィールドのドメイン名を使用して、ブラウザーが実際に接続しているドメインをクロスチェックします。コアデバイスにドメイン名がない場合は、SAN フィールドに含まれる IP アドレスが同じ目的を果たします。詳細については、「*RFC 5280 – Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile*」の「[Subject Alternative Name](https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.6)」セクションを参照してください。

AWS IoT Greengrass の IP ディテクターコンポーネントは、証明書の SAN フィールドに正しい IP アドレスが含まれていることを保証します。

この例の証明書は、ローカル CA として動作する AWS IoT Greengrass デバイスによって署名されています。TLS クライアント (MQTT クライアント) はこの CA を認識しないため、次のような CA 証明書を提供する必要があります。

![\[CA 証明書の例\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b08b3bcb-9e12-4f5a-9204-cf65ea32902f.png)


# その他のパターン
<a name="iot-more-patterns-pattern-list"></a>

**Topics**
+ [AWS IoT Greengrass を使用して IoT データをコスト効率よく直接 Amazon S3 に取り込む](cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.md)
+ [Terraform を使用して CrewAI フレームワークで Amazon Bedrock にエージェンティックシステムを展開する](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Docker コンテナとして AWS IoT Greengrass V2 実行されている にコンテナ化されたアプリケーションをデプロイする](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)