

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

# 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)