実施前に
- AWSの各種サービスの概要は少しでも知っておいた方が良い
- 主に cloud9、Kinesis、DynamoDB、MQTT などの用語の意味くらいは知っておく、でないとハンズオンがやっただけになってしまい、理解度が深まらない
- AWSに関連しないITの用語として ルート証明書、公開鍵、秘密鍵
- ハンズオン前に自身がAWSで知っていたこと
- EC2 / cloud9 / Lambda / DynamoDB / API Gateway / RDS / Kinesis Data Stream / Elasticsearch など
- Pythonは知らなくても実施できる
- コマンド(ターミナル)相当の使い方は知っていること、cloud9の操作に必要。
- 使うリージョンはAWS IoT Coreが動くリージョンならば良い、バージニア、東京、オレゴンどれでも良い
Elasticsearchについて
時間かかるときがある
- Elasticsearchのインスタンスが使えるようになるまでがめっちゃ時間かかる
- ハンズオンの説明では10分程度の記載があるが、1時間以上かかっても使えるようにならなかった。
us-west2
(オレゴン)リージョンを使ったためかは不明。
- ハンズオンの説明では10分程度の記載があるが、1時間以上かかっても使えるようにならなかった。
- 過去に東京リージョンでインスタンス構築した時は確かに15分程度だったような記憶がある
課金・利用料
- Elasticsearchは停止できないため構築すると課金がずーっとされる、早くハンズオンを終え、確認したら消しましょう。t2microでも $1/日 くらいかかります
エッジデバイス側のデータ送信のプロセス
- エッジデバイス側としてのcloud9のpythonプロセスは起動しっぱななしか、何らか処理前に起動する
- 実行しっぱななしは、ctrl+cでプロセスを終了する
各種用語
- デバイスシャドウ reported , desired の意味を知っておく
項目 | 意味 |
---|---|
reported | デバイス側の状態がreportedに格納される |
desired | AWS クラウド側からの指示がdesiredに格納される |
delta | reported , desiredが異なる場合に存在する |
動かない、エラーかなっと思ったら
トピック名の誤り ルールステートメント
- デフォルト
SELECT * FROM 'iot/topic'
- 自身の設定に変更する
select * from 'data/sugimoto-device-202105'
API Gatewayでリクエストすると500エラーになる
- API Gateway で「Lambda プロキシ統合の使用」にチェックONであること、チェック忘れると 500 エラー(パラメータの {deviceid} が取得できていない)。
-
ブラウザでURLたたくと
{"statusCode": 500, "headers": {"Access-Control-Allow-Origin": "*"}, "body": "Lambda error. check lambda log", "isBase64Encoded": false}
になる。POSTで飛んでるのかも、postmanで試してみては?
Elasticsearch Kibana
- Kibanaのdiscoverの設定で、timestamp を入力するところで説明にもあるが、 「timestampが見つからないときはデータが届いていない」はcoud9 側でデータ送信を行う必要あり、cloud9(デバイス側) で以下を実行しっぱななしにしておいて Kibanaの設定をしてみる。
$ cd dummy_client
$ python3 device_main.py --device_name sugimoto-device-202105 --endpoint a2xxxxx.iot.us-west-2.amazonaws.com
device_name: sugimoto-device-202105
の実行する。
データが届いていると、
Index patternに timestamp*
を入力すると
Success! Your index pattern matches 1 index.
が表示されるようになっている
Amazon Kinesis Data Firehos, S3への格納
- S3においた gzファイルが windowsの7zipだと解凍失敗する。原因未調査。サクラエディタで開くと見えた。gzなんだけど圧縮されずにテキストファイルとして存在していそう。