AWS IoT
開発者ガイド

AWS IoT Device SDK for JavaScript を使用する

このチュートリアルでは、Node.js、npm パッケージマネージャー、および JavaScript 用の AWS IoT Device SDK を Raspberry Pi にインストールして、Device SDK サンプルアプリケーションを実行する方法について説明します。

AWS IoT Device SDK for JavaScript のランタイム環境を設定する

AWS IoT Device SDK for JavaScript を使用するには、Raspberry Pi に Node と npm パッケージマネージャーをインストールする必要があります。

  1. Node リポジトリを追加するには、ターミナルを開き、以下のコマンドを実行します。

    curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -

  2. Node と npm をインストールするには、次のコマンドを実行します。

    sudo apt-get install -y nodejs

  3. Node と npm のインストールを確認するには、次のコマンドを実行します。

    node -v

    および

    npm -v

    これらのコマンドでバージョン番号が表示されれば、node と npm は正しくインストールされています。

AWS IoT Device SDK for JavaScript をインストールする

Raspberry Pi に JavaScript 用の AWS IoT Device SDK をインストールするには、次のコマンドを使用して ~/deviceSDK ディレクトリを作成します。

mkdir deviceSDK

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

npm install aws-iot-device-sdk

インストールが完了したら、node_modules ディレクトリで ~/deviceSDK ディレクトリを確認する必要があります。

サンプルアプリケーションの実行準備をする

AWS IoT の使用開始」の説明に従い、Raspberry Pi を AWS IoT に登録します。[aws-device-sdk-js] で certs ディレクトリを作成し、プライベートキー、証明書、ルート CA ファイルを certs ディレクトリにをコピーします。

  • プライベートキー node-private-key.pem の名前を変更します。

  • 証明書 node-cert.pem の名前を変更します。

AWS IoT Device SDK for JavaScript サンプルを実行するには、次の情報が必要です。

AWS リージョン

使用しているリージョンを見つけるには、AWS IoT コンソールを開いて URL を確認します。リージョンは、URL の https:// の直後に表示されます。次に例を示します。

https://us-west-2.console.aws.amazon.com/iot/home?region=us-west-2#/dashboard

AWS リージョンは、URL の ? の直後にも表示されます。詳細については、「AWS のリージョンとエンドポイント」を参照してください。AWS IoT に固有の情報については、「AWS IoT リージョンとエンドポイント」を参照してください。

クライアント ID

AWS IoT に接続するデバイスまたはアプリケーションを識別するために使用される任意の英数字文字列。

ユーザーのプライベートキー

Raspberry Pi 上のプライベートキーへの完全修飾パス。これは、Raspberry Pi を AWS IoT に登録したときに生成されるキーです。

AWS IoT X.509 証明書

AWS IoT Raspberry Pi 上のプライベートキーへの完全修飾パス。これは、Raspberry Pi を AWS IoT に登録したときに生成される証明書です。

STS Amazon ルート CA

Raspberry Pi 上の Amazon ルート CA への完全修飾パス。

AWS IoT エンドポイント

describe-endpoint CLI コマンドを実行して、エンドポイントを見つけることができます。

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

エンドポイントは、AWS IoT コンソールにアクセスして Raspberry Pi 用の IoT を選択してから、[操作] を選択しても確認できます。エンドポイントは [HTTPS] および [Update your Device Shadow using this Rest API endpoint (この Rest API エンドポイントを使用してデバイスシャドウを更新)] の下に表示されます。

AWS IoT メッセージブローカーがリッスンするポート

これは常に 8883 です。

IoT モノの名前

これは、Raspberry Pi を AWS IoT に登録したときに指定した名前です。

サンプルアプリケーションを実行する

JavaScript 用の AWS IoT Device SDK の aws-iot-device-sdk-js/examples ディレクトリには、多数のサンプルが含まれています。device-example.js から開始することをお勧めします。この例では、2 つのモードで実行されます。モード 1 では、MQTT トピック topic_1 に登録し、4 秒ごとにメッセージを topic_2 に発行します。モード 2 では、topic_2 に登録し、4 秒ごとにメッセージを topic_1 に発行します。1 つはモード 1、もう 1 つはモード 2 の 2 つの device-example.js インスタンスを実行して、送受信されているメッセージを確認できます。

aws-iot-device-sdk-js/examples ディレクトリから、次のコマンドを実行してサンプルのインスタンスを起動します。

node device-example -k "../certs/node-private-key.pem" -c "../certs/node-cert.pem" -i "client-id-1" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 1

モード 2 で実行されている device-example.js 別のインスタンスを起動します。

node device-example -k "../certs/node-private-key.pem" -c "../certs/node-cert.pem" -i "client-id-2" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 2

重要

device-example.js の 2 つのインスタンスを実行するときは、必ず異なるクライアント ID を使用してください。同じクライアント ID を使用して 2 つのクライアント (デバイスまたはアプリケーション) が AWS IoT に接続することはできません。最初のクライアントの接続が切断され、2 番目のクライアント接続が確立されます。

モノの名前は、IoT のモノに固有のポリシーを作成するときにのみ重要となります。AWS IoT の開始方法のチュートリアルでは、そのようなポリシーを作成しないので、両方のインスタンスに同じもの名を使用できます。

これで、Raspberry Pi は AWS IoT SDK for JavaScript を使用して AWS IoT に接続されました。

サンプルインスタンスが正しく実行されている場合、モード 1 で実行されているインスタンスからの出力は次のようになります。

substituting 250ms dely for truems... connect message topic_1 {"mode1Process":1} message topic_1 {"mode1Process":2} message topic_1 {"mode1Process":3} message topic_1 {"mode1Process":4} ...

モード 2 で実行されているインスタンスからの出力は、次のようになります。

substituting 250ms dely for truems... connect message topic_2 {"mode2Process":1} message topic_2 {"mode2Process":2} message topic_2 {"mode2Process":3} message topic_2 {"mode2Process":4} ...

サンプルが正しく実行されない場合は、サンプルの実行時に -d オプションを追加してデバッグ情報を表示してください。