

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

# AWS IoT Core チュートリアルの開始方法
<a name="iot-gs"></a>

IoT を初めて使用する場合でも、長年の経験がある場合でも、これらのリソースには、 の使用を開始するのに役立つ AWS IoT 概念と用語が記載されています AWS IoT。
+  AWS IoT とそのコンポーネントを ****で確認します[の AWS IoT 仕組み](aws-iot-how-it-works.md)。
+ トレーニング資料と動画のコレクションから、[AWS IoTの**詳細**](aws-iot-learn-more.md)をご覧ください。このトピックには、 AWS IoT が接続できるサービスのリスト、ソーシャルメディアのリンク、通信プロトコル仕様へのリンクも含まれています。
+ **[最初のデバイスを に接続する AWS IoT Core](#aws-iot-get-started)**.
+ [に接続する AWS IoT Core](connect-to-iot.md) および [AWS IoT チュートリアル](iot-tutorials.md)を詳しく調べて、IoT ソリューションを**開発**します。
+ [Device Advisor](device-advisor.md) を使用して、安全で信頼性の高い通信について IoT デバイスを**テストおよび検証**します。
+ [フリートインデックス作成](iot-indexing.md)、[AWS IoT ジョブ](iot-jobs.md)、[AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html) などの AWS IoT Core 管理サービスを使用してソリューションを**管理**します。
+ [AWS IoT データサービス](aws-iot-how-it-works.md#aws-iot-components-data)を使用して、デバイスからのデータを**分析**します。

## 最初のデバイスを に接続する AWS IoT Core
<a name="aws-iot-get-started"></a>

AWS IoT Core サービスはIoT デバイスを AWS IoT サービスや他の AWS サービスに接続します。 AWS IoT Core には、IoT デバイスとクラウド間のメッセージを接続して処理する IoT デバイスゲートウェイとメッセージブローカーが含まれています。

 AWS IoT Core と の使用を開始する方法は次のとおりです AWS IoT。

![\[AWS IoT Core 入門ツアーマップ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/iot-gs-tour-map.png)


このセクションでは、 の主要サービスを紹介 AWS IoT Core する のツアーと、デバイスを に接続 AWS IoT Core してそれらの間でメッセージを渡す方法のいくつかの例を示します。デバイスとクラウド間でメッセージを渡すことは、すべての IoT ソリューションの基本であり、デバイスが他の AWS サービスとやり取りする方法でもあります。
+ 

**[セットアップ AWS アカウント](setting-up.md)**  
 AWS IoT サービスを使用する前に、 を設定する必要があります AWS アカウント。 AWS アカウント と IAM ユーザーがすでにある場合は、それらを使用してこのステップをスキップできます。
+ 

**[クイックコネクトチュートリアルを試す](iot-quick-start.md)**  
このチュートリアルは、 をすばやく開始 AWS IoT し、限られたシナリオでどのように機能するかを確認する場合に最適です。このチュートリアルでは、デバイスが必要で、そのデバイスに AWS IoT ソフトウェアをインストールします。IoT デバイスをお持ちでない場合は、このチュートリアルのデバイスとして Windows、Linux、または macOS のパーソナルコンピュータを使用できます。試したい AWS IoTがデバイスがない場合は、次のオプションを試してください。
+ 

**[インタラクティブチュートリアルを試す](interactive-demo.md)**  
このデモは、デバイスを接続したりソフトウェアをダウンロードしたりすることなく、基本的な AWS IoT ソリューションで何ができるかを確認したい場合に最適です。インタラクティブチュートリアルでは、 AWS IoT Core サービス上に構築されたシミュレートされたソリューションを紹介します。このソリューションは、サービスがどのようにやり取りするかを示します。
+ 

**[実践的なチュートリアルで AWS IoT Core のサービスを調べる](iot-gs-first-thing.md)**  
このチュートリアルは、ルールエンジンやシャドウなどの他の AWS IoT Core 機能を引き続き探索 AWS IoT できるように、 の使用を開始する開発者に最適です。このチュートリアルは、クイックコネクトチュートリアルと同様の手順に従いますが、各ステップをさらに詳しく説明し、より高度なチュートリアルへのよりスムーズな移行を可能にします。
+ 

**[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)**  
MQTT テストクライアントの使用方法を学び、最初のデバイスが MQTT メッセージを AWS IoTに発行するのを観察します。MQTT テストクライアントは、デバイス接続の監視とトラブルシューティングに役立つツールです。

**注記**  
これらの開始方法のチュートリアルを複数試したり、同じチュートリアルを繰り返したりする場合は、前のチュートリアルで作成したモノのオブジェクトを削除してから、別のチュートリアルを開始してください。前のチュートリアルからモノのオブジェクトを削除しない場合は、以降のチュートリアルで別のモノの名前を使用する必要があります。これは、モノの名前は、アカウントおよび AWS リージョン内で一意でなければならないためです。

詳細については AWS IoT Core、[「 とは AWS IoT Core](what-is-aws-iot.md)」を参照してください。

# セットアップ AWS アカウント
<a name="setting-up"></a>

 AWS IoT Core を初めて使用する場合は、事前に以下のタスクを完了してください。

**Topics**
+ [にサインアップする AWS アカウント](#sign-up-for-aws)
+ [管理アクセスを持つユーザーを作成する](#create-an-admin)
+ [AWS IoT コンソールを開く](#iot-console-signin)

## にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

## 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 *AWS IAM アイデンティティセンター ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)」を参照してください。
+ [AWS IoT コンソールを開く](#iot-console-signin)

と AWS アカウント ユーザーがすでにある場合は、それらを使用して に進むことができます[AWS IoT コンソールを開く](#iot-console-signin)。

## AWS IoT コンソールを開く
<a name="iot-console-signin"></a>

このセクションのコンソール指向トピックのほとんどは、 AWS IoT コンソールから開始されます。にまだサインインしていない場合は AWS アカウント、サインインし、[AWS IoT コンソール](https://console.aws.amazon.com//iot/home)を開いて次のセクションに進み、 の使用を続行します AWS IoT。

# インタラクティブチュートリアル
<a name="interactive-demo"></a>

インタラクティブチュートリアルでは、 AWS IoT上に構築されたシンプルな IoT ソリューションのコンポーネントを示します。このチュートリアルでは、IoT デバイスが AWS IoT Core サービスとやり取りする方法を示します。このトピックでは、 AWS IoT Core インタラクティブチュートリアルのプレビューを提供します。

**注記**  
コンソールの画像には、このチュートリアルの画像には表示されないアニメーションが含まれています。

デモを実行するには、まず[セットアップ AWS アカウント](setting-up.md)を実行する必要があります。ただし、このチュートリアルでは、 AWS IoT リソース、追加のソフトウェア、またはコーディングは必要ありません。

このデモにかかる時間は、約 5～10 分です。10 分かけることで、各ステップについて理解する時間が長くなります。

**AWS IoT Core インタラクティブチュートリアルを実行するには**

1.  AWS IoT コンソールで[AWS IoT ホームページ](https://console.aws.amazon.com//iot/home#/home)を開きます。

   **AWS IoT ホームページ**の **[学習リソース]**] ウィンドウペインで、**[チュートリアルを開始する]** を選択します。  
![\[これは AWS IoT コンソールのホームページです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-home-demo.png)

1. **[AWS IoT コンソールのチュートリアル]**ページで、チュートリアルのセクションを確認し、準備ができたら **[開始]** セクションを選択します。

**以下のセクションでは、 **AWS IoT コンソールチュートリアル**でこれらの AWS IoT Core 機能がどのように表示されるかについて説明します。**
+ [IoT デバイスの接続](#interactive-demo-part1)
+ [オフラインデバイスの状態の保存](#interactive-demo-part2)
+ [デバイスデータのサービスへのルーティング](#interactive-demo-part3)

## IoT デバイスの接続
<a name="interactive-demo-part1"></a>

IoT デバイスが と通信する方法について説明します AWS IoT Core。

![\[これは、 AWS IoT インタラクティブチュートリアルの最初のステップです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-demo-step-1.png)


このステップのアニメーションは、左の制御デバイスと右の家庭用スマートランプという 2 つのデバイスが、クラウド内の AWS IoT Core とどのように接続して通信するかを示します。アニメーションは、デバイスが と通信 AWS IoT Core し、受信したメッセージに反応する様子を示しています。

デバイスを に接続する方法の詳細については AWS IoT Core、「」を参照してください[に接続する AWS IoT Core](connect-to-iot.md)。

## オフラインデバイスの状態の保存
<a name="interactive-demo-part2"></a>

デバイスまたはアプリがオフラインのときに がデバイスの状態 AWS IoT Core を保存する方法について説明します。

![\[これはインタラクティブ AWS IoT チュートリアルの 2 番目のステップです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-demo-step-2.png)


このステップのアニメーションは、 の Device Shadow サービスがコントロールデバイスとスマートランプのデバイス状態情報 AWS IoT Core を保存する方法を示しています。スマートランプがオフラインの場合、デバイスシャドウは制御デバイスからのコマンドを保存します。

スマートランプが再接続されると AWS IoT Core、これらのコマンドを取得します。制御デバイスがオフラインの場合、デバイスシャドウはスマートランプから状態情報を保存します。制御デバイスが再接続されると、スマートランプの現在の状態を取得して表示を更新します。

デバイスシャドウの詳細については、「[AWS IoT Device Shadow サービス](iot-device-shadows.md)」を参照してください。

## デバイスデータのサービスへのルーティング
<a name="interactive-demo-part3"></a>

 AWS IoT Core がデバイスの状態を他の AWS サービスに送信する方法について説明します。

![\[これはインタラクティブ AWS IoT チュートリアルの 3 番目のステップです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-demo-step-3.png)


このステップのアニメーションは、 が AWS IoT rules. AWS IoT rules を使用してデバイスから他の AWS サービスにデータ AWS IoT Core を送信する方法を示しています。 はデバイスからの特定のメッセージをサブスクライブし、それらのメッセージのデータを解釈し、解釈されたデータを他のサービスにルーティングします。この例では、 AWS IoT ルールはモーションセンサーからデータを解釈し、コマンドを Device Shadow に送信して、スマート電球に送信します。前の例と同様に、デバイスシャドウは制御デバイスのデバイス状態情報を保存します。

 AWS IoT ルールの詳細については、「」を参照してください[のルール AWS IoT](iot-rules.md)。

# AWS IoT Core クイック接続チュートリアルを試す
<a name="iot-quick-start"></a>

このチュートリアルでは、最初のモノのオブジェクトを作成し、そのオブジェクトにデバイスを接続して、MQTT メッセージを送信する様子を観察します。

このチュートリアルは 15～20 分を要します。

このチュートリアルは、 をすぐに使い始めて、限られたシナリオでどのように機能するか AWS IoT を確認するユーザーに最適です。より多くの機能やサービスに興味を持つきっかけとなる例を探している場合は、[実践的なチュートリアル AWS IoT Core で を試す](iot-gs-first-thing.md) を試してください。

このチュートリアルでは、非常に小さな IoT ソリューション AWS IoT Core の一部として の*モノのリソース*に接続するデバイスでソフトウェアをダウンロードして実行します。デバイスは、Raspberry Pi などの IoT デバイスにすることも、Linux、OS と OSX、または Windows を実行しているコンピュータにすることもできます。Long Range WAN (LoRaWAN) デバイスを に接続する場合は AWS IoT、[「＞デバイスとゲートウェイを AWS IoT Core for LoRaWAN に接続する](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/lorawan-getting-started.html)」のチュートリアルを参照してください。

デバイスが [AWS IoT コンソール](https://console.aws.amazon.com//iot/home)を実行できるブラウザをサポートしている場合は、そのデバイスでこのチュートリアルを完了することをお勧めします。

**注記**  
デバイスに互換性のあるブラウザがない場合は、コンピュータでこのチュートリアルに従ってください。手順でファイルをダウンロードするように求められたら、それをコンピュータにダウンロードしてから、ダウンロードしたファイルを Secure Copy (SCP) または同様のプロセスを使用してデバイスに転送します。

このチュートリアルでは、IoT デバイスが AWS アカウントのデバイスデータエンドポイントのポート 8443 と通信する必要があります。そのポートにアクセスできるかどうかをテストするには、「[デバイスデータエンドポイントとの接続をテストする](iot-quick-start-test-connection.md)」の手順を試してください。

## ステップ 1. チュートリアルを開始する
<a name="iot-quick-start-connect"></a>

可能であれば、デバイスでこの手順を完了してください。それ以外の場合は、この手順の後半でファイルをデバイスに転送する準備をしてください。

チュートリアルを開始するには、[AWS IoT コンソール](https://console.aws.amazon.com//iot/home)にログインします。 AWS IoT コンソールのホームページの左側で、**Connect** を選択し、**Connect one device **を選択します。

![\[この AWS IoT コンソールのホームページには、1 つのデバイスを接続する方法が表示されます。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-quick-connect.PNG)


## ステップ 2. モノのオブジェクトを作成する
<a name="iot-quick-start-configure"></a>

1. **[Prepare your device]** (デバイスを準備する) セクションで、画面の指示に従ってデバイスを AWS IoTに接続する準備をします。  
![\[AWS IoT コンソールでデバイスを準備する方法。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-prepare-device.png)

1. **[Register and secure your device]** (デバイスを登録して保護する) セクションで、**[Create a new thing]** (新しいモノの作成) または **[Choose an existing thing]** (既存のモノを選択) を選択してください。**[Thing name]** (モノの名前) フィールドで、モノのオブジェクトの名前を入力します。この例で使用されているモノの名前は **TutorialTestThing** です。
**重要**  
続行する前に、モノの名前をもう一度確認します。  
モノのオブジェクトの作成後にモノの名前を変更することはできません。モノの名前を変更するには、正しいモノの名前の新しいモノのオブジェクトを作成し、間違った名前のモノのオブジェクトを削除する必要があります。

   **[Additional configurations]** (追加の設定) セクションで、リストされているオプション設定を使用して、モノのリソースをさらにカスタマイズします。

   モノのオブジェクトに名前を付けて、追加の設定を選択したら、**[Next]** (次へ) を選択します。  
![\[AWS IoT コンソールを使用して、デバイスを登録して保護します。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-register-and-secure-your-device.png)

1. **プラットフォームと SDK の選択**セクションで、使用する AWS IoT Device SDK のプラットフォームと言語を選択します。この例では、Linux/OSX プラットフォームと Python SDK を使用しています。次のステップに進む前に python3 と pip3 がターゲットデバイスにインストールされていることを確認してください。
**注記**  
コンソールのページの下部で、選択した SDK に必要な前提条件であるソフトウェアの一覧を確認してください。  
次のステップに進む前に、必要なソフトウェアをターゲットコンピュータにインストールしておく必要があります。

   プラットフォームとデバイスの SDK 言語を選択したら、[**Next**] (次へ) を選択します。  
![\[AWS IoT コンソールを使用してプラットフォームと SDK を選択します。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-choose-platform-and-SDK.png)

## ステップ 3. デバイスにファイルをダウンロードする
<a name="iot-quick-start-name"></a>

このページは、 AWS IoT が接続キットを作成した後に表示されます。このキットには、デバイスが必要とする以下のファイルとリソースが含まれています。
+ デバイスの認証に使用するモノの証明書ファイル
+ モノのオブジェクトが AWS IoTとインタラクションすることを承認するポリシーリソース
+  AWS Device SDK をダウンロードし、デバイスでサンプルプログラムを実行するスクリプト

1. 続行する準備ができたら、[**Download connection kit for**] (接続キットのダウンロード) ボタンを選択して、前に選択したプラットフォーム用の接続キットをダウンロードします。  
![\[これは、証明書ファイルをダウンロードする AWS IoT コンソールのページです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-download-connection-kit_1.png)

1. この手順をデバイスで実行している場合は、コマンドラインコマンドを実行できるディレクトリに接続キットファイルを保存します。

   この手順をデバイスで実行していない場合は、接続キットファイルをローカルディレクトリに保存し、そのファイルをデバイスに転送します。

1. **[Unzip connection kit on your device]** (デバイスで接続キットを解凍) セクションで、接続キットファイルが置かれているディレクトリに **unzip connect\$1device\$1package.zip** と入力します。

   Windows PowerShell コマンドウィンドウを使用していて、**unzip** コマンドが機能しない場合は、**unzip** を **expand-archive** に置き換えて、コマンドラインをもう一度試してください。

1. デバイスに接続キットファイルを作成したら、**[Next]** (次へ) を選択してチュートリアルを続行します。  
![\[AWS IoT 接続キットのダウンロード後のコンソール証明書ファイルのダウンロードページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-download-connection-kit_2.png)

## ステップ 4. サンプルを実行する
<a name="iot-quick-start-install-run"></a>

この手順は、コンソールに表示される指示に従って、デバイスのターミナルまたはコマンドウィンドウで実行します。コンソールに表示されるコマンドは、[ステップ 2. モノのオブジェクトを作成する](#iot-quick-start-configure) で選択したオペレーティングシステム用のコマンドです。ここに示されているものは、Linux/OSX オペレーティングシステム用です。

1. デバイスのターミナルまたはコマンドウィンドウで、接続キットファイルを含む ディレクトリで、 AWS IoT コンソールに表示されるステップを実行します。  
![\[AWS IoT コンソールのクイックスタートインストールと実行ページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-run-connection-kit.png)

1. コンソールで**[Step 2]** (ステップ 2) のコマンドを入力すると、デバイスのターミナルまたはコマンドウィンドウで、次のような出力が表示されます。この出力は、プログラムが AWS IoT Coreとの間で送受信しているメッセージからのものです。  
![\[AWS IoT コンソールのクイックスタートプログラム出力例。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-connect-console-output-python_updated.png)

   サンプルプログラムの実行中は、テストメッセージ `Hello World!` も表示されます。テストメッセージは、デバイスのターミナルまたはコマンドウィンドウに表示されます。
**注記**  
トピックのサブスクリプションと発行の詳細については、選択した SDK のサンプルコードを参照してください。

1. この手順のコンソールで [Step 2] (ステップ 2) からのコマンドを繰り返して、サンプルプログラムを再度実行できます。

1. (オプション) [AWS IoT コンソール](https://console.aws.amazon.com//iot/home)で IoT クライアントからのメッセージを表示するには、 AWS IoT コンソールのテストページで [MQTT テストクライアント](https://console.aws.amazon.com//iot/home#/test)を開きます。 ****Python SDK を選択した場合、**[MQTT test client]** (MQTT テストクライアント) の **[Topic filter]** (トピックフィルター) に **sdk/test/*python*** などのトピックを入力して、デバイスからのメッセージをサブスクライブします。トピックフィルターは、大文字と小文字を識別し、**[Step 1]** (ステップ 1) で選択した SDK のプログラミング言語によって異なります。トピックのサブスクリプションと発行の詳細については、選択した SDK のコード例を参照してください。

1. テストトピックを購読後、デバイスで **./start.sh** を実行します。詳細については、「[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)」を参照してください。

   **./start.sh** の実行後、次のようなメッセージが MQTT クライアントに表示されます。

   ```
   {
     "message": "Hello World!" [1]
   }
   ```

   `[]` で囲われている `sequence` 番号は、新しい `Hello World!` メッセージを受信するたびに 1 ずつ増加し、プログラムを終了すると停止します。

1. チュートリアルを終了して概要を表示するには、 AWS IoT コンソールで**続行**を選択します。  
![\[AWS IoT コンソールのクイックスタート完了ページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-connect-complete_updated1.png)

1. これで、 AWS IoT クイック接続チュートリアルの概要が表示されます。  
![\[AWS IoT コンソールのクイックスタートの概要ページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/aws-iot-learn-device-is-connected.png)

## ステップ 5. さらに詳しく
<a name="iot-quick-start-test"></a>

クイックスタートを完了した後、 AWS IoT さらに詳しく調べるアイデアをいくつか紹介します。
+ 

**[MQTT テストクライアントで MQTT メッセージを表示する](https://console.aws.amazon.com/iot/home#/test)**  
[AWS IoT コンソール](https://console.aws.amazon.com//iot/home)から、 AWS IoT コンソールの **[テスト]** ページで [[MQTT クライアント]](https://console.aws.amazon.com//iot/home#/test) を開くことができます。**MQTT テストクライアント**で **\$1** にサブスクライブし、デバイスで前の手順で説明したようにプログラム **./start.sh** を実行します。詳細については、「[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)」を参照してください。
+ 

**[Device Advisor](https://docs.aws.amazon.com//iot/latest/developerguide/device-advisor.html) を使用してデバイスでテストを実行する**  
Device Advisor を使用して、デバイスが安全かつ確実に に接続し、操作できるかどうかをテストします AWS IoT。
+ 

**[インタラクティブチュートリアル](interactive-demo.md)**  
インタラクティブチュートリアルを開始するには、 AWS IoT コンソールの**学習**ページから、**「 の AWS IoT 仕組み**」タイルで、**チュートリアルの開始**を選択します。
+ 

**[より多くのチュートリアルを見る](iot-gs-first-thing.md)**  
このクイックスタートでは、 のサンプルのみを提供します AWS IoT。さらに AWS IoT 詳しく調べ、強力な IoT ソリューションプラットフォームにする機能については、 で開発プラットフォームの準備を開始します[実践的なチュートリアル AWS IoT Core で を試す](iot-gs-first-thing.md)。

# デバイスデータエンドポイントとの接続をテストする
<a name="iot-quick-start-test-connection"></a>

このトピックでは、アカウントの*デバイスデータエンドポイント* ( AWS IoTに接続するために IoT デバイスが使用するエンドポイント) に対するデバイスの接続をテストする方法について説明します。

この手順は、テストするデバイス上で実行するか、テストするデバイスに接続された SSH ターミナルセッションを使用して実行します。

**Topics**
+ [デバイスデータエンドポイントを検索する](#iot-quick-start-test-connection-endpoint)
+ [接続をすばやくテストする](#iot-quick-start-test-connection-ping)
+ [アプリを入手してデバイスのデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-app)
+ [デバイスデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-test)

## デバイスデータエンドポイントを検索する
<a name="iot-quick-start-test-connection-endpoint"></a>

この手順では、[AWS IoT コンソール](https://console.aws.amazon.com//iot/home)でデバイスデータエンドポイントを検索して IoT デバイスへの接続をテストする方法について説明します。

**デバイスデータエンドポイントを検索するには**

1. [AWS IoT コンソール](https://console.aws.amazon.com//iot/home)の **[接続]** で、**[ドメイン設定]** に移動します。

1. **[ドメイン設定]** ページで、**[ドメイン設定]** コンテナに移動し、**ドメイン名**をコピーします。エンドポイント値は に固有 AWS アカウント であり、 の例に似ています`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`。

1. 

   デバイスデータポイントを保存します。このデバイスデータエンドポイントは、次の手順で使用します。

## 接続をすばやくテストする
<a name="iot-quick-start-test-connection-ping"></a>

この手順では、デバイスデータエンドポイントとの一般的な接続をテストしますが、デバイスが使用する特定のポートはテストされません。このテストでは一般的なプログラムを使用します。通常、これは、デバイスが AWS IoTに接続できるかどうかを確認するには十分です。

デバイスが使用する特定のポートとの接続をテストする場合は、この手順をスキップして、「[アプリを入手してデバイスのデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-app)」に進みます。

**デバイスデータエンドポイントをすばやくテストするには**

1. ターミナルまたはデバイスのコマンドラインウィンドウで、サンプルデバイスデータエンドポイント (`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`) をアカウントのデバイスデータエンドポイントで置き換え、次のコマンドを入力します。

------
#### [ Linux ]

   ```
   ping -c 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

------
#### [ Windows ]

   ```
   ping -n 5 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

------

1. 次のような出力が `ping` に表示された場合、デバイスデータエンドポイントに正常に接続されています。と AWS IoT 直接通信しませんでしたが、サーバーが見つかったため、このエンドポイントを介して AWS IoT が使用可能である可能性があります。

   ```
   PING a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (xx.xx.xxx.xxx) 56(84) bytes of data.
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=1 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=2 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=3 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=4 ttl=231 time=127 ms
   64 bytes from ec2-EXAMPLE-218.eu-west-1.compute.amazonaws.com (xx.xx.xxx.xxx): icmp_seq=5 ttl=231 time=127 ms
   ```

   この結果に満足したら、ここでテストを終了できます。

    AWS IoTが使用する特定のポートとの接続をテストする場合、「[アプリを入手してデバイスのデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-app)」に進んでください。

1. `ping` で正常な出力が返されなかった場合、エンドポイントの値を参照して、正しいエンドポイントが入力されていること、およびデバイスがインターネットに接続されていることを確認してください。

## アプリを入手してデバイスのデータエンドポイントとポートへの接続をテストする
<a name="iot-quick-start-test-connection-app"></a>

`nmap` を使用して、より詳細な接続テストを実行できます。この手順では、`nmap` がデバイスにインストールされているかどうかをテストします。

**デバイスに `nmap` がインストールされていることを確認するには**

1. ターミナルまたはテストするデバイスのコマンドラインウィンドウで、次のコマンドを入力し、`nmap` がインストールされていることを確認します。

   ```
   nmap --version
   ```

1. 次のような出力が表示された場合、`nmap` がインストールされていて、[デバイスデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-test) に接続できます。

   ```
   Nmap version 6.40 ( http://nmap.org )
   Platform: x86_64-koji-linux-gnu
   Compiled with: nmap-liblua-5.2.2 openssl-1.0.2k libpcre-8.32 libpcap-1.5.3 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: epoll poll select
   ```

1. 前のステップに示すような応答がない表示されない場合、デバイスに `nmap` をインストールする必要があります。デバイスのオペレーティングシステムの手順を選択します。

------
#### [ Linux ]

この手順を実行するには、コンピュータにソフトウェアをインストールするためのアクセス許可が必要です。

**Linux コンピュータに nmap をインストールするには**

1. ターミナルまたはデバイスのコマンドラインウィンドウで、それが実行している Linux のバージョンに対応するコマンドを入力します。

   1. Debian または Ubuntu の場合:

      ```
      sudo apt install nmap
      ```

   1. CentOS または RHEL の場合:

      ```
      sudo yum install nmap
      ```

1. 次のコマンドを使用してインストールをテストします。

   ```
   nmap --version
   ```

1. 次のような出力が表示された場合、`nmap` がインストールされていて、[デバイスデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-test) に接続できます。

   ```
   Nmap version 6.40 ( http://nmap.org )
   Platform: x86_64-koji-linux-gnu
   Compiled with: nmap-liblua-5.2.2 openssl-1.0.2k libpcre-8.32 libpcap-1.5.3 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: epoll poll select
   ```

------
#### [ macOS ]

この手順を実行するには、コンピュータにソフトウェアをインストールするためのアクセス許可が必要です。

**macOS コンピュータに nmap をインストールするには**

1. ブラウザで [https://nmap.org/download\$1macosx](https://nmap.org/download#macosx) を開き、**Latest stable release** (最新の安定したリリース) を開きます。

   プロンプトが表示されたら、[**Open with DiskImageInstaller**] (DiskImageInstaller で開く) を選択します。

1. インストールウィンドウで、パッケージを **Applications** フォルダに移動します。

1. **[検索]** で **Applications** フォルダ内の `nmap-xxxx-mpkg` パッケージを見つけます。パッケージを **Ctrl-click** し、**[開く]** を選択してパッケージを開きます。

1. セキュリティダイアログボックスを確認します。**nmap** をインストールする準備ができたら、[**開く**] を選択して **nmap** をインストールします。

1. **Terminal** で、次のコマンドを使用してインストールをテストします。

   ```
   nmap --version
   ```

1. 次のような出力が表示された場合、`nmap` がインストールされていて、[デバイスデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-test) に接続できます。

   ```
   Nmap version 7.92 ( https://nmap.org )
   Platform: x86_64-apple-darwin17.7.0
   Compiled with: nmap-liblua-5.3.5 openssl-1.1.1k nmap-libssh2-1.9.0 libz-1.2.11 nmap-libpcre-7.6 nmap-libpcap-1.9.1 nmap-libdnet-1.12 ipv6 Compiled without:
   Available nsock engines: kqueue poll select
   ```

------
#### [ Windows ]

この手順を実行するには、コンピュータにソフトウェアをインストールするためのアクセス許可が必要です。

**Windows コンピュータに nmap をインストールするには**

1. ブラウザで [https://nmap.org/download\$1windows](https://nmap.org/download#windows) を開き、セットアッププログラムの **Latest stable release** (最新の安定したリリース) をダウンロードします。

   プロンプトが表示されたら、[**ファイルを保存]** を選択します。ファイルをダウンロードしたら、ダウンロードフォルダからファイルを開きます。

1.  セットアップファイルのダウンロードが完了したら、ダウンロードした **nmap-xxxx-setup.exe** 開いてアプリをインストールします。

1.  プログラムのインストール時に、デフォルト設定を受け入れます。

   このテストには Npcap アプリは必要ありません。このアプリをインストールしない場合は、このオプションの選択を解除できます。

1. **Command** で、次のコマンドを使用してインストールをテストします。

   ```
   nmap --version
   ```

1. 次のような出力が表示された場合、`nmap` がインストールされていて、[デバイスデータエンドポイントとポートへの接続をテストする](#iot-quick-start-test-connection-test) に接続できます。

   ```
   Nmap version 7.92 ( https://nmap.org )
   Platform: i686-pc-windows-windows
   Compiled with: nmap-liblua-5.3.5 openssl-1.1.1k nmap-libssh2-1.9.0 nmap-libz-1.2.11 nmap-libpcre-7.6 Npcap-1.50 nmap-libdnet-1.12 ipv6
   Compiled without:
   Available nsock engines: iocp poll select
   ```

------

## デバイスデータエンドポイントとポートへの接続をテストする
<a name="iot-quick-start-test-connection-test"></a>

この手順では、選択したポートを使用して IoT デバイスのデバイスデータエンドポイントへの接続をテストします。

**デバイスデータエンドポイントとポートへの接続をテストするには**

1. ターミナルまたはデバイスのコマンドラインウィンドウで、サンプルデバイスデータエンドポイント (`a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com`) をアカウントのデバイスデータエンドポイントで置き換え、次のコマンドを入力します。

   ```
   nmap -p 8443 a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com
   ```

1. 次のような出力が `nmap` に表示された場合、`nmap` は、選択したポートのデバイスデータエンドポイントに正常に接続できました。

   ```
   Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-18 16:23 Pacific Standard Time
   Nmap scan report for a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (xx.xxx.147.160)
   Host is up (0.036s latency).
   Other addresses for a3qEXAMPLEsffp-ats.iot.eu-west-1.amazonaws.com (not scanned): xx.xxx.134.144 xx.xxx.55.139 xx.xxx.110.235 xx.xxx.174.233 xx.xxx.74.65 xx.xxx.122.179 xx.xxx.127.126
   rDNS record for xx.xxx.147.160: ec2-EXAMPLE-160.eu-west-1.compute.amazonaws.com
   
   PORT     STATE SERVICE
   8443/tcp open  https-alt
   MAC Address: 00:11:22:33:44:55 (Cimsys)
   
   Nmap done: 1 IP address (1 host up) scanned in 0.91 seconds
   ```

1. `nmap` で正常な出力が返されなかった場合、エンドポイントの値を参照して、正しいエンドポイントが入力されていること、およびデバイスがインターネットに接続されていることを確認してください。

ステップ 1 で使用したポート (`8443`) を置き換えることによって、デバイスデータエンドポイントのその他のポート (プライマリ HTTPS ポートのポート443 など) をテストできます。

# 実践的なチュートリアル AWS IoT Core で を試す
<a name="iot-gs-first-thing"></a>

このチュートリアルでは、 ソフトウェアをインストールし、デバイスを に接続するために必要な AWS IoT リソースを作成して、 で MQTT メッセージを送受信 AWS IoT Core できるようにします AWS IoT Core。 AWS IoT コンソールの MQTT クライアントにメッセージが表示されます。

このチュートリアルは 20～30 分を要します。IoT デバイスまたは Raspberry Pi を使用している場合、例えばオペレーティングシステムをインストールしてデバイスを設定する必要があるときは、このチュートリアルには時間がかかることがあります。

![\[AWS IoT Core ページの開始方法。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/iot-getting-started.png)


このチュートリアルは、[ルールエンジン](https://docs.aws.amazon.com//iot/latest/developerguide/iot-rules.html)や[シャドウ](https://docs.aws.amazon.com//iot/latest/developerguide/iot-device-shadows.html)などのより高度な機能を引き続き探索 AWS IoT Core できるように、 の使用を開始する開発者に最適です。このチュートリアルでは、[クイックスタートチュートリアル](iot-quick-start.md)よりも詳細な手順を説明することで、 とそれが他の AWS サービスとやり取りする方法を AWS IoT Core 学習し続ける準備をします。簡単な *Hello World* 体験を探している場合は、[AWS IoT Core クイック接続チュートリアルを試す](iot-quick-start.md) をお試しください。

 AWS アカウント と AWS IoT コンソールを設定したら、以下の手順に従ってデバイスを接続し、メッセージを送信します AWS IoT Core。

**次の手順**
+ [最適なデバイスオプションを選択する](#choosing-a-gs-system)
+ [AWS IoT リソースの作成](create-iot-resources.md) (Amazon EC2 で仮想デバイスを作成しない場合)
+ [デバイスを設定する](configure-device.md)
+ [MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)

詳細については AWS IoT Core、[「 とは AWS IoT Core](what-is-aws-iot.md)」を参照してください。

## どのデバイスオプションが最適ですか?
<a name="choosing-a-gs-system"></a>

どのオプションを選択すればよいかわからない場合は、どれが最適かを判断するために、次の各オプションのメリットとデメリットのリストを役立ててください。


| オプション | これは、次の場合には、良い選択肢である場合があります。 | これは、次の場合には、良い選択肢ではない場合があります。 | 
| --- | --- | --- | 
| [Amazon EC2 を使用して仮想デバイスを作成する](creating-a-virtual-thing.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  | 
| [Windows または Linux の PC または Mac を AWS IoT デバイスとして使用する](using-laptop-as-device.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  | 
| [Raspberry Pi または他のデバイスを接続する](connecting-to-existing-device.md) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-gs-first-thing.html)  | 

# AWS IoT リソースの作成
<a name="create-iot-resources"></a>

このチュートリアルでは、デバイスがメッセージに接続 AWS IoT Core して交換するために必要な AWS IoT リソースを作成します。

![\[AWS IoT リソースの作成ページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/iot-gs-create-resources.png)


1. デバイスが AWS IoT サービスとやり取りすることを許可する AWS IoT ポリシードキュメントを作成します。

1.  AWS IoT とその X.509 デバイス証明書にモノのオブジェクトを作成し、ポリシードキュメントをアタッチします。Thing オブジェクトは、 AWS IoT レジストリ内のデバイスの仮想表現です。証明書はデバイスを に認証し AWS IoT Core、ポリシードキュメントはデバイスが とやり取りすることを許可します AWS IoT。
**注記**  
[Amazon EC2 を使用して仮想デバイスを作成する](creating-a-virtual-thing.md) を予定している場合は、このページをスキップして [デバイスを設定する](configure-device.md) に進むことができます。これらのリソースは、仮想のモノを作成するときに作成します。

このチュートリアルでは、 AWS IoT コンソールを使用して AWS IoT リソースを作成します。デバイスがウェブブラウザをサポートしている場合は、証明書ファイルをデバイスに直接ダウンロードできるため、デバイスのウェブブラウザでこの手順を実行する方が簡単な場合があります。この手順を別のコンピュータで実行する場合は、サンプルアプリケーションで証明書ファイルを使用する前に、デバイスに証明書ファイルをコピーする必要があります。

## AWS IoT ポリシーを作成する
<a name="create-iot-policy"></a>

デバイスは X.509 証明書を使用して認証します AWS IoT Core。証明書には AWS IoT ポリシーがアタッチされています。これらのポリシーは、デバイスで実行できる AWS IoT オペレーション (MQTT トピックへのサブスクライブや公開など) を決定します。デバイスは、接続してメッセージを送信するときに証明書を提示します AWS IoT Core。

サンプルプログラムを実行するために必要な AWS IoT オペレーションの実行をデバイスに許可するポリシーを作成します。後で作成するデバイス証明書にアタッチできるように、最初に AWS IoT ポリシーを作成する必要があります。

**AWS IoT ポリシーを作成するには**

1. 左のメニューの [AWS IoT コンソール](https://console.aws.amazon.com//iot/home)で、**[セキュリティ]**、**[ポリシー]** の順に選択します。

1. [**You don't have a policy yet**] (ポリシーを作成していません) ページで、[**ポリシーの作成**] を選択します。

   アカウントに既存のポリシーがある場合は、**[ポリシーを作成]** を選択します。

1. [**ポリシーの作成**] ページで、以下のステップを実行します。

   1. [**ポリシーのプロパティ**] セクションの [**プロパティ名**] フィールドにポリシーの名前 (**My\$1Iot\$1Policy** など) を入力します。ポリシー名には個人を特定できる情報を使用しないでください。

   1. [**ポリシードキュメント**] セクションで、リソースアクセスを AWS IoT Core オペレーションに対して付与または拒否するポリシーステートメントを作成します。****iot:Connect**** を実行するアクセス許可をすべてのクライアントに付与するポリシーステートメントを作成するには、次のステップに従います。
      + [**ポリシーの効果**] フィールドで [**許可**] を選択します。このポリシーが証明書にアタッチされているすべてのクライアントは、[**ポリシーアクション**] フィールドにリストされているアクションを実行できます。
      + [**ポリシーアクション**] フィールドで、****iot:Connect**** などのポリシーアクションを選択します。ポリシーアクションは、デバイスが Device SDK からサンプルプログラムを実行するときに実行するためのアクセス許可が必要なアクションです。
      + [**ポリシーリソース** フィールドにリソース、Amazon リソースネーム (ARN)、または **\$1** を入力します。任意のクライアント (デバイス) を選択する場合は、**\$1** を入力します。

      ****iot:Receive****、****iot:Publish****、および ****iot:Subscribe**** のポリシーステートメントを作成するには、**[新しいステートメントを追加]** を選択して、上記のステップを繰り返します。  
![\[ポリシーを作成するページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/gs-create-policy-new.png)
**注記**  
このクイックスタートでは、単純化のためにワイルドカード (\$1) 文字が使用されます。セキュリティを強化するには、リソースとしてワイルドカード文字の代わりにクライアント ARN を指定して、メッセージを接続して発行できるクライアント (デバイス) を制限する必要があります。クライアント ARN は、`arn:aws:iot:your-region:your-aws-account:client/my-client-id` の形式に従います。  
ただし、その ARN をポリシーに割り当てるには、まずリソース (クライアントデバイス、モノのシャドウなど) を作成する必要があります。詳細については、「[AWS IoT Core アクションリソース](https://docs.aws.amazon.com//iot/latest/developerguide/iot-action-resources.html)」を参照してください。

1. ポリシーの情報を入力した後、[**作成**] を選択します。

詳細については、「[が IAM と AWS IoT 連携する方法](security_iam_service-with-iam.md)」を参照してください。

## モノのオブジェクトを作成する
<a name="create-aws-thing"></a>

に接続されたデバイスは AWS IoT Core 、 AWS IoT レジストリ内の*モノのオブジェクト*によって表されます。モノのオブジェクトは、特定のデバイスまたは論理エンティティを表します。物理的なデバイスやセンサー (電球、または電気をつけるための壁にあるスイッチなど) は、モノとして扱うことができます。また、アプリケーションのインスタンスや、接続しないが AWS IoT接続する他のデバイス (エンジンセンサーやコントロールパネルがある車など) に関連する物理エンティティなどの論理エンティティでもかまいません。

**AWS IoT コンソールでモノを作成するには**

1. 左のメニューの [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)で、**[すべてのデバイス]**、**[モノ]** の順に選択します。

1. [**モノ**] ページで [**モノを作成する**] を選択します。

1. [**Creating things**] (モノを作成する) ページで、[**Create a single thing**] (単一のモノを作成する) を選択し、[**Next**] (次へ) を選択します。

1. [**モノのプロパティを指定する**] ページで、[**モノの名前**]に、モノの名前 (**MyIotThing** など) を入力します。

   モノ名は後で変更できないため、モノ名は慎重に選択してください。

   モノの名前を変更するには、新しいモノを作成して、新しい名前を付け、古いモノを削除する必要があります。
**注記**  
モノの名前で個人を特定できる情報を使用しないでください。モノの名前は、暗号化されていない通信やレポートに表示されることがあります。

1. このページの残りのフィールドは空のままにしておきます。[**Next**] を選びます。

1. [**デバイス証明書を構成する-*optional***] ページで [**新しい証明書を自動生成する (推奨)**] を選択します。[**Next**] を選択します。

1. [**証明書へのポリシーのアタッチ - *optional***] ページで、前のセクションで作成したポリシーを選択します。そのセクションでは、ポリシーの名前は **My\$1Iot\$1Policy** です。[**モノを作成する**] を選択します。

1. [**証明書とキーのダウンロード**] ページで:

   1. 各証明書およびキーファイルをダウンロードし、後で使用できるように保存します。これらのファイルをデバイスにインストールする必要があります。

      証明書ファイルを保存するときは、次の表に名前を付けます。これらは、後の例で使用されるファイル名です。  
**証明書ファイル名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/create-iot-resources.html)

   1. これらのファイルのルート CA ファイルをダウンロードするには、ルート CA 証明書ファイルの **[Download]** (ダウンロード) リンクをクリックします。このリンクは、使用しているデータエンドポイントと暗号スイートのタイプに対応します。このチュートリアルで、**RSA 2048 ビットキー: Amazon ルート CA 1** の右側にある [**ダウンロード**] を選択し、**RSA 2048 ビットキー: Amazon ルート CA 1** 証明書ファイルをダウンロードします。
**重要**  
このページから移動する前に、証明書ファイルを保存する必要があります。コンソールでこのページから移動すると、証明書ファイルにはアクセスできなくなります。  
このステップで作成した証明書ファイルをダウンロードし忘れた場合は、このコンソール画面を終了し、コンソールのモノのリストに移動して、作成したモノのオブジェクトを削除してから、この手順を最初からやり直す必要があります。

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

この手順を完了すると、新しいモノのオブジェクトがモノのリストに表示されます。

# デバイスを設定する
<a name="configure-device"></a>

このセクションでは、デバイスを設定して AWS IoT Coreに接続する方法について説明します。の使用を開始する AWS IoT Core が、まだデバイスがない場合は、Amazon EC2 を使用して仮想デバイスを作成するか、Windows PC または Mac を IoT デバイスとして使用できます。

試す最適なデバイスオプションを選択します AWS IoT Core。もちろん、すべてを試すこともできますが、一度に試すのは 1 つのみにしてください。どのデバイスオプションが最適かわからない場合は、[最適なデバイスオプションを選択する方法](iot-gs-first-thing.md#choosing-a-gs-system)を読んでから、このページに戻ってください。

**デバイスオプション**
+ [Amazon EC2 を使用して仮想デバイスを作成する](creating-a-virtual-thing.md)
+ [Windows または Linux の PC または Mac を AWS IoT デバイスとして使用する](using-laptop-as-device.md)
+ [Raspberry Pi または他のデバイスを接続する](connecting-to-existing-device.md)

# Amazon EC2 を使用して仮想デバイスを作成する
<a name="creating-a-virtual-thing"></a>

このチュートリアルでは、クラウドで仮想デバイスとして機能する Amazon EC2 インスタンスを作成します。

このチュートリアルを完了するには、 が必要です AWS アカウント。アカウントをお持ちではない場合、続行する前に、[セットアップ AWS アカウント](setting-up.md) に記載されている手順を完了してください。

**Topics**
+ [Amazon EC2 インスタンスをセットアップする](#set-up-ec2)
+ [Git、Node.js をインストールし、 を設定する AWS CLI](#install-git-node)
+ [仮想デバイスの AWS IoT リソースを作成する](#ec2-create-certificate)
+ [AWS IoT Device SDK for JavaScript をインストールする](#ec2-sdk)
+ [サンプルアプリケーションを実行する](#ec2-run-app)
+ [AWS IoT コンソールでサンプルアプリからのメッセージを表示する](#ec2-view-msg)

## Amazon EC2 インスタンスをセットアップする
<a name="set-up-ec2"></a>

次の手順は、物理デバイスの代わりに仮想デバイスとして機能する Amazon EC2 インスタンスを作成する方法を示しています。

これが作成する最初の Amazon EC2 インスタンスの場合、「[Amazon EC2 Linux インスタンスの開始方法](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/EC2_GetStarted.html)」を参照してください。

**インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左側のコンソールメニューから **[Instances]** (インスタンス) セクションを展開し、**[Instances]** (インスタンス) を選択します。**[Instances]** (インスタンス) ダッシュボードから、右側の **[Launch instances]** (インスタンスの起動) を選択すると、基本設定のリストが表示されます。

1. **[Name and tags]** (名前とタグ) セクションで、インスタンスの名前を入力し、オプションでタグを追加します。

1. **[Application and OS Images (Amazon Machine Image)]** (アプリケーションと OS イメージ (Amazon マシンイメージ) ) セクションで、*Amazon Linux 2 AMI (HVM)* など、インスタンス用の AMI テンプレートを選択します。この AMI が「Free tier eligible」(無料利用枠対象) としてマークされていることに注意してください。

1. **[Instance type]** (インスタンスタイプ) セクションで、インスタンスのハードウェア設定を選択できます。デフォルトで選択されている `t2.micro` タイプを選択します。このインスタンスタイプは無料利用枠の対象であることに注意してください。

1. **[Key pair (login)]** (キーペア (ログイン)) セクションでドロップダウンリストからキーペア名を選択するか、**[Create a new key pair]** (新しいキーペアの作成) を選択して新しいキーペアを作成します。新しいキーペアを作成するときは、プライベートキーファイルをダウンロードして安全な場所に保存してください。これは、ダウンロードして保存する唯一の機会だからです。インスタンスを起動する際はキーペアの名前を指定する必要があり、インスタンスに接続する際は毎回対応するプライベートキーを指定する必要があります。
**警告**  
**[Proceed without a key pair]** (キーペアオプションなしで続行) を選択しないでください。キーペアなしでインスタンスを起動すると、インスタンスに接続できません。

1. **[Network settings]** (ネットワーク設定) セクションと **[Configure storage**] (ストレージの設定) セクションでは、デフォルト設定のままでかまいません。準備ができたら、**[Launch Instances]** (インスタンスの起動) を選択します。

1. インスタンスを起動することを知らせる確認ページが表示されます。**インスタンスの表示**を選択して確認ページを閉じ、コンソールに戻ります。

1. **インスタンス**画面で、起動のステータスを確認できます。インスタンスの起動には短時間かかります。インスタンスを起動すると、その初期状態は `pending` です。インスタンスがスタートすると、その状態は `running` に変わり、公開 DNS 名を受け取ります。(**公開 DNS (IPv4)** 列が非表示の場合は、ページの右上隅にある **列の表示 / 非表示** (歯車のシェープをしたアイコン) を選択してから、**公開 DNS (IPv4)** を選択します。)

1. インスタンスが接続できるようになるまで、インスタンスの準備が整うまでに数分かかる場合があります。インスタンスのステータスチェックが正常に終了したことを確認してください。この情報は [**Status Checks**] 列で確認できます。

   新しいインスタンスがステータスチェックに合格したら、次の手順に進み、それに接続します。

**インスタンスに接続するには**

Amazon EC2 コンソールからインスタンスを選択し、Amazon EC2 Instance Connect を使用して接続することを選択することにより、ブラウザベースのクライアントを使用してインスタンスに接続できます。Instance Connect はアクセス許可を処理し、正常な接続を提供します。

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. 左のメニューで、**[Instances]** (インスタンス) を選択します。

1. インスタンスを選択し、[**接続**] を選択してください。

1. **[Amazon EC2 Instance Connect]**、**[Connect]** (接続) を選択します。

これで、新しい Amazon EC2 インスタンスにログインする **Amazon EC2 Instance Connect** ウィンドウができたはずです。

## Git、Node.js をインストールし、 を設定する AWS CLI
<a name="install-git-node"></a>

このセクションでは、Git と Node.js を Linux インスタンスにインストールします。

**Git をインストールするには**

1. **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドを使用してインスタンスを更新します。

   ```
   sudo yum update -y
   ```

1. **Amazon EC2 Instance Connect**ウィンドウで、次のコマンドを使用して Git をインストールします。

   ```
   sudo yum install git -y
   ```

1. Git がインストールされているかどうか、および Git の現在のバージョンを確認するには、次のコマンドを実行します。

   ```
   git --version
   ```

**Node.js をインストールするには**

1. **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドを使用してノードバージョンマネージャー (nvm) をインストールします。

   ```
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
   ```

   nvm では Node.js の複数のバージョンをインストールすることができ、またそれらの切り替えもできるため、nvm を使用して Node.js をインストールします。

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンドを使用して nvm を有効にします。

   ```
   . ~/.nvm/nvm.sh
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンドを使用して、nvm を使用し、最新バージョンの Node.js をインストールします。

   ```
   nvm install 16
   ```
**注記**  
Node.js の最新の LTS リリースがインストールされます。

   Node.js をインストールすると、Node Package Manager (npm) もインストールされるため、必要に応じて追加のモジュールをインストールできます。

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンドを使用して、その Node.js がインストールされ、正しく実行されていることをテストします。

   ```
   node -e "console.log('Running Node.js ' + process.version)"
   ```

    このチュートリアルでは Node v10.0 以降が必要です。詳細については、「[チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)」を参照してください。

**を設定するには AWS CLI**

Amazon EC2 インスタンスには、 AWS CLIがプリロードされています。ただし、 AWS CLI プロファイルを完了する必要があります。CLI の設定方法の詳細については、「[AWS CLIの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)」を参照してください。

1. 次の例は、サンプル値を示しています。それらを自分の値に置き換えます。これらの値は、[AWS コンソールの **[My Security Credentials]** (セキュリティ認証情報) の下のアカウント情報](https://console.aws.amazon.com//iam/home#/security_credentials)で確認できます。

   **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドを入力します。

   ```
   aws configure
   ```

   その後、表示されるプロンプトでアカウントの値を入力します。

   ```
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

1. 次のコマンドを使用して AWS CLI 設定をテストできます。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   が正しく設定されている場合、 コマンド AWS CLI は からエンドポイントアドレスを返す必要があります AWS アカウント。

## 仮想デバイスの AWS IoT リソースを作成する
<a name="ec2-create-certificate"></a>

このセクションでは、 を使用してモノのオブジェクトとその証明書ファイルを仮想デバイスに直接 AWS CLI 作成する方法について説明します。これは、別のコンピュータからデバイスにコピーすることで生じる可能性のある複雑さを避けるために、デバイス上で直接行われます。このセクションでは、仮想デバイス用に次のリソースを作成します。
+ 仮想デバイスを表すモノのオブジェクト AWS IoT。
+ 仮想デバイスを認証するための証明書。
+ 仮想デバイスが AWS IoTに接続し、メッセージを発行、受信、およびサブスクライブすることを許可するポリシードキュメント。

**Linux インスタンスで AWS IoT モノのオブジェクトを作成するには**

に接続されたデバイスは AWS IoT 、 AWS IoT レジストリ内の*モノのオブジェクト*によって表されます。*モノのオブジェクト*は、特定のデバイスまたは論理エンティティを表します。この場合、*モノのオブジェクト*は仮想デバイス、つまりこの Amazon EC2 インスタンスを表します。

1. **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドを実行してモノのオブジェクトを作成します。

   ```
   aws iot create-thing --thing-name "MyIotThing"
   ```

1. JSON レスポンスは以下のようになります。

   ```
   {
       "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", 
       "thingName": "MyIotThing",
       "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE"
   }
   ```

**Linux インスタンスで AWS IoT キーと証明書を作成してアタッチするには**

**[create-keys-and-certificate](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/create-keys-and-certificate.html)** コマンドを実行すると、Amazon ルート認証局によって署名されたクライアント証明書が作成されます。この証明書は、仮想デバイスの ID を認証するために使用されます。

1. **Amazon EC2 Instance Connect**ウィンドウで、証明書とキーファイルを保存するディレクトリを作成します。

   ```
   mkdir ~/certs
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンドを使用して、Amazon 認証機関 (CA) 証明書のコピーをダウンロードします。

   ```
   curl -o ~/certs/Amazon-root-CA-1.pem \
       https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドを実行して、プライベートキー、パブリックキー、および X.509 証明書ファイルを作成します。このコマンドは、証明書を に登録してアクティブ化します AWS IoT。

   ```
   aws iot create-keys-and-certificate \
       --set-as-active \
       --certificate-pem-outfile "~/certs/device.pem.crt" \
       --public-key-outfile "~/certs/public.pem.key" \
       --private-key-outfile "~/certs/private.pem.key"
   ```

   レスポンスは次のようになります。`certificateArn` を保存して、後続のコマンドで使用できるようにします。証明書をモノにアタッチし、後の手順で証明書にポリシーをアタッチするには、この証明書が必要になります。

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2",
       "certificatePem": "
   -----BEGIN CERTIFICATE-----
   MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
   VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
   b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
   BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN
   MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD
   VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z
   b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt
   YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE
   EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
   rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
   Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
   nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
   FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb
   NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE=
   -----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、次のコマンドと、前のコマンドからの応答に含まれている *certificateArn* を使用して、作成したばかりの証明書にモノのオブジェクトをアタッチします。

   ```
   aws iot attach-thing-principal \
       --thing-name "MyIotThing" \
       --principal "certificateArn"
   ```

   成功した場合、このコマンドは出力を表示しません。

**ポリシーを作成してアタッチするには**

1. **Amazon EC2 Instance Connect**ウィンドウで、このポリシードキュメントをコピーして **\$1/policy.json**という名前のファイルに貼り付け、ポリシーファイルを作成します。

   お気に入りの Linux エディタがなければ、このコマンドを使用して **nano** を開くことができます。

   ```
   nano ~/policy.json
   ```

   その中に `policy.json` のポリシードキュメントを貼り付けます。ctrl-x で **nano** エディタを終了し、ファイルを保存します。

   `policy.json` のポリシードキュメントの内容。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Receive",
                   "iot:Connect"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

1. **Amazon EC2 Instance Connect **ウィンドウで、次のコマンドを使用してポリシーを作成します。

   ```
   aws iot create-policy \
       --policy-name "MyIotThingPolicy" \
       --policy-document "file://~/policy.json"
   ```

   出力:  
****  

   ```
   {
       "policyName": "MyIotThingPolicy",
       "policyArn": "arn:aws:iot:us-east-1:your-aws-account:policy/MyIotThingPolicy",
       "policyDocument": "{
           \"Version\": \"2012-10-17\",
           \"Statement\": [
               {
                   \"Effect\": \"Allow\",
                   \"Action\": [
                       \"iot:Publish\",
                       \"iot:Receive\",
                       \"iot:Subscribe\",
                       \"iot:Connect\"
                   ],
                   \"Resource\": [
                       \"*\"
                   ]
           }
           ]
       }",
       "policyVersionId": "1"
   }
   ```

1. **Amazon EC2 Instance Connect**ウィンドウで、次のコマンドを使用して、仮想デバイスの証明書にポリシーをアタッチします。

   ```
   aws iot attach-policy \
       --policy-name "MyIotThingPolicy" \
       --target "certificateArn"
   ```

   成功した場合、このコマンドは出力を表示しません。

## AWS IoT Device SDK for JavaScript をインストールする
<a name="ec2-sdk"></a>

このセクションでは、 AWS IoT Device SDK for JavaScript をインストールします。これには、アプリケーションが AWS IoT およびサンプルプログラムとの通信に使用できるコードが含まれています。詳細については、「[AWS IoT Device SDK for JavaScript GitHub repository](https://github.com/aws/aws-iot-device-sdk-js-v2)」(Device SDK for JavaScript GitHub リポジトリ) を参照してください。

**Linux インスタンスに AWS IoT Device SDK for JavaScript をインストールするには**

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンドを使用して AWS IoT Device SDK for JavaScript リポジトリをホーム`aws-iot-device-sdk-js-v2`ディレクトリの ディレクトリにクローンします。

   ```
   cd ~
   git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
   ```

1. 前のステップで作成した `aws-iot-device-sdk-js-v2` ディレクトリに移動します。

   ```
   cd aws-iot-device-sdk-js-v2
   ```

1. npm を使用して SDK をインストールします。

   ```
   npm install
   ```

## サンプルアプリケーションを実行する
<a name="ec2-run-app"></a>

 次のセクションのコマンドは、次の表に示すように、キーおよび証明書ファイルがご利用の仮想デバイスに保存されていることを前提としています。


**証明書ファイル名**  

|  ファイル  |  ファイルパス  | 
| --- | --- | 
|  プライベートキー  |  `~/certs/private.pem.key`  | 
|  デバイス証明書  |  `~/certs/device.pem.crt`  | 
|  ルート CA 証明書  |  `~/certs/Amazon-root-CA-1.pem`  | 

このセクションでは、 AWS IoT Device SDK for JavaScript の `aws-iot-device-sdk-js-v2/samples/node` ディレクトリにある`pub-sub.js`サンプルアプリケーションをインストールして実行します。このアプリケーションは、デバイス (Amazon EC2 インスタンス) が MQTT ライブラリを使用して MQTT メッセージを発行およびサブスクライブする方法を示します。`pub-sub.js` サンプルアプリケーションは、トピック、`topic_1` をサブスクライブし、そのトピックに対して 10 個のメッセージを発行し、メッセージブローカーから受信したメッセージを表示します。

**サンプルアプリケーションをインストールして実行するには**

1. **Amazon EC2 Instance Connect** ウィンドウで、SDK が作成した `aws-iot-device-sdk-js-v2/samples/node/pub_sub` ディレクトリに移動し、これらのコマンドを使用してサンプルアプリケーションをインストールします。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、このコマンド AWS IoT を使用して から *your-iot-endpoint* を取得します。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

1. **Amazon EC2 Instance Connect** ウィンドウで、示されているように *your-iot-endpoint* を挿入し、このコマンドを実行します。

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

サンプルアプリケーション:

1.  AWS IoT Core アカウントの に接続します。

1. メッセージトピック **topic\$11** をサブスクライブし、そのトピックで受信したメッセージを表示します。

1. 10 個のメッセージをトピック、**topic\$11** に発行します。

1. 次のような出力を表示します。

   ```
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":1}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":2}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":3}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":4}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":5}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":6}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":7}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":8}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":9}
   Publish received. topic:"topic_1" dup:false qos:1 retain:false
   {"message":"Hello world!","sequence":10}
   ```

サンプルアプリケーションの実行に問題がある場合は、[サンプルアプリケーションの問題をトラブルシューティングする](gs-device-troubleshoot.md) を確認してください。

コマンドラインに `--verbosity debug` パラメータを追加して、サンプルアプリケーションが実行内容に関する詳細なメッセージを表示するようにすることもできます。この情報は、問題の修正に役立つ場合があります。

## AWS IoT コンソールでサンプルアプリからのメッセージを表示する
<a name="ec2-view-msg"></a>

**AWS IoT コンソール**の**MQTT テストクライアント**を使用することで、サンプルアプリケーションメッセージがメッセージブローカーを通過するときにそれらを見ることができます。

**サンプルアプリケーションによって発行された MQTT メッセージを表示するには**

1. 確認[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)。これは、**AWS IoT コンソール**で **MQTT テストクライアント**を使用して、メッセージブローカーを通過する MQTT メッセージを表示する方法を学ぶのに役立ちます。

1. **AWS IoT コンソール**で **MQTT テストクライアント**を開きます。

1. 「**トピックへのサブスクライブ**」で、「**topic\$11**」というトピックをサブスクライブします。

1. **Amazon EC2 Instance Connect** ウィンドウで、サンプルアプリケーションを再度実行し、**AWS IoT コンソール**の **MQTT テストクライアント**のメッセージを確認します。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

MQTT と がプロトコル AWS IoT Core をサポートする方法の詳細については、[「MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)」を参照してください。

# Windows または Linux の PC または Mac を AWS IoT デバイスとして使用する
<a name="using-laptop-as-device"></a>

このチュートリアルでは、 で使用するパーソナルコンピュータを設定します AWS IoT。これらの手順は、Windows および Linux の PC および Mac をサポートしています。これを行うには、コンピュータにソフトウェアをインストールする必要があります。コンピュータにソフトウェアをインストールしたくない場合は、すべてのソフトウェアを仮想マシンにインストールする [Amazon EC2 を使用して仮想デバイスを作成する](creating-a-virtual-thing.md) を試すことができます。

**Topics**
+ [パーソナルコンピュータを設定する](#gs-pc-prereqs)
+ [Git、Python、および AWS IoT Device SDK for Python のインストール](#gs-pc-sdk-node)
+ [ポリシーを設定し、サンプルアプリケーションを実行する](#gs-pc-python-app-run)
+ [AWS IoT コンソールでサンプルアプリからのメッセージを表示する](#gs-pc-view-msg)
+ [Python で共有サブスクリプションのサンプルを実行する](#gs-pc-shared-subscription-example)

## パーソナルコンピュータを設定する
<a name="gs-pc-prereqs"></a>

このチュートリアルを完了するには、インターネットに接続した Windows もしくは Linux PC または Mac が必要です。

次のステップに進む前に、コンピュータでコマンドラインウィンドウを開くことができることを確認してください。Windows PC で **cmd.exe** を使用します。Linux PC または Mac では、**Terminal** を使用します。

## Git、Python、および AWS IoT Device SDK for Python のインストール
<a name="gs-pc-sdk-node"></a>

このセクションでは、Python と AWS IoT Device SDK for Python をコンピュータにインストールします。

### Git と Python の最新バージョンをインストールする
<a name="gs-pc-node-runtime"></a>

この手順では、最新バージョンの Git と Python をパーソナルコンピュータにインストールする方法について説明します。

**Git と Python をダウンロードしてコンピュータにインストールするには**

1. Git がコンピュータにインストールされているかどうかを確認します。このコマンドをコマンドラインに入力します。

   ```
   git --version
   ```

   コマンドが Git バージョンを表示する場合は、Git がインストールされており、次のステップに進むことができます。

   コマンドがエラーを表示する場合は、[https://git-scm.com/download](https://git-scm.com/download)を開いてコンピュータに Git をインストールします。

1. Python が既にインストールされているかどうかを確認します。このコマンドをコマンドラインに入力します。

   ```
   python -V
   ```
**注記**  
このコマンドがエラー `Python was not found` を表示する場合、オペレーティングシステムが Python v3.x 実行可能ファイルを `Python3` として呼び出していることが原因である可能性があります。その場合は、`python` のすべてのインスタンスを `python3` に置き換えて、このチュートリアルの残りの部分を続行してください。

   コマンドが Python のバージョンを表示する場合、Python は既にインストールされています。このチュートリアルには、Python v3.7 以降が必要です。

1. Python がインストールされている場合は、このセクションの残りの手順を省略できます。インストールされていない場合は、続行します。

1. [https://www.python.org/downloads/](https://www.python.org/downloads/) を開き、コンピュータ用のインストーラをダウンロードします。

1. ダウンロードが自動的にインストールを開始しなかった場合は、ダウンロードしたプログラムを実行して Python をインストールします。

1. Python のインストールを確認します。

   ```
   python -V
   ```

   コマンドが Python バージョンを表示することを確認します。Python のバージョンが表示されない場合は、再度 Python をダウンロードしてインストールしてください。

### AWS IoT Device SDK for Python のインストール
<a name="gs-pc-python-intall-sdk"></a>

**Device AWS IoT SDK for Python をコンピュータにインストールするには**

1.  AWS IoT Device SDK for Python の v2 をインストールします。

   ```
   python3 -m pip install awsiotsdk
   ```

1.  AWS IoT Device SDK for Python リポジトリをホームディレクトリの aws-iot-device-sdk-python-v2 ディレクトリにクローンします。この手順は、*ホーム*としてインストールするファイルのベースディレクトリを参照しています。

   *ホーム*ディレクトリの実際の場所は、オペレーティングシステムによって異なります。

------
#### [ Linux/macOS ]

   macOS および Linux では、*ホーム*ディレクトリは `~` です。

   ```
   cd ~ 
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ Windows ]

   Windows では、 `cmd`ウィンドウでこのコマンドを実行すると、*ホーム*ディレクトリパスを見つけることができます。

   ```
   echo %USERPROFILE%
   cd %USERPROFILE%
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
**注記**  
**cmd.exe** ではなく Windows PowerShell を使用している場合は、次のコマンドを使用します。  

   ```
   echo $home
   ```

詳細については、「[AWS IoT Device SDK for JavaScript GitHub repository](https://github.com/aws/aws-iot-device-sdk-python-v2)」(Device SDK for JavaScript GitHub リポジトリ) を参照してください。

### サンプルアプリケーションの実行を準備する
<a name="gs-pc-python-config-app"></a>

**サンプルアプリケーションを実行するためにシステムを準備するには**
+ `certs` ディレクトリを作成します。`certs` でモノのオブジェクトを作成および登録したときに保存したプライベートキー、デバイス証明書、およびルート CA 証明書ファイルを [AWS IoT リソースの作成](create-iot-resources.md) ディレクトリにコピーします。送信先ディレクトリ内の各ファイルのファイル名は、テーブル内のファイル名と一致する必要があります。

   次のセクションのコマンドは、次の表に示すように、キーおよび証明書ファイルがデバイスに保存されていることを前提としています。

------
#### [ Linux/macOS ]

  このコマンドを実行して、`certs` サブディレクトリを作成します。このサブディレクトリは、サンプルアプリケーションの実行に使用します。

  ```
  mkdir ~/certs
  ```

  新しいサブディレクトリの、次の表に示す送信先ファイルのパスにファイルをコピーします。  
**証明書ファイル名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/using-laptop-as-device.html)

  このコマンドを実行して、`certs` ディレクトリ内のファイルを一覧表示し、それらを表に一覧表示されているファイルと比較します。

  ```
  ls -l ~/certs
  ```

------
#### [ Windows ]

  このコマンドを実行して、`certs` サブディレクトリを作成します。このサブディレクトリは、サンプルアプリケーションの実行に使用します。

  ```
  mkdir %USERPROFILE%\certs
  ```

  新しいサブディレクトリの、次の表に示す送信先ファイルのパスにファイルをコピーします。  
**証明書ファイル名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/using-laptop-as-device.html)

  このコマンドを実行して、`certs` ディレクトリ内のファイルを一覧表示し、それらを表に一覧表示されているファイルと比較します。

  ```
  dir %USERPROFILE%\certs
  ```

------

## ポリシーを設定し、サンプルアプリケーションを実行する
<a name="gs-pc-python-app-run"></a>

このセクションでは、ポリシーを設定し、 AWS IoT Device SDK for Pythonの `aws-iot-device-sdk-python-v2/samples` ディレクトリにある `pubsub.py` サンプルスクリプトを実行します。このスクリプトは、デバイスが MQTT ライブラリを使用して MQTT メッセージを発行およびサブスクライブする方法を示します。

`pubsub.py`サンプルアプリケーションは、トピック、`test/topic` をサブスクライブし、そのトピックに対して10 個のメッセージを発行し、メッセージブローカーから受信したメッセージを表示します。

`pubsub.py` サンプルスクリプトを実行するには、次の情報が必要です。


**アプリケーションパラメータ値**  

|  Parameter  |  値がある場所  | 
| --- | --- | 
| your-iot-endpoint |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/using-laptop-as-device.html)  | 

*your-iot-endpoint* 値の形式は `endpoint_id-ats.iot.region.amazonaws.com` です (例: `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`)。

スクリプトを実行する前に、モノのポリシーが、接続、サブスクライブ、発行、および受信するためのアクセス許可をサンプルスクリプトに提供していることを確認してください。

**モノのリソースのポリシードキュメントを検索して確認するには**

1. [AWS IoT コンソール](https://console.aws.amazon.com//iot/home#/thinghub)の **[Things]** (モノ) リストで、デバイスを表すモノのリソースを検索します。

1. デバイスを表すモノのリソースの **[Name]** (名前) リンクを選択して、**[Thing details]** (モノの詳細) ページを開きます。

1. **[Thing details]** (モノの詳細) ページの **[Certificates]** (証明書) タブで、モノのリソースにアタッチされている証明書を選択します。リストに含まれる証明書は 1 つだけにする必要があります。複数の証明書がある場合は、デバイスにインストールされているファイルを含み、そのファイルが AWS IoT Coreへの接続に使用される証明書を選択します。

   **[Certificate]** (証明書) 詳細ページの **[Policies]** (ポリシー) タブで、証明書にアタッチされているポリシーを選択します。1 つだけにする必要があります。複数のポリシーがある場合は、それぞれについて次の手順を繰り返して、少なくとも 1 つのポリシーで必要なアクセスが許可されていることを確認します。

1. **[Policy]** (ポリシー) 概要ページで、JSON エディタを検索し、**[Edit policy document]** (ポリシードキュメントの編集) を選択して、必要に応じてポリシードキュメントを確認および編集します。

1. 次の例では、ポリシー JSON が表示されます。`"Resource"` 要素で、 を各`Resource`値の AWS アカウント AWS リージョン と `region:account`に置き換えます。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Publish",
                   "iot:Receive"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topic/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Subscribe"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:topicfilter/test/topic"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iot:Connect"
               ],
               "Resource": [
               "arn:aws:iot:us-east-1:123456789012:client/test-*"
               ]
           }
       ]
   }
   ```

------
#### [ Linux/macOS ]

**Linux/macOS でサンプルスクリプトを実行するには**

1. コマンドラインウィンドウで、SDK がこれらのコマンドを使用して作成した `~/aws-iot-device-sdk-python-v2/samples/node/pub_sub` ディレクトリに移動します。

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. コマンドラインウィンドウに示されているように、*your-iot-endpoint* を置き換えて、このコマンドを実行します。

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key
   ```

------
#### [ Windows ]

**Windows PC でサンプルアプリケーションを実行するには**

1. コマンドラインウィンドウで、SDK が作成した `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` ディレクトリに移動し、これらのコマンドを使用してサンプルアプリケーションをインストールします。

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   ```

1. コマンドラインウィンドウに示されているように、*your-iot-endpoint* を置き換えて、このコマンドを実行します。

   ```
   python3 pubsub.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key
   ```

------

サンプルスクリプト:

1.  AWS IoT Core アカウントの に接続します。

1. メッセージトピックの **test/topic** をサブスクライブし、そのトピックで受信したメッセージを表示します。

1. トピック **test/topic** に 10 個のメッセージを発行します。

1. 次のような出力を表示します。

```
Connected!
Subscribing to topic 'test/topic'...
Subscribed with QoS.AT_LEAST_ONCE
Sending 10 message(s)
Publishing message to topic 'test/topic': Hello World! [1]
Received message from topic 'test/topic': b'"Hello World! [1]"'
Publishing message to topic 'test/topic': Hello World! [2]
Received message from topic 'test/topic': b'"Hello World! [2]"'
Publishing message to topic 'test/topic': Hello World! [3]
Received message from topic 'test/topic': b'"Hello World! [3]"'
Publishing message to topic 'test/topic': Hello World! [4]
Received message from topic 'test/topic': b'"Hello World! [4]"'
Publishing message to topic 'test/topic': Hello World! [5]
Received message from topic 'test/topic': b'"Hello World! [5]"'
Publishing message to topic 'test/topic': Hello World! [6]
Received message from topic 'test/topic': b'"Hello World! [6]"'
Publishing message to topic 'test/topic': Hello World! [7]
Received message from topic 'test/topic': b'"Hello World! [7]"'
Publishing message to topic 'test/topic': Hello World! [8]
Received message from topic 'test/topic': b'"Hello World! [8]"'
Publishing message to topic 'test/topic': Hello World! [9]
Received message from topic 'test/topic': b'"Hello World! [9]"'
Publishing message to topic 'test/topic': Hello World! [10]
Received message from topic 'test/topic': b'"Hello World! [10]"'
10 message(s) received.
Disconnecting...
Disconnected!
```

サンプルアプリケーションの実行に問題がある場合は、[サンプルアプリケーションの問題をトラブルシューティングする](gs-device-troubleshoot.md) を確認してください。

コマンドラインに `--verbosity Debug` パラメータを追加して、サンプルアプリケーションが実行内容に関する詳細なメッセージを表示するようにすることもできます。この情報は、問題の修正に役立ちます。

## AWS IoT コンソールでサンプルアプリからのメッセージを表示する
<a name="gs-pc-view-msg"></a>

**AWS IoT コンソール**の**MQTT テストクライアント**を使用することで、サンプルアプリケーションメッセージがメッセージブローカーを通過するときにそれらを見ることができます。

**サンプルアプリケーションによって発行された MQTT メッセージを表示するには**

1. 確認[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)。これは、**AWS IoT コンソール**で **MQTT テストクライアント**を使用して、メッセージブローカーを通過する MQTT メッセージを表示する方法を学ぶのに役立ちます。

1. **AWS IoT コンソール**で **MQTT テストクライアント**を開きます。

1. 「**トピックへのサブスクライブ**」で、トピック、「**テスト/トピック**」をサブスクライブします。

1. コマンドラインウィンドウで、サンプルアプリケーションを再度実行し、**AWS IoT コンソール**の **MQTT クライアント**でメッセージを確認します。

------
#### [ Linux/macOS ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic test/topic --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------
#### [ Windows ]

   ```
   cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
   python3 pubsub.py --topic test/topic --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --endpoint your-iot-endpoint
   ```

------

MQTT と がプロトコル AWS IoT Core をサポートする方法の詳細については、[「MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html)」を参照してください。

## Python で共有サブスクリプションのサンプルを実行する
<a name="gs-pc-shared-subscription-example"></a>

AWS IoT Core は、MQTT 3 と MQTT 5 の両方[の共有サブスクリプション](mqtt.md#mqtt5-shared-subscription)をサポートしています。共有サブスクリプションを使用すると、1 つのトピックへのサブスクリプションを複数のクライアントで共有できますが、そのトピックに公開されたメッセージをランダム配信を使って受信できるのは 1 つのクライアントのみです。共有サブスクリプションを使用するには、クライアントで共有サブスクリプションの[トピックフィルター](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters): `$share/{ShareName}/{TopicFilter}` をサブスクライブします。

**ポリシーを設定し、共有サブスクリプションのサンプルを実行するには**

1. 共有サブスクリプションのサンプルを実行するには、「[MQTT 5 共有サブスクリプション](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription)」に記載されているようにモノのポリシーを設定する必要があります。

1. 共有サブスクリプションのサンプルを実行するには、次のコマンドを実行します。

------
#### [ Linux/macOS ]

**Linux/macOS でサンプルスクリプトを実行するには**

   1. コマンドラインウィンドウで、SDK がこれらのコマンドを使用して作成した `~/aws-iot-device-sdk-python-v2/samples` ディレクトリに移動します。

      ```
      cd ~/aws-iot-device-sdk-python-v2/samples
      ```

   1. コマンドラインウィンドウに示されているように、*your-iot-endpoint* を置き換えて、このコマンドを実行します。

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --group_identifier consumer
      ```

------
#### [ Windows ]

**Windows PC でサンプルアプリケーションを実行するには**

   1. コマンドラインウィンドウで、SDK が作成した `%USERPROFILE%\aws-iot-device-sdk-python-v2\samples` ディレクトリに移動し、これらのコマンドを使用してサンプルアプリケーションをインストールします。

      ```
      cd %USERPROFILE%\aws-iot-device-sdk-python-v2\samples
      ```

   1. コマンドラインウィンドウに示されているように、*your-iot-endpoint* を置き換えて、このコマンドを実行します。

      ```
      python3 mqtt5_shared_subscription.py --endpoint your-iot-endpoint --ca_file %USERPROFILE%\certs\Amazon-root-CA-1.pem --cert %USERPROFILE%\certs\device.pem.crt --key %USERPROFILE%\certs\private.pem.key --group_identifier consumer
      ```

------
**注記**  
オプションとして、必要に応じ、サンプルを実行する際にグループ識別子を指定できます (例: `--group_identifier consumer`)。グループ識別子を指定しなかった場合、`python-sample` がデフォルトのグループ識別子です。

1. コマンドラインの出力は次のようになります。

   ```
   Publisher]: Lifecycle Connection Success
   [Publisher]: Connected
   Subscriber One]: Lifecycle Connection Success
   [Subscriber One]: Connected
   Subscriber Two]: Lifecycle Connection Success
   [Subscriber Two]: Connected
   [Subscriber One]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Subscriber Two]: Subscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full subscribed topic is: '$share/consumer/test/topic' with SubAck code: [<SubackReasonCode.GRANTED_QOS_1: 1>]
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [1]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [2]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [3]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [4]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [5]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [6]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [7]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [8]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber Two] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [9]"'
   [Publisher]: Sent publish and got PubAck code: <PubackReasonCode.SUCCESS: 0>
   [Subscriber One] Received a publish
           Publish received message on topic: test/topic
           Message: b'"Hello World!  [10]"'
   [Subscriber One]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber One]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code: [<UnsubackReasonCode.SUCCESS: 0>]
   [Subscriber Two]: Unsubscribed to topic 'test/topic' in shared subscription group 'consumer'.
   [Subscriber Two]: Full unsubscribed topic is: '$share/consumer/test/topic' with UnsubAck code [<UnsubackReasonCode.SUCCESS: 0>]
   Publisher]: Lifecycle Disconnected
   [Publisher]: Lifecycle Stopped
   [Publisher]: Fully stopped
   Subscriber One]: Lifecycle Disconnected
   [Subscriber One]: Lifecycle Stopped
   [Subscriber One]: Fully stopped
   Subscriber Two]: Lifecycle Disconnected
   [Subscriber Two]: Lifecycle Stopped
   [Subscriber Two]: Fully stopped
   Complete!
   ```

1. **AWS IoT コンソール**で **[MQTT テストクライアント]** を開きます。**[トピックをサブスクライブする]** で、次のような共有サブスクリプションのトピックをサブスクライブします: `$share/consumer/test/topic` 必要に応じて、サンプルを実行する際にグループ識別子を指定できます (例: `--group_identifier consumer`)。グループ識別子を指定しなかった場合、デフォルト値は `python-sample` です。詳細については、「[MQTT 5 共有サブスクリプション Python サンプル](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/mqtt5_shared_subscription.md#mqtt5-shared-subscription)」と「AWS IoT Core 開発者ガイド」の「[共有サブスクリプション](mqtt.md#mqtt5-shared-subscription)」を参照してください。

   コマンドラインウィンドウで、サンプルアプリケーションを再度実行し、**AWS IoT コンソール**の **[MQTT テストクライアント]** でメッセージの配信を確認します。  
![\[共有サブスクリプションの出力ページ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/shared-subscription-output.png)

# Raspberry Pi または他のデバイスを接続する
<a name="connecting-to-existing-device"></a>

このセクションでは、 で使用する Raspberry Pi を設定します AWS IoT。接続したい別のデバイスがある場合、Raspberry Pi の手順には、これらの指示をデバイスに合わせて適用するのに役立つ参照先が含まれています。

通常、この処理には約 20 分かかりますが、システムソフトウェアのアップグレードが多数ある場合は、インストールにより長い時間を要する場合があります。

**Topics**
+ [デバイスをセットアップする](#gs-device-prereqs)
+ [AWS IoT Device SDK に必要なツールとライブラリをインストールする](#gs-device-sdk-tools)
+ [AWS IoT Device SDK のインストール](#gs-device-install-sdk)
+ [サンプルアプリケーションをインストールして実行する](#gs-device-node-app-run)
+ [AWS IoT コンソールでサンプルアプリからのメッセージを表示する](#gs-device-view-msg)

**重要**  
これらの指示を他のデバイスやオペレーティングシステムに合わせて適用するのが難しい場合があります。これらの指示を解釈してご利用のデバイスに適用するには、そのデバイスを十分に理解する必要があります。  
デバイスの設定中に問題が発生した場合は AWS IoT、 [Amazon EC2 を使用して仮想デバイスを作成する](creating-a-virtual-thing.md)や などの他のデバイスオプションのいずれかを代わりに試すことができます[Windows または Linux の PC または Mac を AWS IoT デバイスとして使用する](using-laptop-as-device.md)。

## デバイスをセットアップする
<a name="gs-device-prereqs"></a>

このステップの目的は、オペレーティングシステム (OS) を起動し、インターネットに接続し、コマンドラインインターフェイスでデバイスを操作できるようにデバイスを設定するために必要なものを用意することです。

このチュートリアルを完了するには、以下が必要です。
+  AWS アカウント。アカウントをお持ちではない場合、続行する前に、[セットアップ AWS アカウント](setting-up.md) に記載されている手順を完了してください。
+ [Raspberry Pi 3 モデル B](https://www.raspberrypi.com/products/) 以降の最新のモデル。これは、Raspberry Pi の以前のバージョンで動作する可能性がありますが、テストされていません。
+ [Raspberry Pi OS (32 ビット)](https://www.raspberrypi.com/software/operating-systems/)または、それ以降。Raspberry Pi OS の最新バージョンを使用することをお勧めします。以前のバージョンの OS は動作する可能性がありますが、テストされていません。

  この例を実行するために、グラフィカルユーザーインターフェイス (GUI) でデスクトップをインストールする必要はありません。ただし、Raspberry Pi を初めて使用し、Raspberry Pi ハードウェアがサポートしている場合は、デスクトップを GUI で使用する方が簡単です。
+ イーサネットまたは WiFi 接続。
+ キーボード、マウス、モニタ、ケーブル、電源装置、およびデバイスに必要なその他のハードウェア。

**重要**  
次のステップに進む前に、デバイスにオペレーティングシステムがインストール、設定、および実行されている必要があります。デバイスはインターネットに接続されていなければなりません。また、コマンドラインインターフェイスを使用してデバイスにアクセスできる必要があります。コマンドラインアクセスは、直接接続されたキーボード、マウス、モニタを介して、または SSH ターミナルリモートインターフェイスを使用して行うことができます。

 グラフィカルユーザーインターフェイス (GUI) を備えた Raspberry Pi 上でオペレーティングシステムを実行している場合は、デバイス上でターミナルウィンドウを開き、そのウィンドウで以下の手順を実行します。それ以外の場合であって、PuTTY などのリモートターミナルを使用してデバイスに接続するときは、デバイスへのリモートターミナルを開いてそれを使用します。

## AWS IoT Device SDK に必要なツールとライブラリをインストールする
<a name="gs-device-sdk-tools"></a>

 AWS IoT Device SDK とサンプルコードをインストールする前に、システムが最新であり、SDKs をインストールするために必要なツールとライブラリがあることを確認してください。

1. 

**オペレーティングシステムを更新し、必要なライブラリをインストールします。**  
 AWS IoT Device SDK をインストールする前に、デバイスのターミナルウィンドウでこれらのコマンドを実行してオペレーティングシステムを更新し、必要なライブラリをインストールします。

   ```
   sudo apt-get update
   ```

   ```
   sudo apt-get upgrade
   ```

   ```
   sudo apt-get install cmake
   ```

   ```
   sudo apt-get install libssl-dev
   ```

1. 

**Git をインストールする**  
デバイスのオペレーティングシステムに Git がインストールされていない場合は、インストールして AWS IoT Device SDK for JavaScript をインストールする必要があります。

   1. Git が既にインストールされているかどうかを確認するために、このコマンドを実行してテストします。

      ```
      git --version
      ```

   1. 前のコマンドで Git バージョンが返された場合、Git は既にインストールされており、ステップ 3 に進むことができます。

   1. **git** コマンドを実行するとエラーが表示される場合は、このコマンドを実行して Git をインストールします。

      ```
      sudo apt-get install git
      ```

   1. このコマンドを実行して、Git がインストールされているかどうかをもう一度テストします。

      ```
      git --version
      ```

   1. Git がインストール済みである場合は、次のセクションに進みます。インストールされていない場合は、トラブルシューティングを行い、エラーを修正してから続行します。 AWS IoT Device SDK for JavaScript をインストールするには、Git が必要です。

## AWS IoT Device SDK のインストール
<a name="gs-device-install-sdk"></a>

 AWS IoT Device SDK をインストールします。

------
#### [ Python ]

このセクションでは、Python、その開発ツール、および AWS IoT Device SDK for Python をデバイスにインストールします。これらの手順は、最新の Raspberry Pi OS を実行する Raspberry Pi を対象としています。別のデバイスをお持ちの場合、または別のオペレーティングシステムを使用している場合は、これらの手順をデバイスに合わせて調整する必要があります。

1. 

**Python およびその開発ツールをインストールする**  
 AWS IoT Device SDK for Python では、Python v3.5 以降を Raspberry Pi にインストールする必要があります。

   デバイスのターミナルウィンドウで、次のコマンドを実行します。

   1. このコマンドを実行して、デバイスにインストールされている Python のバージョンを確認します。

      ```
      python3 --version
      ```

      Python がインストールされている場合は、そのバージョンが表示されます。

   1. 表示されているバージョンが `Python 3.5` 以降の場合は、ステップ 2 にスキップできます。

   1. 表示されたバージョンが `Python 3.5` よりも前の場合は、このコマンドを実行して正しいバージョンをインストールできます。

      ```
      sudo apt install python3
      ```

   1. このコマンドを実行して、正しいバージョンの Python がインストールされていることを確認します。

      ```
      python3 --version
      ```

1. 

**pip3 をテストする**  
デバイスのターミナルウィンドウで、次のコマンドを実行します。

   1. このコマンドを実行して、**pip3** がインストールされているかどうかを確認します。

      ```
      pip3 --version
      ```

   1. コマンドがバージョン番号を返す場合、**pip3** はインストールされており、ステップ 3 にスキップできます。

   1. 前のコマンドがエラーを返す場合は、このコマンドを実行して **pip3** をインストールします。

      ```
      sudo apt install python3-pip
      ```

   1. このコマンドを実行して、**pip3** がインストールされているかどうかを確認します。

      ```
      pip3 --version
      ```

1. 

**現在の AWS IoT Device SDK for Python をインストールする**  
 AWS IoT Device SDK for Python をインストールし、サンプルアプリケーションをデバイスにダウンロードします。

   デバイスで、次のコマンドを実行します。

   ```
   cd ~
   python3 -m pip install awsiotsdk
   ```

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ JavaScript ]

このセクションでは、Node.js、npm パッケージマネージャー、 AWS IoT Device SDK for JavaScript をデバイスにインストールします。これらの手順は、Raspberry Pi OS を実行している Raspberry Pi を対象としています。別のデバイスをお持ちの場合、または別のオペレーティングシステムを使用している場合は、これらの手順をデバイスに合わせて調整する必要があります。

1. 

**Node.js の最新バージョンをインストールする**  
 AWS IoT Device SDK for JavaScript では、Node.js と npm パッケージマネージャーを Raspberry Pi にインストールする必要があります。

   1. このコマンドを入力して、ノードリポジトリの最新バージョンをダウンロードします。

      ```
      cd ~
      curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
      ```

   1. Node と npm をインストールします。

      ```
      sudo apt-get install -y nodejs
      ```

   1. Node のインストールを確認します。

      ```
      node -v
      ```

      コマンドが Node のバージョンを表示することを確認します。このチュートリアルでは Node v10.0 以降が必要です。Node のバージョンが表示されない場合は、Node リポジトリを再度ダウンロードしてみてください。

   1. npm のインストールを確認します。

      ```
      npm -v
      ```

      コマンドが npm バージョンを表示することを確認します。npm のバージョンが表示されない場合は、Node と npm をもう一度インストールしてみてください。

   1. デバイスを再起動します。

      ```
      sudo shutdown -r 0
      ```

      デバイスの再起動後に続行します。

1. 

**AWS IoT Device SDK for JavaScript をインストールする**  
Raspberry Pi に AWS IoT Device SDK for JavaScript をインストールします。

   1.  AWS IoT Device SDK for JavaScript リポジトリを*ホーム*`aws-iot-device-sdk-js-v2`ディレクトリの ディレクトリにクローンします。Raspberry Pi では、*ホーム*ディレクトリは `~/` であり、次のコマンドで*ホーム*ディレクトリとして使用されます。デバイスが*ホーム*ディレクトリに別のパスを使用している場合は、次のコマンドで `~/` をデバイスの正しいパスに置き換える必要があります。

      これらのコマンドは、`~/aws-iot-device-sdk-js-v2` ディレクトリを作成し、SDK コードをそのディレクトリにコピーします。

      ```
      cd ~
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. 前の手順で作成した `aws-iot-device-sdk-js-v2` ディレクトリに変更し、`npm install` を実行して SDK をインストールします。コマンド `npm install` が `aws-crt` ライブラリビルドを呼び出し、これは完了するまで数分かかることがあります。

      ```
      cd ~/aws-iot-device-sdk-js-v2
      npm install
      ```

------

## サンプルアプリケーションをインストールして実行する
<a name="gs-device-node-app-run"></a>

このセクションでは、 AWS IoT Device SDK にある`pubsub`サンプルアプリケーションをインストールして実行します。このアプリケーションは、デバイスが MQTT ライブラリを使用して MQTT メッセージを発行およびサブスクライブする方法を示します。サンプルアプリケーションは トピック `topic_1` にサブスクライブし、そのトピックに 10 個のメッセージを発行し、メッセージブローカーから受信したメッセージを表示します。

**証明書ファイルをインストールする**  
サンプルアプリケーションでは、デバイスを認証する証明書ファイルをそのデバイスにインストールする必要があります。

**サンプルアプリケーションのデバイス証明書ファイルをインストールするには**

1. これらのコマンドを実行して、*ホーム*ディレクトリに`certs`サブディレクトリを作成します。

   ```
   cd ~
   mkdir certs
   ```

1. `~/certs` ディレクトリで、前に [AWS IoT リソースの作成](create-iot-resources.md) で作成したプライベートキー、デバイス証明書、およびルート CA 証明書をコピーします。

   証明書ファイルをデバイスにコピーする方法は、デバイスおよびオペレーティングシステムによって異なりますが、ここでは説明を割愛します。ただし、デバイスがグラフィカルユーザーインターフェイス (GUI) をサポートしており、ウェブブラウザがある場合は、デバイスのウェブブラウザから [AWS IoT リソースの作成](create-iot-resources.md) で説明されている手順を実行して、結果のファイルをデバイスに直接ダウンロードできます。

   次のセクションのコマンドは、次の表に示すように、キーおよび証明書ファイルがデバイスに保存されていることを前提としています。  
**証明書ファイル名**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/connecting-to-existing-device.html)

サンプルアプリケーションを実行するには、次の情報が必要です。


**アプリケーションパラメータ値**  

|  Parameter  |  値がある場所  | 
| --- | --- | 
| your-iot-endpoint |  [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)で、**[All devices]** (すべてのデバイス)、**[Things]** (モノ) の順に選択します。  AWS IoT メニューの **[設定]** ページ。エンドポイントが **[Device data endpoint]** (デバイスデータエンドポイント) セクションに表示されます。  | 

*your-iot-endpoint* 値の形式は`endpoint_id-ats.iot.region.amazonaws.com` です (例: `a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com`)。

------
#### [ Python ]

**サンプルアプリケーションをインストールして実行するには**

1. サンプルアプリディレクトリに移動します。

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   ```

1. コマンドラインウィンドウで、示されているように* your-iot-endpoint* を置き換えて、このコマンドを実行します。

   ```
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. サンプルアプリケーションが次のようになっていることを観察します。

   1. アカウントの AWS IoT サービスに接続します。

   1. メッセージトピック **topic\$11** をサブスクライブし、そのトピックで受信したメッセージを表示します。

   1. 10 個のメッセージをトピック、**topic\$11** に発行します。

   1. 次のような出力を表示します。

   ```
   Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'...
   Connected!
   Subscribing to topic 'topic_1'...
   Subscribed with QoS.AT_LEAST_ONCE
   Sending 10 message(s)
   Publishing message to topic 'topic_1': Hello World! [1]
   Received message from topic 'topic_1': b'Hello World! [1]'
   Publishing message to topic 'topic_1': Hello World! [2]
   Received message from topic 'topic_1': b'Hello World! [2]'
   Publishing message to topic 'topic_1': Hello World! [3]
   Received message from topic 'topic_1': b'Hello World! [3]'
   Publishing message to topic 'topic_1': Hello World! [4]
   Received message from topic 'topic_1': b'Hello World! [4]'
   Publishing message to topic 'topic_1': Hello World! [5]
   Received message from topic 'topic_1': b'Hello World! [5]'
   Publishing message to topic 'topic_1': Hello World! [6]
   Received message from topic 'topic_1': b'Hello World! [6]'
   Publishing message to topic 'topic_1': Hello World! [7]
   Received message from topic 'topic_1': b'Hello World! [7]'
   Publishing message to topic 'topic_1': Hello World! [8]
   Received message from topic 'topic_1': b'Hello World! [8]'
   Publishing message to topic 'topic_1': Hello World! [9]
   Received message from topic 'topic_1': b'Hello World! [9]'
   Publishing message to topic 'topic_1': Hello World! [10]
   Received message from topic 'topic_1': b'Hello World! [10]'
   10 message(s) received.
   Disconnecting...
   Disconnected!
   ```

   サンプルアプリケーションの実行に問題がある場合は、[サンプルアプリケーションの問題をトラブルシューティングする](gs-device-troubleshoot.md) を確認してください。

   コマンドラインに `--verbosity Debug` パラメータを追加して、サンプルアプリケーションが実行内容に関する詳細なメッセージを表示するようにすることもできます。この情報は、問題の修正に役立つ場合があります。

------
#### [ JavaScript ]

**サンプルアプリケーションをインストールして実行するには**

1. コマンドラインウィンドウで、SDK が作成した `~/aws-iot-device-sdk-js-v2/samples/node/pub_sub` ディレクトリに移動し、これらのコマンドを使用してサンプルアプリケーションをインストールします。コマンド `npm install` が `aws-crt` ライブラリビルドを呼び出し、これは完了するまで数分かかることがあります。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. コマンドラインウィンドウで、示されているように *your-iot-endpoint* を置き換えて、このコマンドを実行します。

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. サンプルアプリケーションが次のようになっていることを観察します。

   1. アカウントの AWS IoT サービスに接続します。

   1. メッセージトピック **topic\$11** をサブスクライブし、そのトピックで受信したメッセージを表示します。

   1. 10 個のメッセージをトピック、**topic\$11** に発行します。

   1. 次のような出力を表示します。

   ```
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":1}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":2}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":3}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":4}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":5}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":6}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":7}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":8}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":9}
   Publish received on topic topic_1
   {"message":"Hello world!","sequence":10}
   ```

   サンプルアプリケーションの実行に問題がある場合は、[サンプルアプリケーションの問題をトラブルシューティングする](gs-device-troubleshoot.md) を確認してください。

   コマンドラインに `--verbosity Debug` パラメータを追加して、サンプルアプリケーションが実行内容に関する詳細なメッセージを表示するようにすることもできます。この情報は、問題の修正に役立つ場合があります。

------

## AWS IoT コンソールでサンプルアプリからのメッセージを表示する
<a name="gs-device-view-msg"></a>

**AWS IoT コンソール**の**MQTT テストクライアント**を使用することで、サンプルアプリケーションメッセージがメッセージブローカーを通過するときにそれらを見ることができます。

**サンプルアプリケーションによって発行された MQTT メッセージを表示するには**

1. 確認[MQTT クライアントで AWS IoT MQTT メッセージを表示する](view-mqtt-messages.md)。これは、**AWS IoT コンソール**で **MQTT テストクライアント**を使用して、メッセージブローカーを通過する MQTT メッセージを表示する方法を学ぶのに役立ちます。

1. **AWS IoT コンソール**で **MQTT テストクライアント**を開きます。

1. トピック **topic\$11** にサブスクライブします。

1. コマンドラインウィンドウで、サンプルアプリケーションを再度実行し、**AWS IoT コンソール**の **MQTT クライアント**でメッセージを確認します。

------
#### [ Python ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------
#### [ JavaScript ]

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------

# サンプルアプリケーションの問題をトラブルシューティングする
<a name="gs-device-troubleshoot"></a>

サンプルアプリケーションを実行しようとしたときにエラーが発生した場合は、次の点を確認してください。

## 証明書を確認する
<a name="gs-device-ts-step-1"></a>

証明書がアクティブでない場合、 AWS IoT はその証明書を認可に使用する接続試行を受け入れません。証明書を作成するときに、[**Activate**] (有効化) ボタンを見落としがちです。幸いなことに、[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)から証明書を有効化できます。

**証明書の有効化を確認するには**

1. [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)の左側のメニューで、[**Secure**] (安全性) を選択し、[**Certificates**] (証明書) を選択します。

1. 証明書のリストで、演習用に作成した証明書を見つけ、[**Status**] (ステータス) 列でそのステータスを確認します。

   証明書の名前を覚えていない場合は、[**Inactive**] (無効) の証明書がないかを確認し、使用している証明書かどうかを確認してください。

   リストから証明書を選択し、詳細のページを開きます。詳細ページには、証明書の特定に役立つ [**Create date**] (作成日) が表示されます。

1. **有効化されていない証明書を有効化するには**、証明書の詳細ページから [**Actions**] (アクション) を選択してから、[**Activate**] (有効化) を選択します。

正しい証明書を見つけ、アクティブであることを確認できたにもかかわらず、サンプルアプリケーションの実行にまだ問題がある場合は、次のステップで説明するように、そのポリシーを確認します。

[モノのオブジェクトを作成する](create-iot-resources.md#create-aws-thing) の手順に従って、新しいモノと新しい証明書の作成を試みることもできます。新しいモノを作成する場合は、新しいモノの名前を付けて、新しい証明書ファイルをデバイスにダウンロードする必要があります。

## 証明書にアタッチされているポリシーを確認する
<a name="gs-device-ts-step-2"></a>

ポリシーは でのアクションを承認します AWS IoT。 AWS IoT への接続に使用される証明書にポリシーがない場合、または接続を許可するポリシーがない場合、証明書がアクティブであっても、接続は拒否されます。

**証明書にアタッチされたポリシーを確認するには**

1. 前の項目の説明に従って証明書を見つけ、その詳細のページを開きます。

1. 証明書の詳細ページの左側のメニューで、[**Policies**] (ポリシー) を選択して、証明書にアタッチされているポリシーを表示します。

1. 証明書にポリシーが添付されていない場合は、[**Actions**] (アクション) メニューを選択し、[**Attach policy**] (ポリシーの添付) を選択してポリシーを追加します。

   先ほど [AWS IoT リソースの作成](create-iot-resources.md) で作成したポリシーを選択します。

1. ポリシーがアタッチされている場合は、ポリシータイルを選択してその詳細ページを開きます。

   詳細ページで、**ポリシードキュメント**を調べて、[AWS IoT ポリシーを作成する](create-iot-resources.md#create-iot-policy)で作成したものと同じ情報が含まれていることを確認します。

## コマンドラインをチェックする
<a name="gs-device-ts-step-3"></a>

ご利用のシステム用に正しいコマンドラインを使用していることを確認してください。Linux および macOS システムで使用されるコマンドは、Windows システムで使用されるコマンドとは異なることがよくあります。

## エンドポイントアドレスを確認する
<a name="gs-device-ts-step-4"></a>

入力したコマンドを確認し、コマンドのエンドポイントアドレスを [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)のアドレスと照らし合わせて再確認します。

## 証明書ファイルのファイル名を確認する
<a name="gs-device-ts-step-5"></a>

入力したコマンドのファイル名を、`certs` ディレクトリ内の証明書ファイルのファイル名と比較します。

一部のシステムでは、正しく機能するためにファイル名を引用符で囲む必要がある場合があります。

## SDK のインストールを確認する
<a name="gs-device-ts-step-6"></a>

SDK のインストールが完了しており、正しいことを確認します。

懸念がある場合は、デバイスに SDK を再インストールします。ほとんどの場合、これは「Install **the AWS IoT Device SDK for **SDK language****」というタイトルのチュートリアルの セクションを見つけて、手順を再度実行することです。

**AWS IoT Device SDK for JavaScript** を使用している場合は、サンプルアプリケーションをインストールしてから実行してください。SDK をインストールしても、サンプルアプリケーションは自動的にはインストールされません。サンプルアプリケーションは、SDK のインストール後に手動でインストールする必要があります。

# MQTT クライアントで AWS IoT MQTT メッセージを表示する
<a name="view-mqtt-messages"></a>

このセクションでは、[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)で AWS IoT MQTT テストクライアントを使用して、 によって送受信される MQTT メッセージを監視する方法について説明します AWS IoT。このセクションで使用される例は、[AWS IoT Core チュートリアルの開始方法](iot-gs.md) で使用される例に関連しています。ただし、例で使用されている *topicName* を、ご利用の IoT ソリューションで使用されている任意の[トピック名またはトピックフィルター](topics.md)に置き換えることができます。

デバイスは、[トピック](topics.md)によって識別される MQTT メッセージを発行して状態を通信し AWS IoT、MQTT メッセージ AWS IoT を発行してデバイスとアプリケーションに変更とイベントを通知します。MQTT クライアントを使用すると、これらのトピックをサブスクライブして、メッセージを発生時に確認できます。MQTT テストクライアントを使用して、 のサブスクライブしているデバイスやサービスに MQTT メッセージを発行することもできます AWS アカウント。

**Topics**
+ [MQTT クライアントで MQTT メッセージを表示する](#view-mqtt-subscribe)
+ [MQTT クライアントから MQTT メッセージを発行する](#view-mqtt-publish)
+ [MQTT クライアントで共有サブスクリプションをテストする](#view-mqtt-shared-subscriptions)

## MQTT クライアントで MQTT メッセージを表示する
<a name="view-mqtt-subscribe"></a>

次の手順では、デバイスがメッセージを発行する特定の MQTT トピックをサブスクライブし、それらのメッセージを [AWS IoT コンソール](https://console.aws.amazon.com/iot/home) に表示する方法について説明します。

**MQTT テストクライアントで MQTT メッセージを表示するには**

1. [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)の左側のメニューで、**[Test]** (テスト)、**[MQTT test client]** (MQTT テストクライアント) の順に選択します。  
![\[左側のナビゲーションにあるコンソールメニューから、[MQTT テストクライアント] を選択します。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/choose-test.png)

1. **[Subscribe to a topic]** (トピックにサブスクライブする) タブで、*topicName* を入力して、デバイスが発行する対象のトピックにサブスクライブします。開始方法のサンプルアプリケーションについては、**\$1** にサブスクライブします。これにより、すべてのメッセージトピックにサブスクライブします。

   開始方法の例を使用して続行し、[**Subscribe to a topic**] (トピックをサブスクライブする) タブの [**Topic filter**] (トピックフィルター) フィールドで**\$1** と入力し、[**Subscribe** (サブスクライブ)]を選択します。  
![\[トピックタブへのサブスクライブ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/subscribe-button-topic.png)

   トピックメッセージログページ **\$1** が開き、**\$1** が [**Subscriptions**] (サブスクリプション) リストに表示されます。で設定したデバイスがサンプルプログラム[デバイスを設定する](configure-device.md)を実行している場合は、**\$1** メッセージログ AWS IoT に に送信するメッセージが表示されます。サブスクライブされたトピックを含むメッセージが によって受信されると、メッセージログエントリが **Publish** セクションの下に表示されます AWS IoT。  
![\[トピックを表示するセクションは正常にサブスクライブされました。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/subscribed-button-topic.png)

1. **\$1** メッセージログページでは、トピックにメッセージを発行することもできますが、トピック名を指定する必要があります。**\$1** トピックに発行することはできません。

   サブスクライブしたトピックに発行されたメッセージは、受信されるとメッセージログに表示されます。最初に表示されるのは、最新のメッセージです。

### MQTT メッセージのトラブルシューティング
<a name="view-mqtt-trouble"></a>

**ワイルドカードトピックフィルターを使用する**  
メッセージが期待どおりにメッセージログに表示されない場合は、[トピック名フィルター](topics.md#topicfilters) の説明に従って、ワイルドカードトピックフィルターをサブスクライブしてみてください。MQTT マルチレベルワイルドカードトピックフィルターはハッシュまたはポンド記号 ( `#` ) であり、[**Subscription topic**] (サブスクリプショントピック) フィールドでトピックフィルターとして使用できます。

`#` トピックフィルターにサブスクライブすると、メッセージブローカーによって受信されるすべてのトピックがサブスクライブされます。トピックフィルターパスの要素を `#` 複数レベルのワイルドカード文字または「\$1」単一レベルのワイルドカード文字に置き換えることで、絞り込むことができます。

**トピックフィルターでワイルドカードを使用する場合**
+ マルチレベルのワイルドカード文字は、トピックフィルターの最後の文字にする必要があります。
+ トピックフィルターパスには、トピックレベルごとに 1 つの単一レベルのワイルドカード文字のみを使用できます。

以下に例を示します。


|  トピックのフィルター  |  次でメッセージを表示します  | 
| --- | --- | 
|   `#`   |   任意のトピック名   | 
|   `topic_1/#`   |   `topic_1/` で始まるトピック名  | 
|   `topic_1/level_2/#`   |   `topic_1/level_2/`で始まるトピック名  | 
|   `topic_1/+/level_3`   |   `topic_1/` で始まり、`/level_3`で終わり、その間に任意の値の 1 つの要素があるトピック名。  | 

トピックフィルターの詳細については、[トピック名フィルター](topics.md#topicfilters) を参照してください。

**トピック名のエラーをチェックする**  
MQTT トピック名とトピックフィルターでは、大文字と小文字が区別されます。例えば、サブスクライブしたトピックである `topic_1` ではなく `Topic_1` (大文字の *T*) にデバイスがメッセージを発行している場合、そのメッセージは MQTT テストクライアントに表示されません。ただし、ワイルドカードトピックフィルターをサブスクライブすると、デバイスがメッセージを発行していることが表示され、想定したものとは異なるトピック名を使用していることがわかります。

## MQTT クライアントから MQTT メッセージを発行する
<a name="view-mqtt-publish"></a>

**MQTT トピックにメッセージを発行するには**

1. MQTT テストクライアントページの **[Publish to a topic]** (トピックへの発行) タブの **[Topic name]** (トピック名) フィールドに、メッセージの *topicName* を入力します。この例では **my/topic** を使用します。
**注記**  
MQTT テストクライアントで使用する場合でも、システム実装で使用する場合でも、トピック名に個人を特定できる情報を使用しないでください。トピック名は、暗号化されていない通信およびレポートに表示できます。

1. メッセージペイロードウィンドウで、次の JSON を入力します。

   ```
   {
       "message": "Hello, world",
       "clientType": "MQTT test client"
   }
   ```

1. [**Publish**] (発行) を選択して、メッセージを AWS IoTに発行します。
**注記**  
メッセージを発行する前に、**my/topic** トピックにサブスクライブしていることを確認してください。  
![\[トピックタブへの公開。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/publish-to-topic.png)

1. [**Subscriptions**] (サブスクリプション) のリストで、[**my/topic**] を選びます。発行メッセージペイロードウィンドウの下の MQTT テストクライアントにメッセージが表示されます。  
![\[公開されたトピックを示す画面が受信されました。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/publish-to-topic-received.png)

MQTT メッセージを他のトピックに発行するには、[**Topic name**] (トピック名) フィールドの *topicName*を変更し、[**Publish**] (発行) ボタンを選びます。

**重要**  
重複するトピック (例: probe1/temperature および probe1/\$1) で複数のサブスクリプションを作成する場合、両方のサブスクリプションに一致するトピックに発行された 1 つのメッセージが、重複するサブスクリプションごとに 1 回ずつ、複数回にわたって配信される可能性があります。

## MQTT クライアントで共有サブスクリプションをテストする
<a name="view-mqtt-shared-subscriptions"></a>

このセクションでは、 [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)で AWS IoT MQTT クライアントを使用して、共有サブスクリプション AWS IoT を使用して送受信された MQTT メッセージを監視する方法について説明します。 では、複数のクライアントが、ランダムディストリビューションを使用してそのトピックに発行されたメッセージを受信するクライアントが 1 つだけであるトピックへのサブスクリプションを共有[共有サブスクリプション](mqtt.md#mqtt5-shared-subscription)できます。同じサブスクリプションを共有する複数の MQTT クライアント (この例では 2 つの MQTT クライアント) をシミュレートするには、複数のウェブブラウザから[AWS IoT コンソール](https://console.aws.amazon.com/iot/home)で AWS IoT MQTT クライアントを開きます。このセクションで使用されている例は、「[AWS IoT Core チュートリアルの開始方法](iot-gs.md)」で使用されている例とは関連がありません。詳細については、「[共有サブスクリプション](mqtt.md#mqtt5-shared-subscription)」を参照してください。

**MQTT トピックのサブスクリプションを共有するには**

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

1. **[Subscribe to a topic]** (トピックにサブスクライブする) タブで、*topicName* を入力して、デバイスが発行する対象のトピックにサブスクライブします。共有サブスクリプションを使用するには、以下のように共有サブスクリプションのトピックフィルターにサブスクライブします。

   ```
   $share/{ShareName}/{TopicFilter}
   ```

   サンプルのトピックフィルターは、メッセージトピック **topic1** にサブスクライブしている **\$1share/group1/topic1** にすることができます。  
![\[共有サブスクリプションのトピックフィルターを指定する方法を示すタブ。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/shared-subscription-topicfilter.png)

1. 別のウェブブラウザを開き、手順 1 と手順 2 を繰り返します。この方法では、同じサブスクリプション **\$1share/group1/topic1** を共有する 2 つの異なる MQTT クライアントをシミュレートしています。

1. 1 つの MQTT クライアントを選択し、**[トピックに公開する]** タブの **[トピック名]** フィールドに、メッセージの *topicName* を入力します。この例では **topic1** を使用します。メッセージを数回公開してみてください。両方の MQTT クライアントの**サブスクリプション**リストで、クライアントがランダム配信を使用してメッセージを受信していることを確認できるようになります。この例では、同じメッセージ「Hello from AWS IoT console」を 3 回公開します。左側の MQTT クライアントはメッセージを 2 回受信し、右側の MQTT クライアントはメッセージを 1 回受信しました。  
![\[共有サブスクリプションは、1 つのトピックへのサブスクリプションを 2 つのクライアントで共有できますが、そのトピックに公開されたメッセージをランダム配信を使って受信できるのは 1 つのクライアントのみです。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/shared_subscriptions_test.gif)