

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

# チュートリアル: AWS IoT Device Client のインストールと設定
<a name="iot-dc-install-dc"></a>

このチュートリアルでは、 AWS IoT Device Client のインストールと設定、およびこのデモやその他のデモで使用する AWS IoT リソースの作成について説明します。

**このチュートリアルを開始するには、以下を行います。**
+ [前のチュートリアル](iot-dc-prepare-device.md)でローカルホストコンピュータと Raspberry Pi が使用できるようにしておく。

このチュートリアルの完了には最大 90 分かかる場合があります。

**このトピックが終了したら、次の状態になります。**
+ IoT デバイスは、他の AWS IoT Device Client デモで使用できるようになります。
+ IoT デバイスをプロビジョニングします AWS IoT Core。
+ デバイスに AWS IoT Device Client をダウンロードしてインストールします。
+ デバイスの microSD カードのイメージが保存され、以降のチュートリアルで使用できるようになっています。

**必要な機器:**
+ [前のセクション](iot-dc-prepare-device-test.md)で準備したローカルでの開発およびテスト環境
+ [前のセクション](iot-dc-prepare-device-test.md)で使用した Raspberry Pi
+ [前のセクション](iot-dc-prepare-device-test.md)で使用した Raspberry Pi の microSD メモリカード

**Topics**
+ [AWS IoT Device Client をダウンロードして保存する](iot-dc-install-download.md)
+ [で Raspberry Pi をプロビジョニングする AWS IoT](iot-dc-install-provision.md)
+ [接続をテストするように AWS IoT Device Client を設定する](iot-dc-install-configure.md)

# AWS IoT Device Client をダウンロードして保存する
<a name="iot-dc-install-download"></a>

このセクションの手順では、 AWS IoT Device Client をダウンロードしてコンパイルし、Raspberry Pi にインストールします。インストールをテストした後、Raspberry Pi の microSD カードのイメージを保存して、後でチュートリアルをもう一度試すときに使用できます。

