IoTデバイス(Mac)から AWS IoT CoreにMQTTプロトコルでデータを送って、IoT CoreがSQSへキューを送ります。
- IoT <MQTT>→ AWS IoT Core → SQS
もくじ
キューの作成
任意の名前でキューを作成します。
今回は標準キューで作成します。
【キューのクイック作成】をクリックします。
キューが作成されました。
現在の利用可能なメッセージは0になっています。
Policyの作成
左メニュの安全性からポリシーを選択し、
【ポリシーの作成】をクリックします。
- 名前:任意
- アクション;iot:*
- リソースARN:*
- 効果:許可
【作成】をクリックします。
ポリシーが作成されました。
証明書の作成
左メニューの安全性から証明書を選択します。
【証明書を作成する】をクリックします。
【証明書の作成】をクリックします。
証明書を3種ダウンロードし、【有効化】をクリックします。
AWS IoTのルートCAのダウンロードをクリックしてルート証明書を確認してメモに控えましょう。
【ポリシーをアタッチ】をクリックします。
チェックをいれて【完了】をクリックします。
証明書が作成されました。
ACTルールの作成
左メニューのACTから【ルールの作成】をクリックします。
任意でルール名を入力してください。
SELECT * FROM ‘<パブリッシュ名>‘
パブリッシュ名をtestとしました。
【アクションの追加】をクリックします。
今回はSQSと連携するので、SQSを選択します。
【アクションの設定】をクリックします。
キュー名を選択して、【ロールの作成】をクリックします。
ロール名を任意で選択します。
【ロールの作成】をクリックします。
アクションが作成されたので、【アクションの追加】をクリックします。
画面に戻ってきます。
【ルールの作成】をクリックします。
IoTエンドポイントの確認
左メニューの設定からエンドポイントを確認してメモに控えます。
IoTデバイス(Mac)の設定
node.jsがインストールされているか確認
$ node -v v12.11.1
バージョン情報が返ってこなかったら、Node.js / npmをインストールしてください。
$ mkdir -p IoT/certs $ cd IoT
ライブラリをインストールします。
$ npm install aws-iot-device-sdk
$ aws-iot-test $ npm ls --depth=0 /Users/kanehiroyuu/Documents/develop/IoT └── aws-iot-device-sdk@2.2.1
下記の構成になるように証明書を配置してください。
IoT ┠━ certs ┃ ┠━ xxxxxxxx-private.pem.crt ┃ ┠━ xxxxxxxx-certificate.pem.key ┃ ┗━ VeriSignCA.crt ┃ ┣━━ publish.js ┣━━ node_modules ┗━━ package-lock.json
ルート証明書を貼り付けます。
$ vi certs/VeriSignCA.crt -----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM 9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L 93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU 5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy rqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE-----
●publish.js
var awsIot = require('aws-iot-device-sdk'); const fs = require('fs'); var device = awsIot.device({ keyPath: './certs/576532b315-private.pem.key', certPath: './certs/576532b315-certificate.pem.crt', caPath: './certs/VeriSignCA.crt', clientId: 'nouser' + (Math.floor((Math.random() * 100000) + 1)), host: 'a24fi7cs6z93z5-ats.iot.ap-northeast-1.amazonaws.com' }); // Mockデータ var value = { name: "Yuu", age: 99, location: "Tokyo" }; device.on('connect', function() { console.log('connect'); setInterval(function() { device.publish('test', JSON.stringify(value)); }, 5000); });
今回はMac なので静的なモックデータ使っていますが、実際はIoT機器で観測データやトリガーをJSON.stringify(value)のところに渡して非同期で流していきます。
実行
$ node publish.sh
キューの確認
キューがもりもりたまっていきます。
確かにキューがあります。
お疲れ様です。
@see
- AWS IoTを使って水を発注してみる
- [AWS IoT] MQTTを使用して、Lambdaからブラウザを更新する方法〜aws-iot-device-sdk(aws-iot-sdk-browser-bundle.js)を使用する場合〜
- 初めてのAWS IoTでDeviceSDK(Node.js)を使ってラズパイのLEDチカチカ
- [Sy] AWS IoT Device SDK for JavaScript を Mac にインストールして サンプルアプリケーションを動かす(device-example.js)