SORACOM Air メタデータサービス機能 (以下、メタデータサービス) を利用すると、デバイスで動作するアプリケーションが、デバイスで利用する IoT SIM の情報を HTTP 経由で簡単に取得できます。また、
のチェックが外れている場合は、速度クラスを変更したりタグを更新したりできます。なお、メタデータサービスを使わない場合は、IoT SIM の情報を取得したり更新したりするには、SORACOM API を利用する必要があります。そして SORACOM API を利用するためには、セキュリティを考慮しつつ、デバイスがアクセスできる場所に認証情報を保存する必要があります。
IoT SIM を利用するデバイスでメタデータサービスの URL にアクセスします
メタデータサービスは、IoT SIM を利用するデバイスでメタデータサービスの URL にアクセスすることで、追加の認証情報を省略できる仕組みです。URL にアクセスする時点で、すでに IoT SIM レベルでの認証ができているため、追加の認証情報は不要です。
メタデータサービスのユースケース
メタデータサービスは、デバイス出荷前にデバイスごとの設定の手間を軽減するために、デバイスや環境に依存する設定情報を SORACOM から取得する アーキテクチャで利用することを想定しています。
そのほか、以下のようなユースケースでも利用できます。
デバイスのアプリケーションから IoT SIM 固有の情報にアクセスする
スマホアプリなど、デバイスのアプリケーションから IoT SIM の IMSI や設定されたタグを参照 したり、IoT SIM の速度クラスを変更 したりできます。
デバイスのファームウェア管理
メタデータサービスの ユーザーデータ を利用して、デバイスのファームウェアを遠隔管理できます。たとえば、以下のような動作をするアプリケーションをデバイスに用意することで実現できるユースケースです。
- デバイスの最新ファームウェアのバージョン番号やダウンロード URL といったメタデータを、JSON 形式でユーザーデータに設定します。
- アプリケーションがユーザーデータを定期的に取得し、ファームウェアが更新されていないか確認します。
- ファームウェアが更新されていた場合は、アプリケーションがメタデータサービスを通じて IoT SIM の速度クラスを変更し、ファームウェアをダウンロードします。
- ダウンロードが完了したら、アプリケーションが IoT SIM の速度クラスを元に戻します。
- アプリケーションがファームウェアを更新します。
デバイスのブートストラッピング
IoT SIM に設定されたタグごとに異なる設定で、デバイスのアプリケーションを初期化できます。たとえば、以下のような動作をするアプリケーションをデバイスに用意することで実現できるユースケースです。
デバイス共通で使用できる初期化スクリプトを用意します。
必要に応じて、メタデータサービスの ユーザーデータ に、初期化スクリプトを設定して、ダウンロードして実行することもできます。詳しくは、メタデータサービスを利用してユーザーデータにアクセスする を参照してください。
初期化スクリプトでは IoT SIM に設定された タグ を元に、デバイスを初期化します。
メタデータサービスを設定する
メタデータサービスを有効化し、ユーザーデータなどを設定します。
メタデータサービスの設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
をクリックして「ON」にします。
設定を変更します。
項目 説明 チェックが入っている場合は、メタデータの書き込み (POST / PUT。メタデータサービスの URL を利用して IoT SIM の情報を更新すること) ができません。 チェックが入っている場合は、メタデータの書き込み (POST / PUT) に成功したときのレスポンスボディが空になります。なお、失敗したときは、この設定にかかわらずレスポンスボディにエラーメッセージが返されます。 Cross-Origin Resource Sharing (CORS) のオリジンをひとつ設定できます。Ajax 等でメタデータサービスの URL にアクセスするために必要です。 メタデータサービスを利用して取得する任意のデータ (テキスト形式または JSON 形式) を入力できます。データ形式に合わせて メタデータサービスを利用してユーザーデータにアクセスする を参照してください。 を設定してください。なお、ユーザーデータの取得方法について詳しくは、 のコンテンツタイプを指定します。テキスト形式 (Content-Type: text/plain
) のデータを入力した場合は、チェックを外します。JSON 形式 (Content-Type: application/json
) のデータを入力した場合は、チェックを入れます。をクリックします。
IoT SIM のメタデータサービスが有効化されます。
ユーザーデータのコンテンツタイプは text/plain
または application/json
のいずれかです。それ以外のコンテンツタイプは使用できません。
ユーザーデータに入力できるデータの制限
ユーザーデータに限った上限値は、設定されていません。ただし、グループ設定 全体の JSON のサイズの上限は 8 KiB です。
デフォルトではメタデータを書き込めません
メタデータを書き込めない設定の場合は、以下のエラーメッセージが返されます。
You are not allowed to execute POST request.
You are not allowed to execute PUT request.
メタデータを書き込めるようにするには、
のチェックを外してください。SORACOM CLI / SORACOM API の場合
SORACOM CLI または SORACOM API を利用しても、メタデータサービスの設定を変更できます。
- SORACOM CLI を利用する場合は、
soracom groups put-config
を使用します。 - SORACOM API を利用する場合は、
Group:putConfigurationParameters API
を使用します。
SORACOM CLI / SORACOM API のリクエストボディで指定するプロパティについて
以下の key
と value
のペアを配列で指定します。
想定していない値を指定した場合の動作は、定義されていません。SORACOM CLI / SORACOM API で設定を変更したあとで、SORACOM ユーザーコンソールで意図通りに設定されていることを確認してください。
メタデータサービスを利用して IoT SIM の情報にアクセスする
IoT SIM の情報にアクセスするには、IoT SIM を利用するデバイスで、以下の URL (デバイスが利用する IoT SIM の情報を取得、更新する URL) にアクセスします。
http://metadata.soracom.io/v1/subscriber
これで、認証情報が必要な Subscriber:getSubscriber API
を呼び出したときと同じ情報を取得できます。
メタデータサービスでアクセスできる SORACOM API
SORACOM では、https://api.soracom.io/v1/subscribers/{imsi}
配下の API リクエストが、http://metadata.soracom.io/v1/subscriber
(メタデータサービス) にマッピングされています。つまり、Subscriber:* API
に掲載されている /subscribers/{imsi}
配下のすべての API に、メタデータサービスからアクセスできます。
例:
メタデータの読み取り例: IoT SIM の情報を取得する
メタデータの読み込み例として、IoT SIM の情報を取得する方法を紹介します。メタデータサービスを有効化した IoT SIM を利用するデバイスから、以下のコマンドを実行してください。
$ curl -s http://metadata.soracom.io/v1/subscriber
{
"imsi": "44010xxxxxxxxxx",
"msisdn": "81xxxxxxxxxx",
"ipAddress": "10.xxx.xxx.xxx",
"apn": "soracom.io",
"type": "s1.fast",
"groupId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"createdAt": 1437119287341,
"lastModifiedAt": 1448436038512,
"expiredAt": null,
"terminationEnabled": false,
"status": "active",
"tags": {
"name": "xxxx"
},
"sessionStatus": {
"lastUpdatedAt": 1448419048209,
"imei": "xxxxxxxxxxxxxxx",
"location": null,
"ueIpAddress": "10.yyy.yyy.yyy",
"dnsServers": [
"100.127.0.53",
"100.127.1.53"
],
"online": true
},
"speedClass": "s1.fast",
"moduleType": "nano",
"plan": 1,
"expiryTime": null,
"operatorId": "OPxxxxxxxxxx",
"createdTime": 1437119287341,
"lastModifiedTime": 1448436038512
}
import requests
import json
response = requests.get("http://metadata.soracom.io/v1/subscriber")
if response.status_code == requests.codes.ok:
print(json.dumps(response.json(), indent=2))
else:
print("Status: ", response.status_code)
print("Response: ", response.text)
IoT SIM の IMSI (imsi
)、名前 (tags.name
)、ステータス (status
)、速度クラス (speedClass
) など、IoT SIM の情報を JSON 形式で取得できます。そのほかの情報については、Subscriber:getSubscriber API
を参照してください。
IoT SIM で接続していることを確認するには
IoT SIM の情報を使って、デバイスが IoT SIM で接続していることを確認できます。
具体的には、subscription
と sessionStatus.online
の値を確認します。
まず、以下のコマンドを実行します。
$ curl -s http://metadata.soracom.io/v1/subscriber.subscription
plan01s
ここで planArc01
が表示されたときは、IoT SIM で接続していません。Arc で接続されています。planArc01
以外が表示されたときは、IoT SIM で接続している可能性があります。次のコマンドを実行してください。
$ curl -s http://metadata.soracom.io/v1/subscriber.sessionStatus.online
true
ここで、true
が表示されたときは、IoT SIM で接続しています。なお、初めのコマンドで planArc01
が表示されたときは、2 回目のコマンドで true
が表示されても、Arc で接続されています。
なお、以下のエラーメッセージが表示された場合は、メタデータサービスが「ON」になっていません。詳しくは、メタデータサービスを設定する を参照してください。
Subscriber is not configured to route request to /v1/subscriber
メタデータの読み取り例: クエリ機能を使用する
メタデータサービスのクエリ機能は、メタデータサービスの URL の末尾に .{API レスポンスに含まれる JSON の Key}
という文字列を追加してアクセスすることで、Key に紐づく値のみが取得できる仕組みです。必要な部分だけ取得できるため、通信量を削減できます。
たとえば、メタデータから IMSI だけ取得するには、以下のようにリクエストします。
$ curl -s http://metadata.soracom.io/v1/subscriber.imsi
44010xxxxxxxxxx
import requests
response = requests.get("http://metadata.soracom.io/v1/subscriber.imsi")
print(response.text) # Expect to output IMSI of using SIM (15 digits)
クエリ機能は読み込み専用の機能です
クエリ機能はメタデータの書き込みには対応していません。
メタデータの読み取り例: HTTP クライアントを使わずにクエリ機能でメタデータを取得する
HTTP クライアントを使用しなくても、TCP コネクションが作成できればメタデータを取得できます。JSON のパースが難しいデバイスでも、メタデータを利用できます。
telnet
コマンドで IMSI を取得するには、以下のコマンドを実行します。
$ telnet metadata.soracom.io 80
Trying 100.127.100.127...
Connected to metadata.soracom.io.
Escape character is '^]'.
GET /v1/subscriber.imsi
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Thu, 15 Dec 2016 08:19:57 GMT
Connection: close
440101234567890
Connection closed by foreign host.
デバイスで動作するアプリケーションで利用する際は、レスポンスの中で 2 回連続で出力された改行を目印にすれば、メタデータの値だけを取得できます。
メタデータの書き込み例: 速度クラスを変更する
メタデータサービスを利用して、速度クラス を変更できます。
$ curl -s -X POST http://metadata.soracom.io/v1/subscriber/update_speed_class \
-H "Content-Type:application/json" \
-d '{
"speedClass": "s1.standard"
}'
{
"imsi": "4401xxxxxxxxxxx",
:
"type": "s1.standard",
:
"speedClass": "s1.standard",
:
}
import requests
import json
payload = {'speedClass': 's1.standard'}
response = requests.post("http://metadata.soracom.io/v1/subscriber/update_speed_class", json=payload)
if response.status_code == requests.codes.ok:
print(json.dumps(response.json(), indent=2))
else:
print("Status: ", response.status_code)
print("Response: ", response.text)
速度クラスが変更されていることを確認します。
$ curl -s http://metadata.soracom.io/v1/subscriber.speedClass
s1.standard
import requests
response = requests.get("http://metadata.soracom.io/v1/subscriber.speedClass")
print(response.text)
レスポンスボディが空になる場合があります
にチェックが入っている場合は、メタデータの書き込みに成功したときのレスポンスボディが空になります。
なお、失敗したときは、以下のようにレスポンスボディにエラーメッセージが返されます。
{
"code": "SEM0039",
"message": "Invalid speed class s1.non-existent-class specified"
}
メタデータの書き込み例: IoT SIM のタグを追加 / 更新する
IoT SIM のタグ を追加したり更新したりします。
$ curl -s -X PUT http://metadata.soracom.io/v1/subscriber/tags \
-H "Content-Type:application/json" \
-d '[
{
"tagName": "sample",
"tagValue": "sample-value"
}
]'
{
"imsi": "4401xxxxxxxxxxx",
:
"tags": {
"sample": "sample-value"
},
:
}
import requests
import json
payload = [{'tagName': 'sample', 'tagValue': 'sample-value'}]
response = requests.put("http://metadata.soracom.io/v1/subscriber/tags", json=payload)
if response.status_code == requests.codes.ok:
print(json.dumps(response.json(), indent=2))
else:
print("Status: ", response.status_code)
print("Response: ", response.text)
タグが更新されていることを確認します。
$ curl -s http://metadata.soracom.io/v1/subscriber.tags
{
"sample": "sample-value"
}
import requests
import json
response = requests.get("http://metadata.soracom.io/v1/subscriber.tags")
if response.status_code == requests.codes.ok:
print(json.dumps(response.json(), indent=2))
else:
print("Status: ", response.status_code)
print("Response: ", response.text)
レスポンスボディが空になる場合があります
にチェックが入っている場合は、メタデータの書き込みに成功したときのレスポンスボディが空になります。
なお、失敗したときは、以下のようにレスポンスボディにエラーメッセージが返されます。
{
"code": "SEM0121",
"message": "The length of tag name (300 bytes) exceeds the limit. The max length after URL encoding is 256 bytes."
}
メタデータの削除例: IoT SIM のタグを削除する
IoT SIM のタグ を削除します。
$ curl -s -X DELETE http://metadata.soracom.io/v1/subscriber/tags/sample
import requests
import urllib
tag_name = urllib.parse.quote("sample")
response = requests.delete("http://metadata.soracom.io/v1/subscriber/tags/" + tag_name)
print(response.status_code) # Expect return 204
タグが更新されていることを確認します。
$ curl -s http://metadata.soracom.io/v1/subscriber.tags
import requests
import json
response = requests.get("http://metadata.soracom.io/v1/subscriber.tags")
if response.status_code == requests.codes.ok:
print(json.dumps(response.json(), indent=2))
else:
print("Status: ", response.status_code)
print("Response: ", response.text)
タグ名は、UTF-8 で URL エンコード (パーセントエンコーディング) してください。JavaScript の場合は、encodeURIComponent() を利用します。なお、タグの名前に半角スペースを含む場合は、半角スペースを
%20
に置き換えてください。+
に置き換えると削除できません。例:
ABC DEF
→ABC%20DEF
ABC DEF
→%EF%BC%A1%EF%BC%A2%EF%BC%A3%20%EF%BC%A4%EF%BC%A5%EF%BC%A6
失敗したときは、以下のようにエラーメッセージが返されます。
{ "code": "SEM0001", "message": "No such resource found" }
メタデータサービスを利用してユーザーデータにアクセスする
メタデータサービスの
に設定した、テキスト形式または JSON 形式のデータを取得できます。メタデータサービスのユーザーデータにアクセスするには、IoT SIM を利用するデバイスで、以下の URL (ユーザーデータを取得する URL) にアクセスします。$ curl -s http://metadata.soracom.io/v1/userdata
import requests
import json
response = requests.get("http://metadata.soracom.io/v1/userdata")
print(response.text)
ここでは メタデータサービスを設定する を参照してください。
の活用例として、ユーザーデータにシェルスクリプトを設定した場合を紹介します。ユーザーデータの設定方法については、#!/bin/bash
echo THIS IS USERDATA.
echo My name is $(curl -s http://metadata.soracom.io/v1/subscriber.tags.name)
ユーザーデータを設定したグループに所属する IoT SIM を利用するデバイスから、以下のコマンドを実行します。
$ curl -s http://metadata.soracom.io/v1/userdata
#!/bin/bash echo THIS IS USERDATA. echo My name is $(curl -s http://metadata.soracom.io/v1/subscriber.tags.name)
ユーザーデータを設定したグループに所属する IoT SIM を利用するデバイスから、以下のコマンドを実行します。
取得したユーザーデータがコマンドとして実行され、IoT SIM の名前が取得されます。
$ curl -s http://metadata.soracom.io/v1/userdata | bash
THIS IS USERDATA. My name is (IoT SIM 名)
メタデータサービスを利用してユーザーデータを書き込むことはできません
IoT SIM の情報とは異なり、IoT SIM を利用するデバイスでも、認証なしでユーザーデータを書き込むことはできません。これは、ユーザーデータの更新には Group:* API
を使用するためです。デバイスからユーザーデータを更新するには、SORACOM CLI / SORACOM API を使用してください。