**Topics**
+ [AWS IoT Device Client をダウンロードして構築する](#iot-dc-install-dc-download)
+ [チュートリアルで使用するディレクトリを作成する](#iot-dc-install-dc-files)
+ [(オプション) microSD カードイメージを保存する](#iot-dc-install-dc-save)

## AWS IoT Device Client をダウンロードして構築する
<a name="iot-dc-install-dc-download"></a>

この手順では、 AWS IoT デバイスクライアントを Raspberry Pi にインストールします。

Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次のコマンドを実行します。

**Raspberry Pi に AWS IoT Device Client をインストールするには**

1. これらのコマンドを入力して、Raspberry Pi で AWS IoT Device Client をダウンロードして構築します。

   ```
   cd ~
   git clone https://github.com/awslabs/aws-iot-device-client aws-iot-device-client
   mkdir ~/aws-iot-device-client/build && cd ~/aws-iot-device-client/build
   cmake ../
   ```

1.  AWS IoT Device Client を構築するには、このコマンドを実行します。このコマンドは完了までに、最大で 15 分かかります。

   ```
   cmake --build . --target aws-iot-device-client
   ```

    AWS IoT Device Client のコンパイルとして表示される警告メッセージは無視できます。

   これらのチュートリアルは**gcc**、2021 年 10 月 30 日バージョンの Raspberry Pi OS (ブルズアイ) の 、バージョン (Raspbian 10.2.1-6\$1rpi1) 10.2.1 20210110、2021 年 5 月 7 日バージョンの Raspberry Pi OS (バスター) の **gcc**、バージョン (Raspbian 8.3.0-6\$1rpi1) 8.3.0 上に構築された AWS IoT Device Client でテストされています。

1.  AWS IoT Device Client の構築が完了したら、このコマンドを実行してテストします。

   ```
   ./aws-iot-device-client --help
   ```

 AWS IoT Device Client のコマンドラインヘルプが表示された場合は、 AWS IoT Device Client が正常に構築され、使用できるようになります。

## チュートリアルで使用するディレクトリを作成する
<a name="iot-dc-install-dc-files"></a>

この手順では、このラーニングパスのチュートリアルで使用されるファイルを保存するために使用されるディレクトリを Raspberry Pi 上に作成します。

**このラーニングパスのチュートリアルで使用されるディレクトリを作成するには、次の手順を実行します。**

1. 次のコマンドを実行して、必要なディレクトリを作成します。

   ```
   mkdir ~/dc-configs
   mkdir ~/policies
   mkdir ~/messages
   mkdir ~/certs/testconn
   mkdir ~/certs/pubsub
   mkdir ~/certs/jobs
   ```

1. 次のコマンドを実行して、新しいディレクトリに対するアクセス許可を設定します。

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 700 ~/certs/pubsub
   chmod 700 ~/certs/jobs
   ```

これらのディレクトリを作成してアクセス許可を設定したら、[(オプション) microSD カードイメージを保存する](#iot-dc-install-dc-save) に進みます。

## (オプション) microSD カードイメージを保存する
<a name="iot-dc-install-dc-save"></a>

この時点で、Raspberry Pi の microSD カードには、更新された OS、基本的なアプリケーションソフトウェア、および AWS IoT Device Client があります。

これらの演習とチュートリアルをもう一度試してみたい場合は、この手順で保存した microSD カードのイメージを新しい microSD カードに書き込み、前の手順をスキップして、[で Raspberry Pi をプロビジョニングする AWS IoT](iot-dc-install-provision.md) からチュートリアルを続けることができます。

**microSD カードのイメージをファイルに保存するには、次の手順を実行します。**

Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次の操作を行います。

1.  AWS アカウント 認証情報が保存されていないことを確認します。

   1. 次のコマンドを使用して、 AWS アプリの設定を実行します。

      ```
      aws configure
      ```

   1. 認証情報が保存されている場合 (プロンプトに表示されている場合)、以下に示すようにプロンプトが表示されたら、文字列 **XYXYXYXYX** を入力します。**[Default region name]** (デフォルトリージョン名) と **[Default output format]** (デフォルト出力形式) はブランクのままにしておきます。

      ```
      AWS Access Key ID [****************YXYX]: XYXYXYXYX
      AWS Secret Access Key [****************YXYX]: XYXYXYXYX
      Default region name: 
      Default output format:
      ```

1. 次のコマンドを入力して、Raspberry Pi をシャットダウンします。

   ```
   sudo shutdown -h 0
   ```

1. Raspberry Pi が完全にシャットダウンしたら、電源コネクタを取り外します。

1. デバイスから microSD カードを取り外します。

1. ローカルホストコンピュータで、次の操作を行います。

   1. microSD カードを挿入します。

   1. SD カードイメージングツールを使用して、microSD カードのイメージをファイルに保存します。

   1. microSD カードのイメージを保存したら、ローカルホストコンピュータからカードを取り出します。

この microSD は [で Raspberry Pi をプロビジョニングする AWS IoT](iot-dc-install-provision.md) で引き続き使用できます。

# で Raspberry Pi をプロビジョニングする AWS IoT
<a name="iot-dc-install-provision"></a>

このセクションの手順は、 と AWS IoT Device Client AWS CLI がインストールされている保存された microSD イメージから開始し、Raspberry Pi をプロビジョニングする AWS IoT リソースとデバイス証明書を作成します AWS IoT。

## Raspberry Pi に microSD カードをインストールします。
<a name="iot-dc-install-dc-restore"></a>

この手順では、必要なソフトウェアを Raspberry Pi にロードして設定した microSD カードをインストールし、このラーニングパスのチュートリアルを続行 AWS アカウント できるように を設定します。

このラーニングパスの演習とチュートリアルに必要なソフトウェアが格納されている [(オプション) microSD カードイメージを保存する](iot-dc-install-download.md#iot-dc-install-dc-save) で作成した microSD カードを使用します。

**Raspberry Pi に microSD カードをインストールするには**

1. Raspberry Pi の電源を切断した状態で、microSD カードを Raspberry Pi に挿入します。

1. Raspberry Pi の電源を入れます。

1. 約 1 分後、ローカルホストコンピュータで、ターミナルウィンドウセッションを再起動し、Raspberry Pi にログインします。

1. ローカルホストコンピュータのターミナルウィンドウで、**[Access Key ID]** (アクセスキー ID) と **[Secret Access Key]** (シークレットアクセスキー) を使用して、Raspberry Pi の認証情報に次の操作を行います。

   1. 次のコマンドを使用して、 AWS アプリの設定を実行します。

      ```
      aws configure
      ```

   1. プロンプトが表示されたら、 AWS アカウント 認証情報と設定情報を入力します。

      ```
      AWS Access Key ID [****************YXYX]: your Access Key ID
      AWS Secret Access Key [****************YXYX]: your Secret Access Key
      Default region name [us-west-2]: your AWS リージョン code
      Default output format [json]: json
      ```

 AWS アカウント 認証情報を復元したら、 に進む準備が整います[でデバイスをプロビジョニングする AWS IoT Core](#iot-dc-install-dc-provision)。

## でデバイスをプロビジョニングする AWS IoT Core
<a name="iot-dc-install-dc-provision"></a>

このセクションの手順では、Raspberry Pi をプロビジョニングする AWS IoT リソースを作成します AWS IoT。これらのリソースを作成する際には、さまざまな情報を記録するように求められます。この情報は、次の手順の AWS IoT Device Client 設定で使用されます。

Raspberry Pi を操作するには AWS IoT、プロビジョニングする必要があります。プロビジョニングは、Raspberry Pi を IoT デバイスとしてサポートするために必要な AWS IoT リソースを作成および設定するプロセスです。

Raspberry Pi の電源を入れて再起動したら、ローカルホストコンピュータのターミナルウィンドウを Raspberry Pi に接続し、以下の手順を完了します。

**Topics**
+ [デバイス証明書ファイルを作成およびダウンロードする](#iot-dc-install-dc-provision-certs)
+ [AWS IoT リソースの作成](#iot-dc-install-dc-provision-resources)

### デバイス証明書ファイルを作成およびダウンロードする
<a name="iot-dc-install-dc-provision-certs"></a>

この手順では、このデモのデバイス証明書ファイルが作成されます。

**Raspberry Pi のデバイス証明書ファイルを作成してダウンロードするには**

1. ローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力して、デバイスのデバイス証明書ファイルを作成します。

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

   このコマンドでは次のようなレスポンスが返されます。後で使用できるように、`certificateArn` の値を記録しておきます。

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. 次のコマンドを入力して、証明書ディレクトリとそのファイルに対するアクセス許可を設定します。

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 644 ~/certs/testconn/*
   chmod 600 ~/certs/testconn/private.pem.key
   ```

1. 次のコマンドを実行して、証明書のディレクトリおよびファイルに対するアクセス許可を確認します。

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

   コマンドの出力は、ファイルの日付と時刻が異なることを除いて、ここで表示されるものと同じである必要があります。

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

この時点で、デバイス証明書ファイルが Raspberry Pi にインストールされており、[AWS IoT リソースの作成](#iot-dc-install-dc-provision-resources) に進むことができます。

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

この手順では、デバイスが AWS IoT の機能やサービスにアクセスするために必要なリソース AWS IoT を作成して、 でデバイスをプロビジョニングします。

**でデバイスをプロビジョニングするには AWS IoT**

1. ローカルホストコンピュータのターミナルウィンドウで、次のコマンドを入力して、 AWS アカウントのデバイスデータエンドポイントのアドレスを取得します。

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

   これまでの手順で入力したコマンドでは次のようなレスポンスが返されます。後で使用できるように、`endpointAddress` の値を記録しておきます。

   ```
   {
       "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. このコマンドを入力して、Raspberry Pi の AWS IoT モノのリソースを作成します。

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

    AWS IoT モノのリソースが作成された場合、コマンドはこのようなレスポンスを返します。

   ```
   {
       "thingName": "DevCliTestThing",
       "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/DevCliTestThing",
       "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. ターミナルウィンドウで、次の操作を行います。

   1. `nano` などのテキストエディタを開きます。

   1. この JSON ポリシードキュメントをコピーして、開いているテキストエディタに貼り付けます。  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish",
                      "iot:Subscribe",
                      "iot:Receive",
                      "iot:Connect"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```
**注記**  
このポリシードキュメントでは、すべてのリソースに対する接続、受信、発行、およびサブスクリプションを許可するという広範なアクセス許可が付与されます。通常、ポリシーは、特定のアクションを実行するアクセス許可を特定のリソースのみに付与します。ただし、最初のデバイス接続テストでは、このテスト中のアクセス問題の可能性を最小限に抑えるために、この過度に一般的で広範なアクセス許可を付与するポリシーが使用されます。以降のチュートリアルでは、より狭い範囲のポリシードキュメントを使用して、ポリシー設計のより良いプラクティスを示します。

   1. テキストエディタのファイルを **\$1/policies/dev\$1cli\$1test\$1thing\$1policy.json** として保存します。

1. 前のステップのポリシードキュメントを使用して AWS IoT ポリシーを作成するには、このコマンドを実行します。

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

   ポリシーが作成されると、コマンドは次のようなレスポンスを返します。

   ```
   {
       "policyName": "DevCliTestThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy",
       "policyDocument": "{\n    \"Version\": \"2012-10-17\",		 	 	 \n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iot:Publish\",\n                \"iot:Subscribe\",\n                \"iot:Receive\",\n                \"iot:Connect\"\n            ],\n            \"Resource\": [\n                \"*\"\n            ]\n        }\n    ]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. 次のコマンドを実行して、ポリシーをデバイス証明書にアタッチします。`certificateArn` を以前に保存した `certificateArn` の値に置き換えます。

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

   成功した場合、このコマンドは何も返しません。

1. このコマンドを実行して、デバイス証明書を AWS IoT モノのリソースにアタッチします。`certificateArn` を以前に保存した `certificateArn` の値に置き換えます。

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

   成功した場合、このコマンドは何も返しません。

でデバイスを正常にプロビジョニングしたら AWS IoT、 に進む準備が整います[接続をテストするように AWS IoT Device Client を設定する](iot-dc-install-configure.md)。

# 接続をテストするように AWS IoT Device Client を設定する
<a name="iot-dc-install-configure"></a>

このセクションの手順では、Raspberry Pi から MQTT メッセージを発行するように AWS IoT Device Client を設定します。

**Topics**
+ [設定ファイルを作成する](#iot-dc-install-dc-configure-step1)
+ [MQTT テストクライアントを開く](#iot-dc-install-dc-configure-step2)
+ [AWS IoT Device Client を実行する](#iot-dc-install-dc-configure-step3)

## 設定ファイルを作成する
<a name="iot-dc-install-dc-configure-step1"></a>

この手順では、 AWS IoT Device Client をテストするための設定ファイルを作成します。

**AWS IoT Device Client をテストする設定ファイルを作成するには**
+ Raspberry Pi に接続されているローカルホストコンピュータのターミナルウィンドウで、次の操作を行います。

  1. 次のコマンドを入力して、設定ファイルのディレクトリを作成し、ディレクトリに対するアクセス許可を設定します。

     ```
     mkdir ~/dc-configs
     chmod 745 ~/dc-configs
     ```

  1. `nano` などのテキストエディタを開きます。

  1. この JSON ドキュメントをコピーして、開いているテキストエディタに貼り付けます。

     ```
     {
       "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
       "cert": "~/certs/testconn/device.pem.crt",
       "key": "~/certs/testconn/private.pem.key",
       "root-ca": "~/certs/AmazonRootCA1.pem",
       "thing-name": "DevCliTestThing",
       "logging": {
         "enable-sdk-logging": true,
         "level": "DEBUG",
         "type": "STDOUT",
         "file": ""
       },
       "jobs": {
         "enabled": false,
         "handler-directory": ""
       },
       "tunneling": {
         "enabled": false
       },
       "device-defender": {
         "enabled": false,
         "interval": 300
       },
       "fleet-provisioning": {
         "enabled": false,
         "template-name": "",
         "template-parameters": "",
         "csr-file": "",
         "device-key": ""
       },
       "samples": {
         "pub-sub": {
           "enabled": true,
           "publish-topic": "test/dc/pubtopic",
           "publish-file": "",
           "subscribe-topic": "test/dc/subtopic",
           "subscribe-file": ""
         }
       },
       "config-shadow": {
         "enabled": false
       },
       "sample-shadow": {
         "enabled": false,
         "shadow-name": "",
         "shadow-input-file": "",
         "shadow-output-file": ""
       }
     }
     ```

  1. *エンドポイント*値を、「」で見つけ AWS アカウント た のデバイスデータエンドポイントに置き換えます[でデバイスをプロビジョニングする AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)。

  1. テキストエディタのファイルを **\$1/dc-configs/dc-testconn-config.json** として保存します。

  1. 次のコマンドを実行して、新しい設定ファイルでアクセス許可を設定します。

     ```
     chmod 644 ~/dc-configs/dc-testconn-config.json
     ```

ファイルを保存すると、[MQTT テストクライアントを開く](#iot-dc-install-dc-configure-step2) に進む準備が整います。

## MQTT テストクライアントを開く
<a name="iot-dc-install-dc-configure-step2"></a>

この手順では、 AWS IoT デバイス**クライアントが実行時に発行する MQTT メッセージにサブスクライブするように、コンソールで MQTT テスト**クライアントを準備します。 AWS IoT 

****[MQTT test client]** (MQTT テストクライアント) を準備してすべての MQTT メッセージをサブスクライブするには**

1. ローカルホストコンピュータの [AWS IoT コンソール](https://console.aws.amazon.com//iot/home#/test)で、**[MQTT test client]** (MQTT テストクライアント) を選択します。

1. **[トピックへサブスクライブする]** タブの **[トピックのフィルター]** に **\$1** (ハッシュ記号) を入力し、**[サブスクライブ]** をクリックして すべての MQTT トピックをサブスクライブします。

1. **[Subscriptions]** (サブスクリプション) ラベルの下に、「**\$1**」(単一の \$1 記号) が表示されることを確認します。

ウィンドウで **[MQTT test client]** (MQTT テストクライアント) を開いたままにして、[AWS IoT Device Client を実行する](#iot-dc-install-dc-configure-step3) に進みます。

## AWS IoT Device Client を実行する
<a name="iot-dc-install-dc-configure-step3"></a>

この手順では、 AWS IoT Device Client を実行して、MQTT **テストクライアントが受信して表示する単一の MQTT** メッセージを発行します。

**AWS IoT Device Client から MQTT メッセージを送信するには**

1. この手順を実行する際に、Raspberry Pi に接続されているターミナルウィンドウと、**[MQTT test client]** (MQTT テストクライアント) のウィンドウが両方とも表示できることを確認します。

1. ターミナルウィンドウで、これらのコマンドを入力して、 で作成された設定ファイルを使用して AWS IoT Device Client を実行します[設定ファイルを作成する](#iot-dc-install-dc-configure-step1)。

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-testconn-config.json
   ```

   ターミナルウィンドウに、 AWS IoT Device Client は情報メッセージと実行時に発生するエラーを表示します。

   ターミナルウィンドウにエラーが表示されない場合は、**[MQTT test client]** (MQTT テストクライアント) を確認します。

1. **[MQTT test client]** (MQTT テストクライアント) の [Subscriptions] (サブスクリプション) ウィンドウで、`test/dc/pubtopic` メッセージトピックに送信された「*Hello World\$1*」メッセージを確認します。

1.  AWS IoT Device Client にエラーが表示されず、**MQTT テストクライアントの**`test/dc/pubtopic`メッセージに *Hello World\$1* が送信されたことがわかった場合、接続は成功しています。

1. ターミナルウィンドウで、 **^C** (Ctrl-C) と入力して AWS IoT Device Client を停止します。

 AWS IoT Device Client が Raspberry Pi で正しく実行され、 と通信できることを実証したら AWS IoT、 に進むことができます[チュートリアル: AWS IoT Device Client との MQTT メッセージ通信のデモンストレーション](iot-dc-testconn.md)。