『 モノワイヤレス(mono-wireless) データをラズベリーパイ経由でAWSへアップロード 』する方法を記載します。下記の手順を上から順番にAWSの設定から実行してみてください。
AWSの契約方法や簡単な使い方はこちらを参考にしてください。
【AWS IoT Core】
1.モノを作成(デバイスエンドポイントメモ)
①IoT Core → 管理 → すべてのデバイス → モノ
②モノを作成
③1つのモノを作成
④モノの名前:例:test
⑤新しい証明書を自動生成
⑥証明書にポリシーをアタッチ -> モノを作成
⑦証明書をダウンロード
⑦ー1:デバイス証明書:ダウンロード
⑦ー2:パブリックキーファイル:ダウンロード
⑦ー3:プライベートキーファイル:ダウンロード
⑦ー4:ルートCA証明書(RSA2048):ダウンロード
⑧エンドポイントメモ:
設定→デバイスデータエンドポイント:**********-ats.iot.ap-northeast-1.amazonaws.com
2.ポリシー作成
①AWS IoT -> セキュリティ -> ポリシー
②ポリシーを作成
③ポリシー名:任意
④ポリシードキュメント
⑤ポリシー効果:許可
⑥ポリシーアクション:*
⑦ポリシーリソース:*
3.モノにポリシーをアタッチ
①IoT Core → 管理 → すべてのデバイス → モノ
②作成したモノをクリック
③証明書タブ
④証明書IDで作成した証明書をクリック
⑤ポリシータブ
⑥ポリシーをアタッチ
⑦作成したAWS IoTポリシーを選択
⑧ポリシーをアタッチ
【IAM】
4.IAM 作成
『モノワイヤレス(mono-wireless) センサーデータをラズベリーパイ経由でAWSへアップロード』では次に、DynamoDBアクセスユーザー、ロール作成、Streamlitアプリmain.pyからアクセス接続に必要な、アクセスキー、シークレットアクセスキーの取得
①ユーザの追加
②ポリシーを直接アタッチする
<許可ポリシー>
許可を追加
AmazonDynamoDBFullAccesswithDataPipeline
AmazonDynamoDBReadOnlyAccess を追加
アクセスキー、シークレットアクセスキーの取得
セキュリティ認証情報タブ
アクセスキーを作成
コマンドラインインターフェイス(CLI)
アクセスキー、シークレットアクセスキーをメモ
【DynamoDB】
テーブル
テーブルの作成
テーブル名:任意
パーティションキー:timestamp :文字列
テーブル設定:デフォルト設定
【AWS IoT Core】
6.メッセージのルーティングルール作成(ラズパイからPublish(送信)したSubsribe(受信)した際のルールを指定)※Subsribe(受信)した際、5で作成したDynamoDBにデータを蓄積
AWS IoT → メッセージのルーティング → ルール
ルールを作成
ルール名:任意
作成
SQLステートメント
SQLのバージョン:最新
SQL ステートメント:SELECT * FROM ‘test’ ← ‘test’トピック名 :ラズパイから取得する仮のテーブル名として理解(ラズパイ側で今回’test’というトピック名の引数を指定したため
ルールアクション
アクション1
DynamoDB(DynamoDBテーブルにメッセージを挿入)
テーブル名:5で作成したテーブル名
パーティションキー:timestamp → SID
パーティションキーのタイプ:STRING
パーティションキーの値:${timestamp()} → SID
【追加】ソートキー。timestamp
この列にメッセージデータを書き込む – オプション:payload
オペレーション – オプション:INSERT
IAMロール:新しいロールを作成(名前任意)
【IAM】
7. 4で作成されたユーザーに対して、6で作成されたIAMロールを追加
IAM → ユーザー → 作成したユーザー
許可タブ
許可ポリシー
※6の最後に作成したロール名が記載されたポリシー名を検索
****には6の最後に作成したロール名が記載されているポリシーを追加
aws-iot-rule-****-action-1-role-****
8.ラズパイ構築(ログインユーザー:piの場合)
ここで必要なもの(購入をお願いします)
センサーに豆電池を挿入
MONOSTICKをラズパイに挿入し、/dev/ttyUSB0が認識(表示)されていることを確認
Google Drive : MEIJI-share > Raspi_AWS_Stream_env
raspi_meiji_awsフォルダをダウンロードし、home/pi/ へコピー
1で生成した下記3証明書ファイルをraspi_meiji_awsフォルダにコピー(既に利用されている証明書が存在する場合、ファイル名変更又は、tempフォルダを作成し、移動
フォルダ内【pipython.py】編集
client.tls_set(ca_certs=’./rootCA.pem’, certfile=’./***************************-certificate.pem.crt’, keyfile=’./***********************-private.pem.key’, tls_version=ssl.PROTOCOL_SSLv23)
client.tls_insecure_set(True)
client.connect(“********-ats.iot.ap-northeast-1.amazonaws.com”, 8883, 60) #Taken from REST API endpoint – Use your own.
上記****には、1で生成したファイル名を記載
******-certificate.pem.crt
******-private.pem.key
******-ats.iot.ap-northeast-1.amazonaws.com:1で生成したデバイスエンドポイントを記載
※【鈴木】paho.mqtt.client がないとエラーが出るので、下記を実行
$ sudo pip install paho-mqtt
9.pipython.pyの実行
ラズパイターミナルより、pipython.pyの実行
python pipython.py
加速度、温速度データのPublish(送信)ログが生成されていることを確認
※【鈴木】シリアルが認識できないエラー出力あり cannot open serial port…
/dev/ttyUSB0 として認識しているか $ dmesg で確認すること
【AWS IoT Core】
10.Publish(送信)されたログデータをAWS IoT – MQTTにてSubscrbe(受信)確認
AW IoT -> テスト -> MQTTテストクライアント
トピックをサブスクライブする
トピックのフィルター:test
サブスクライブボタンクリック
トピックに、ラズパイで生成されたセンサーデータを受信されていることを確認
11.MQTTにてSubscrbe(受信)されてデータがDynamoDBに蓄積されていることを確認
DynamoDB -> テーブル -> 設定の更新
作成したテーブル名を選択
テーブルアイテムの探索
フィルター -> 実行する
返された項目にデータが蓄積されていることを確認
※【鈴木】データの蓄積が確認できない。「DBの名前が問題か紐づけられていない可能性あり」 ラズパイOSのTopicとメッセージルーティングのルールに記載するトピックを合わせる必要あり!! はまる。ユーザごとに指定する必要あるか?
12.main.pyの編集
手順4で生成した2つのキーに変更
aws_access_key_id
aws_secret_access_key
==========================================================
AWS EC 構築
13. EC2起動
インスタンス起動(名前:任意)
AWS Linux
Instance type: t2.small
新しいキーペアの作成(名前:任意)
Key pair type : RSA
Private key file format : .pem
pemファイル保存(ローカル)
ファイアウォール (セキュリティグループ)
下記チェックをつける
■からの SSH トラフィックを許可する
■インターネットからの HTTPS トラフィックを許可
■インターネットからの HTTP トラフィックを許可
15. Linuxインスタンスへの接続 : (ローカルPC)
パブリック IPv4 DNS確認
EC2 -> インスタンス
ec2- ***-***-***-***.ap-northeast-1.compute.amazonaws.com
ssh接続(pemファイルが保存されたパスにて下記コマンド実行)
ssh -i “*****.pem” ec2-user@ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
更新確認
sudo yum update – y
Pythonインストール
sudo yum install python3 git -y
必要ライブラリインストール
pip3 install streamlit
pip3 install streamlit-authenticator==0.1.5
pip3 install matplotlib
pip3 install streamlit-autorefresh
pip3 install xlsxwriter
pip3 install altair
pip3 install boto3
pip3 install streamlit-aggrid 【鈴木追加 4/7】
16. LinuxインスタンスへStreamlitアプリファイル群をコピー(ローカルPC)
※pemファイルが保存されたパスにて下記コマンド実行
※pemファイル名、IPアドレスは適宜変更
例:
scp -i C:\meiji_sensor.pem -r C:\meiji_aws_product\ ec2-user@ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com:/home/ec2-user/
17.セッション管理【TMUX】インストールし、セッション維持でStreamlit起動
AWS:
EC2 → ECインスタンスIDをクリック → 接続
EC Instance Connectタブ
接続
Amazon Linux 2 AMI起動
TMUXインストール
sudo yum install tmux -y
tmux new -s mono-test001(セッション名は任意)
4でコピーしたStreamlitアプリを起動
streamlit run main.py

<このタイミングで読んで欲しい1冊> (詳細は、画像をクリック)
あわせて読んで欲しい記事はこちら

コメント