共通リソースの利用方法(API仕様など)

前章【My-IoTが提供する共通リソース一覧】に記載した共通リソースのうち、Lambdaを利用した以下のリソースについて説明します。

No.

サービス

用途

2

Lambda

IoTデータへのアクセス

4

Lambda

イベントデータの登録

5

Lambda

イベントデータの制御

6

Lambda

IoT Coreへのメッセージ送信

No2 IoTデータへのアクセス

  • Lambda関数名:myiot-rel-es-access-lambda

No1のMy-IoTデータストア(Elasticsearch)へのアクセスに利用するLambdaです。
カスタムLambdaからこのLambda関数を呼び出すことで、My-IoTデータストアのデータへアクセスすることが可能になります。
データ検索の際に使用するインデックス名などのMy-IoTデータストアの仕様については、 My-IoTデータストア仕様 を参照してください。

また、インデックスの指定時に利用するテナントIDは、Lambdaの環境変数から取得することができます。
カスタムLambdaからクラウドアプリのコネクタIDに紐づいたデータを検索して利用する場合は、 環境変数からクラウドアプリに設定されているコネクタIDを取得し、queryでコネクタIDに紐づいているデータを検索して利用する必要があります。

【参考】用途別のクラウドアプリケーション構築 パターン1パターン5
【参考】Elasticsearch Guide

  • 入力(JSON形式)

key名

必須

説明

method

文字列

操作内容。追加(Post)、検索(Get)。

index

文字列

インデックス名。{テナントID}_YYYY.MM.DDの形式で指定する。

item

dict

追加の場合必須。追加したいデータ(JSON形式)

query

dict

検索の場合必須。検索条件(JSON形式)
フォーマットはElasticsearchの検索(_search)APIのリクエスト仕様と同じ。
注意事項:検索結果の件数が多くなるほど処理時間が長くなり、30秒以上かかる場合はstatusCode:408エラーが返る。
できるだけ本引数のqueryキーにて条件を絞り込み、またはsizeキー(上限10000)にて一度に取得する件数を調整したうえで検索を実施すること。
  • 出力(JSON形式)

key名

必須

説明

statusCode

数値

ステータスコード。正常終了200、不正な引数400、存在しないindex404、タイムアウト408、内部エラー500。Elasticsearchアクセス時のエラーコードはそのまま返す。

body

dict

実行結果。以下を要素として持つ。

 message

文字列

エラーメッセージ。エラー時のみ存在する。

 result

dict

検索の場合、引数の条件に合致したデータ(JSON形式)。それ以外は空{}。

No4 イベントデータの登録

  • Lambda関数名:myiot-rel-dynamodb-access-lambda

No3のイベントテーブル(DynamoDB)にイベントデータを登録する際に利用するLambdaです。
カスタムLambdaからこのLambda関数を呼び出すことで、イベントテーブルへイベントデータを登録することができます。

【参考】用途別のクラウドアプリケーション構築 パターン5
【参考】Boto3 documentation

  • イベントテーブル名:sip-sample-event-dynamodb

  • イベントデータ構造

プロパティ名

必須

PartKey

SortKey

説明

source

文字列

IoTセンサーのデバイスIDなど、イベント発生元を一意に表す文字列

time

数値

イベント発生時刻(Unixtime)(秒単位)

name

文字列

開発者がイベントデータ登録時に設定したイベント名

detail

JSON

イベント内容の詳細

closed

数値

完了(クローズ)フラグ。 0:未完了 1:完了
※イベント登録時は 0 を登録すること
  • 入力(JSON形式)

key名

必須

説明

method

文字列

操作内容。追加(Put)、更新(Update)、検索(Query)。

table

文字列

操作対象のDynamoDBテーブル名。

params

dict

リクエストパラメータ。各methodについて以下の通り
データ構造については【イベントデータ構造】を参照
・追加(Put): DynamoDBテーブルに追加するデータ
・更新(Update): Boto3モジュール 1 のDynamoDB.Table.update_item() のRequestSyntaxに準ずる
・検索(Query): Boto3モジュール 1 のDynamoDB.Table.query() のRequestSyntaxに準ずる
  • 出力(JSON形式)

key名

必須

説明

statusCode

数値

ステータスコード。正常終了200、不正な引数400、存在しないindex404、タイムアウト408、内部エラー500。

body

dict

実行結果。以下を要素として持つ。

 message

文字列

エラーメッセージ。エラー時のみ存在する。

 result

dict

内容は各操作に対応するBoto3モジュール 1 のAPIのResponseSyntaxに準ずる。

1(1,2,3)

AWS SDK for Python (Boto3)

No5 イベントデータの制御

  • Lambda関数名:myiot-rel-dispatch-event-lambda

イベントデータを通知する際に利用するLambdaです。
No3のイベントテーブル(DynamoDB)からイベントデータを受け取り、カスタムLambdaにイベントデータを通知します。

【参考】用途別のクラウドアプリケーション構築 パターン6

  • 入力(JSON形式)

key名

必須

説明

source

文字列

イベント発生元。

time

数値

イベント発生時間(Unixtime)。

name

文字列

イベント名。

detail

dict

イベント内容の詳細。

closed

数値

完了(クローズ)フラグ。 0:未完了 1:完了
※イベント処理後は 1 を登録すること

No6 IoT Coreへのメッセージ送信

  • Lambda関数名:myiot-rel-publish-mqtt-lambda

No.7のIoT Coreを経由してエッジにメッセージを送信する際に利用するLambdaです。
カスタムLambdaからこのLambda関数を呼び出すことで、対象のエッジにメッセージを送信することができます。

引数として指定するテナントIDは、環境変数から取得することができます。

【参考】用途別のクラウドアプリケーション構築 パターン6
【参考】MQTT

  • 入力(JSON形式)

key名

必須

説明

tenantId

文字列

テナントID。

edgeId

文字列

Publish対象のエッジID。

payload

dict

送信したいメッセージ内容。
JSON文字列に変換されて送信されます。
送信可能なサイズはJSON文字列に変換後のサイズで128KB未満です。

qos

数値

QoSの値。0または1が指定可能。

  • 出力(JSON形式)

key名

必須

説明

statusCode

数値

ステータスコード。正常終了200、不正な引数400、存在しないindex404、タイムアウト408、内部エラー500。

body

dict

実行結果。以下を要素として持つ。

 message

文字列

エラーメッセージ。エラー時のみ存在する。

環境変数

カスタムLambdaでは、下記の環境変数が利用可能です。

My-IoTで使用できる定義済み環境変数については、下記のとおりです。

環境変数名

説明

TENANT_ID

クラウドアプリをインストールしたユーザーのテナントID

CONNECTOR_ID

クラウドアプリに設定されているコネクタIDと内包元コネクタID
文字列の1次元配列をJSON文字列に変換したものが格納されている
ex: ["connectorID01", "connectorID02"]

共通リソースの利用時にテナントIDなどを指定する必要がある場合は、上記の定義済み環境変数から取得して設定してください。