AWS IoT

World Wide Pianoを作成する際、AWS IoTを使いました。使い方を覚えて置くために記録として残します。

証明書を変更する
2020.2.29
  • 先のページでdevice-example.jsを試しました。このjavascriptは、 connect_device_package\node_modules\aws-iot-device-sdk\examples にあります。

    -t 1 オプションでは。topic_1 を受信、topic_2 を送信します。
    -t 2 オプションでは。topic_2 を受信、topic_1 を送信します。
    さて、このプログラムを修正して、

    -t 1 オプションでは、topic_3 を受信、topic_4 を送信
    -t 2 オプションでは、topic_4 を受信、topic_5 を送信
    と変更したいと思います。

  • プログラム、device-example.jsを見ると、

        /* 受信 */
        if (args.testMode === 1) {
            device.subscribe('topic_1');
        } else {
            device.subscribe('topic_2');
        }
        
        /* 送信 */
        if (args.testMode === 1) {
            device.publish('topic_2', JSON.stringify({
                mode1Process: count
            }));
        } else {
            device.publish('topic_1', JSON.stringify({
                mode2Process: count
            }));
        }
        
  • 1を3に、2を4に変更します。

        /* 受信 */
        if (args.testMode === 1) {
            device.subscribe('topic_3');
        } else {
            device.subscribe('topic_4');
        }
        
        /* 送信 */
        if (args.testMode === 1) {
            device.publish('topic_4', JSON.stringify({
                mode1Process: count
            }));
        } else {
            device.publish('topic_3', JSON.stringify({
                mode2Process: count
            }));
        }
        
  • この状態で動作させると、いかのようなエラーとなり送信、受信ともにうまくいきません。

    node .\node_modules\aws-iot-device-sdk\examples\device-example.js \
    --host-name abcdefghijklmg.iot.us-west-2.amazonaws.com \
    --private-key .\exxxxxxxx2-private.pem.key \
    --client-certificate .\exxxxxxxx2-certificate.pem.crt \
    --ca-certificate .\root-CA.crt \
    --client-id=sdk-nodejs-xxxxxxxa-axxx-xxdx-bxxb-cxaefxxxxxxx \
    --t 2
    
    offline
    error Error: premature close
        at onclosenexttick (connect_device_package\node_modules\end-of-stream\index.js:54:86)
        at processTicksAndRejections (internal/process/task_queues.js:79:11)
    close
    reconnect
    error Error: premature close
        at onclosenexttick (connect_device_package\node_modules\end-of-stream\index.js:54:86)
        at processTicksAndRejections (internal/process/task_queues.js:79:11)
    close
    
  • この原因は、「ポリシー」の設定にあります「接続キットのをダウンロード」の画面 のこの2行目にメッセージを送受信するポリシーの項があります。この項目をダウンロードした後の設定する手順を示します。
  • 「管理」から「モノ」を選択、モノの中から設定するモノ「Otoshimono」を選択します。

  • メニューから「セキュリティ」を選択、表示されている「証明書」を選択します。

  • メニューから「ポリシー」を選択、表示されている「Otoshimono-Policy」を選択します。

  • ポリシーのページが開きます。これを下にたどると

  • これを下にたどると、ReceiveとSubscribeのResourceというところに、topic_1,topic_2 の記載がありますので、これを「ポリシードキュメントの編集」を押して編集します。

  • topic_1,topic_2をtopic_3,topic_4に変更します。2か所あります。修正の後、「新しいバージョンを保存」を押します。

  • 「新しいバージョンは正常に生成されました。」と表示されればOKです。

  • 「新しいバージョンを作成できませんでした。ポリシーは最大5つのバージョンを持つことができます。」と表示されれる場合はエラーです。エラーの原因は、保存されているバージョンが多すぎることにあります。

  • 生成したバージョンを整理します。そのためには、メニューから「バージョン」を選択します。バージョンが5つ表示されますので、必要なモノを残して削除します。

  • 「バージョンは正常に削除されました。」と表示されます。メニューから「証明書」を選択すれば、上の通り新しい証明書を作成できます。

  • topic_3,4 が追加された証明書がアクティブであれば、上記プログラムでtopic_3 送信/受信、topic_4送信/受信が可能となります。