AWS

AWS IoT Core と SQSの連携

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

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)