投稿日

SORACOM Air メタデータサービスのご紹介

松井です。

この記事は SORACOM ユーザーグループ発足記念リレーブログ の 11/27 分です。

本日は私が開発に関わったメタデータサービス機能がリリースされましたので、使い方や動作サンプルをご紹介したいと思います。

メタデータサービスとは

一言で言うならば、Air 経由で特殊な URL に HTTP アクセスする事で、認証なしで SIM(Subscriber) の情報を取得したり、API実行を行える、という機能です(グループ単位で機能のコントロールが可能)。
サービスに関するドキュメントは、 ソラコム公式開発者サイト「メタデータサービスを設定する」を参照してください。

メタデータサービスを有効にする

まず、メタデータサービスを使えるようにしましょう。
コンソールのグループの設定画面から設定対象のグループを開くと、メタデータ関連の設定項目が増えています。

下記の画面のように設定してみて下さい。

メタデータ設定画面

最後に「保存」を押すのを忘れないようにしましょう。

メタデータサービスにアクセスする

Subscriber 情報へのアクセス

メタデータサービスが有効になっている端末で、http://metadata.soracom.io/v1/subscriber
にアクセスすると、SIMの情報を取得する事が出来ます。

例えば SORACOM Air SIMで通信を行っている Raspberry Pi からは、

pi@raspberrypi ~ $ curl -s http://metadata.soracom.io/v1/subscriber | jq .
{
  "imsi": "44010xxxxxxxxxx",
  "msisdn": "81xxxxxxxxxx",
  "ipAddress": "10.xxx.xxx.xxx",
  "apn": "soracom.io",
  "type": "s1.fast",
  "groupId": "xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx",
  "createdAt": 1437119287341,
  "lastModifiedAt": 1448518406229,
  "expiredAt": null,
  "terminationEnabled": false,
  "status": "active",
  "tags": {
    "name": "moto"
  },
  "sessionStatus": {
    "lastUpdatedAt": 1448518167276,
    "imei": "xxxxxxxxxxxxxxx",
    "location": null,
    "ueIpAddress": "10.xxx.xxx.xxx",
    "dnsServers": [
      "8.8.8.8",
      "8.8.4.4"
    ],
    "online": true
  },
  "speedClass": "s1.fast",
  "moduleType": "nano",
  "plan": 1,
  "expiryTime": null,
  "operatorId": "OPxxxxxxxxxx",
  "createdTime": 1437119287341,
  "lastModifiedTime": 1448518406229
}

のように curl コマンドで Subscriber に関する情報取得出来ます。

Subscriber に関する情報の更新

さきほど書き込みを行える設定にしておいたので、試しにタグを付与してみましょう。

pi@raspberrypi ~ $ curl -s http://metadata.soracom.io/v1/subscriber | jq .tags
{
  "name": "moto"
}
pi@raspberrypi ~ $ curl -sX POST -d '{"foo":"bar"}' -H Content-Type:application/json \
  http://metadata.soracom.io/v1/subscriber/update_tags | jq .tags
{
  "foo": "bar",
  "name": "moto"
}

JSON を HTTP POST するだけで、簡単にタグを追加する事が出来ました。
何らかの状況をデバイスから報告する用途に使えそうですね。

ユーザデータへのアクセス

ユーザデータは、 http://metadata.soracom.io/v1/userdata にアクセスするだけで取得が出来ます。

例えば、何らかのスクリプトをデバイスで実行したいとしましょう。

スクリプトをユーザデータに保存しておき、Raspberry Pi からダウンロードして実行してみます。

pi@raspberrypi ~ $ curl -s http://metadata.soracom.io/v1/userdata
#!/bin/bash
echo Hello SORACOM Air
pi@raspberrypi ~ $ curl -s http://metadata.soracom.io/v1/userdata | bash
Hello SORACOM Air

curl でダウンロードして pipe で bash に渡して実行する事が出来ました。

cron等でこの処理を定期的に実行するようにしておくと、コンソールからユーザデータを更新するだけで、自動実行するスクリプトを変更する事が出来ます。

応用編

ユーザデータには任意のデータを入れておけるので、例えば HTML コンテンツを置いておく事も出来ます。
https://soracom-files.s3.amazonaws.com/speed_class_changer.txt
の内容を、ユーザデータに保存してみましょう。

ユーザデータ設定

保存したら、ユーザデータのURL http://metadata.soracom.io/v1/userdata をブラウザで開きます。

Speed Class Changer

こんな画面が開いて、今の速度クラスが自動的に選択されたと思います。
他のボタンを押せば、速度クラス変更がすぐに行われます。

もしユーザデータの設定をするのが面倒だなと思ったら、代わりに
http://soracom-files.s3.amazonaws.com/speed_class_changer.html
を開いても同じ物が見られます。

※ただし、前述のメタデータ機能の有効化とクロスオリジンの設定は事前にしておく必要があります。
また実際に速度変更をするには、読み取り専用のチェックボックスを外しておく必要があります。

速度変更を実際に行っている部分は下記のようなコードとなっており、やはり JSON の HTTP POST を行っているだけです。SDKやクレデンシャルが必要ないので、非常に簡潔に記述できます。

function changeSpeedClass(speedClass) {
  $.ajax({
    type: "POST",
    url: baseurl + "/subscriber/update_speed_class",
    headers: {'content-type':'application/json'},
    data: JSON.stringify({"speedClass":speedClass}),
    success: function(subscriber){
      update(subscriber)
    }
  });
}

スマートフォンアプリケーションからも、同じような形で呼び出せると思いますので、是非試してみてください。

まとめ

メタデータサービスを使うと、デバイスが自分の使っている回線のコントロールを簡単に行えるようになります。
またユーザデータと Subscriber のタグを組み合わせて、(さながら EC2 インスタンスのように)ロールベースでデバイスの初期化プロセスを実行したりする事が出来ます。

是非活用してみてください!

リレーブログ第2弾 最終日の 11/30 は、アピリオの岩崎さんです。

12/1 からはいよいよ「ソラコムアドベントカレンダー」が始まります。
奮ってご参加ください!