mockmock × AWS IoT Core × Lambda を試してみる
AWS IoTを使ってみたかった
ちょっとたしなんでみたいと思ったので[AWS IoT Core]を触ってみる。
構成案
手近に手軽なIoTのデバイスがなかったのでmockmockを使ってデバイス側についてはダミーとする。
IotCoreからの行先についてはノープラン。
とりあえずLambdaあたりにしておくことにする。
※Lambdaに飛ばせられればあとはどうとでもなるだろうという目算もあった。
mockmock:初期設定
最初にmockmockのアカウント作成。
SignUpからさくっと登録。簡単である。
AWS IoT Core
続いてAWS IoT側の設定。
証明書を作成する。
作成した各ファイルをDL
※後々ハマった(※1)のだが、ここで「ルートCAのダウンロード」とあるリンク先にて証明書ファイルをDLしておく必要もある。
「ダウンロード」と書いてあるから、これを押すとDLが始まるのかと思ったが、そうではなかった。
ポリシー
ポリシーのアタッチを選択する
ポリシーがまだない場合はここから新規作成。
※これまた後々ハマる(※2)が、ここのリソースARNでこれを設定してしまうのはダメっぽい。
作成したポリシーは証明書にアタッチしておく。
Action?ルール?を設定
予定通りLambdaの関数を呼び出そうとするが、はたと気が付く。
呼び出し先の関数がない。
とりあえず動いていることがわかればいいので、前に作ったSlackへ飛ばすだけの関数を使いまわしてみることにする。
こんなやつ。
def lambda_handler(event, context):
get_item_name = event['item']
# 送信確認用にSlackへ飛ばす
#送信先URL
token = "xoxp-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
channel = "XXXXXXXXX"
url = "https://slack.com/api/chat.postMessage?token={}&pretty=1&channel={}&text={}"
import urllib.parse
quote_item_name = urllib.parse.quote(get_item_name)
url = url.format(token, channel, quote_item_name)
#API実行
import urllib.request
urllib.request.urlopen(url)
return "res:OK"
これでAWS側の設定はOKなはずなのでmockmockへ戻って各設定を行う。
エンドポイントも忘れずに参照しておく。
mockmock側の設定
プロジェクトの作成
簡単かと思ったら認証でエラー。
上記で書いたRootCAのところでハマる(※1)。
どこからDLすりゃいいのかわからなかったが、よくよく読んでみると「ルートCAのダウンロード」の先のページのどれかでよさそうな感じなので、適当にDLして設定してみたところOK。[プロジェクトを作成しました]となった。
※ここから[RSA 2048 ビットキー: VeriSign クラス 3 Public Primary G5 ルート CA 証明書]のをDLして設定した。
データテンプレート、グループの作成
- データ送信先パス:/topics/test/test
- リクエストメソッド:POST
テンプレートについては「直接編集」すると戸惑うかもしれない。
「直接編集」といっても、送信できるデータを直接作成するということではなさそう。
KeyとValueにそれぞれ以下を設定してとりあえず一回試してみる。
"item": "from mockmock 01"
エラーである。
mockステータスのところでテスト送信ができそうなのでここから送信してみるが、やはりエラー
よくわからない。かなり煮詰まった。
いろいろと試行錯誤してみた結果
ポリシーのリソースのところを*にしてみたら通った。(ハマった点※2)
要するに外からのアクセスを許容してなかったってことなのか?
上手くいった設定を以下に残しておく。
AWS IoT Core:証明書
ポリシードキュメント
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
モノ
無し
AWS IoT Core:Act(ルール)
〇ルールクエリステートメント
SELECT * FROM 'test/test'
〇アクション
Lambda関数を呼び出す
mockmock
プロジェクト
〇プロトコル
HTTPS
〇送信先ホスト
AWS IoT Core のエンドポイント
〇各証明書
DLしたもの
データテンプレート
〇HTTP Request Body / MQTT Payload
mockグループ
〇mockステータス:データ送信先パス
/topics/test/test
こんな感じの結果になった
状態遷移を適当にいじると時間経過で次に呼び出されるものが確率で変更されるような感じ。
バリュージェネレータを使うとリストの中の値を指定した方法で抽出して設定してくれる。
まとめ
ということで、mockmock × AWS IoT Core × Lambdaの試しは終了。
Lambdaの関数そのものは何一ついじらずにAWS IoT Core と連携させてデバイス無しでそれの検証ができたというのは便利なんだろうなと思った。
この後、実際にデバイスを用意してどう送信するといいかまでわかると検証としては良かったのかもしれない。
AWS IoT Coreを試したのか、mockmock を試してみたのかよくわからないが、やってみたかったことはできたので良しとしておこう。
Author And Source
この問題について(mockmock × AWS IoT Core × Lambda を試してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/ryo_naka/items/feaeee2918bbdd2036e6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .