SORACOM Funnel で IMEIやIMSI(といったヘッダ情報)を付けずにそのままデータを流す方法 (AWS IoT使う)

ソラコムサンタが街にやってくる

#ソラコムサンタ という、ハッシュタグ #ソラコムサンタ をつけると、もしかすると実装されるかも!という、なんともユルい企画がございます

さすがに12月なのでどんなお願いが来てるのかをチョット見たところ、気になる #ソラコムサンタ を見つけました

確かに。

どういうお願い?

SORACOM Funnel というクラウドアダプタサービスがあります。
最小構成だと4つくらいのパラメータを設定してもらうだけで AWS IoT や Azure Event hubs にデータを送れるようになるというサービスです。

実際に SORACOM Funnel を設定して、デバイスから下記のように送ってみます


curl -H "Content-Type: application/json" -d '{"my_name": "is max!!", "old": 39}' funnel.soracom.io

するとクラウドサービス側では、こんなJSONで受け取ることになるのです

AWSIoTで受けた場合の例
{
  "operatorId": "OP0099999911",
  "timestamp": 1513816876880,
  "destination": {
    "resourceUrl": "https://AWSIOT-ENDPOINT.iot.us-west-2.amazonaws.com/rawdata/#{imsi}",
    "service": "aws-iot",
    "provider": "aws"
  },
  "credentialsId": "awsiot-dataaccess0",
  "payloads": {
    "my_name": "is max!!",
    "old": 39
  },
  "imei": "359999999999991",
  "sourceProtocol": "http",
  "imsi": "449999999999993"
}

デバイス側から送ったデータが payloads というキーに押し込まれて、その他便利に使ってもらえる付帯情報がくっつくフォーマットです
一見便利そうなのですが、このJSONを例えば Amazon Elasticsearch Service へ流したりすると、データの加工のひと手間が必要だったりと、逆に面倒ということもあるので「付帯情報をつけないオプションって無いのかなー?」というお願いということで理解しました!

ソラコムサンタの代わりにお届け(限定的ですが)

AWS IoTを使うということになりますが、論よりコード
AWS IoT のルール (今はACTって名称になりましたね) で、こんな感じに設定してみてください

SELECT payloads.* FROM 'rawdata/#'

payloads.*が肝です。これで「payloadsの中身を取り出す」という宣言になります
すると rawdata/ トピックに投げられたJSONは、下記のように再構成されます

{
  "my_name": "is max!!",
  "old": 39
}

でも、困るような気が。

データ内に識別できる情報が抜けてしまっていて、どのデバイスからのデータかわからなくなってしまうと思います
そのため、例えば IMSI (International Mobile Subscriber Identity) を加える場合は、こんな感じになります

SELECT payloads.*, imsi FROM 'rawdata/#'

imsiがポイントです。下記のように取り込まれます

{
  "my_name": "is max!!",
  "old": 39,
  "imsi": "449999999999993"
}

おわりに

どうでしょう?お届けに足りる内容であればうれしいです!

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.