見出し画像

IoT で使用する Amazon CloudWatch - その4

IoT で使用する Amazon CloudWatch - その4

前回( IoT で使用する Amazon CloudWatch - その3 )の続きです。

前回は Amazon Web Services を利用するために必要なアカウント取得の手順と Amazon Web Services のAPIとSDKについて解説しました。

今回は実際にIoTデバイスから Amazon CloudWatch を使用する具体例として、 Raspberry Pi から AWS SDK を利用してカスタムメトリクスにデータを登録する方法を説明します。

前回の記事で作成したアカウントのアクセスキーとシークレットキーが必要になりますのであらかじめ準備して進めて下さい。

Raspberry Pi のOSは公式にサポートされている Rasbian を使用します。
Rasbian は初期状態で Python が利用できるので、AWSへのアクセスには AWS CLI を使用します。

AWS CLI のインストール

AWS CLIはコマンドラインでAWS SDKを使用できるツールキットで、Python で開発されています。

AWS CLI は Python のパッケージ管理システムである pip でインストールするので、まず以下のコマンドで pip をインストールします。

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py

pip が使えるようになったら AWS CLI をインストールします。

$ pip install awscli
$ aws --version ←動作確認

インストール後の動作確認のため、バージョン情報を表示しています。
正常にインストールが完了していれば以下のようにバージョン情報が表示されます。(バージョン番号はインストール実行時のものになります)

pi@raspberrypi:~ $ aws --version
aws-cli/1.16.4 Python/2.7.9 Linux/4.4.34-v7+ botocore/1.11.4

AWS CLI の初期設定

AWS CLI で Amazon CloudWatch にデータを送るためにAWSアカウントの設定を行います。

AWS CLI の初期設定を行うには aws configure コマンドを実行します。
アクセスキーとシークレットキーの入力が求められますので、前回の記事で作成したアカウントのものを入力して下さい。

$ aws configure
AWS Access Key ID [None]: (アクセスキー) ←前回の記事で作成したもの
AWS Secret Access Key [None]: (シークレットキー) ←前回の記事で作成したもの
Default region name [None]: ap-northeast-1
Default output format [None]: json

これで AWS CLI の準備は整いました。

Amazon CloudWatch へのデータの送信

この記事では Amazon CloudWatch の「カスタムメトリクス」を使用してIoTデバイスで計測した値のモニタリングと可視化を行っています。

Amazon CloudWatch では登録したデータを分類する概念として以下のような用語を使用します。
メトリクス - Amazon CloudWatch でモニタリングする値
ディメンション - メトリクスを識別する名前と値のセット
名前空間ネームスペース - メトリクスを分類するグループ

具体的な例として、以下のような全国に設置した気象観測用のセンサーからデータを集めるシステムを考えてみます。

計測する値 : 気温, 気圧, 湿度
観測地点 : 県庁所在地

これを Amazon CloudWatch のカスタムメトリクスに登録する際の分類として、例えば以下のようなディメンションと名前空間の指定が考えられます。

メトリクス - 気温, 気圧, 湿度の値(計測する値の種類)
ディメンション - 県庁所在地の都市名(観測地点名)
名前空間ネームスペース - 観測地点をまとめる地方の名称(北陸、関東、近畿など)

データを分類する際の概念が分かった所で、実際にデータを登録してみましょう。

Amazon CloudWatch にデータを登録する AWS CLI のコマンドは以下の通りです。

$ aws cloudwatch put-metric-data --namespace (名前空間) --dimensions (ディメンション) --metric-name (メトリクス) --timestamp (計測時刻) --value (計測値)

実行例
$ aws cloudwatch put-metric-data --namespace aibax/test --dimensions DeviceId=Terumo --metric-name BodyTemp --timestamp 2018-08-30T10:00:00.000+09:00 --value 36.6

タイムスタンプの時刻は ISO 8601 形式で指定します。
タイムスタンプを指定しない場合はサーバの受信時刻が設定されるので、センサーの時刻が不正確な場合などは指定しないことも可能です。

複数の計測値をまとめて送信する場合は、JSON形式で送信することも可能です。(1リクエストに最大20データまで)

AWS CLI リファレンス - put-metric-data
https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-data.html

コードサンプル

実際にセンサーのデータを Amazon CloudWatch に登録する場合、センサーからのデータの取得と AWS CLI のコマンドの実行を定期的に実行することになります。

Kanazawa IoT のハンズオン勉強会で使用したコードがこちらです。
https://github.com/KanazawaIoT/seminar/blob/master/vol.7/main.rb

まとめ

今回は AWS CLI を使用して Amazon CloudWatch にデータを登録する方法についてまとめてみました。

次回より、実際に収集したデータを利用してグラフへの可視化や異常値を検知した際の通知などのデータの利用方法に入っていきます。

この記事が気に入ったらサポートをしてみませんか?