SORACOM, INC.

User Console »
Documents

SORACOM Funnel機能詳細

当ガイドでは、SORACOM Funnel(以下、Funnel)について技術面から詳細に解説します。

Funnelについて

Funnelは、デバイスからのデータを特定のクラウドサービスに直接転送するアダプターです。

クラウドサービス上のリソースを指定するだけで、デバイスからのデータを直接に収集できます。 SORACOM Beamとの大きな相違点は、送信先が汎用的なプロトコルではない一方で、最小限の手間で、迅速にクラウドサービスを利用することができます。サービスに概要についてはSORACOM Funnel、使い方についてはGetting Startedを併せて参照してください。

設定の概要

Funnelはグループに対して以下のような設定をすることによって、そのグループに所属しているSIMから利用することができます。

configuration

対応するクラウドサービス(リソースタイプ)

データの送信先として選択可能なクラウドサービスの一覧です。

選択可能な通信プロトコル

デバイスからFunnelのエントリポイントにデータを送信する際に利用可能なプロトコルの一覧です。

以下、各プロトコルについてより詳細に解説します。

HTTP

HTTPのPOSTリクエストによって送信されたデータを1つのデータとしてクラウドサービスに送信します。

リクエスト

リクエストフォーマットは通常のPOSTメソッドに準じます。許容されるContent-Typeヘッダは以下の3種類です。

レスポンス

送信されたリクエストに基づいて以下のようなレスポンスがデバイスに返されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。

以下、送信するデータの形式にJSONを選択した場合のデータ送信例です。

$ curl -v -d '{"key":"value"}' -H 'Content-Type: application/json' http://funnel.soracom.io
* Rebuilt URL to: http://funnel.soracom.io/
*   Trying 100.127.65.43...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> Host: funnel.soracom.io
> User-Agent: curl/7.49.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 15
>
* upload completely sent off: 15 out of 15 bytes
< HTTP/1.1 204 No Content
< Date: Tue, 06 Dec 2016 16:19:37 GMT
< Connection: keep-alive

TCP

TCP上で送信されたデータをクラウドサービスに送信します。

リクエスト

基本的には1つのTCPセグメントを1つのメッセージとしてクラウドに送信します。しかし、連続した2つ以上のTCPセグメントが1つのメッセージとして取り扱われる場合もありますのでご注意ください。

大きなデータを送信しようとする場合、伝送路のMTUによってデータは複数のTCPセグメントにフラグメンテーションされます。この結果としてそれぞれのTCPセグメントが別々のメッセージとしてクラウドサービスに転送されることに注意してください。

レスポンス

TCPにはHTTPのようなリクエスト&レスポンスの概念はありませんので、下記のBodyに記述されているコードやメッセージをペイロードとして含んだTCPパケットがFunnelエントリポイントからクライアントに対して送信されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。

以下、送信するデータの形式にJSONを選択した場合のデータ送信例です。

# funnelエントリポイントとのTCPセッションの確立
$ nc -v funnel.soracom.io 23080
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif en0
    src 192.168.43.232 port 51053
    dst 100.127.65.43 port 23080
    rank info not available
    TCP aux info available

Connection to funnel.soracom.io port 23080 [tcp/*] succeeded!

# JSONを送信
(request) {"key":"value"}
(response) 200

# 不正なJSONを送信
(request) bad text
(response) 400 Invalid JSON is send to funnel.

UDP

送信されたTCPの1パケット(厳密にはUDPデータグラム)を1つのデータとしてクラウドサービスに送信します。

リクエスト

1メッセージあたりの最大送信データサイズは1つのUDPデータグラムで送信できるペイロード長と等しくなります。

レスポンス

UDPにはHTTPのようなリクエスト&レスポンスの概念はありませんので、下記のBodyに記述されているコードやメッセージをペイロードとして含んだUDPパケットがFunnelエントリポイントから送信されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。

以下、送信するデータの形式にJSONを選択した場合のデータ送信例です。

# UDPクライアントを起動してエントリポイントとの接続確認
$ nc -v -u funnel.soracom.io 23080
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
    outif (null)
    src 192.168.43.232 port 61136
    dst 100.127.65.43 port 23080
    rank info not available

# 接続成功。ncは接続確認のためにUDPデータグラムを送信する。(データ形式にJSONを指定している場合、それフォーマットエラーが返ってくる。(が、問題なし))
Connection to funnel.soracom.io port 23080 [udp/*] succeeded!
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.


# JSONを送信
(request) {"key":"value"}
(response) 200

# 不正なJSONを送信
(request) bad text
(response) 400 Invalid JSON is send to funnel.

エントリポイント

エントリポイントとは、デバイスからみたFunnelへのデータの送信先です。プロトコルごとに以下のエントリポイントが用意されています。

プロトコル エントリポイント
HTTP http://funnel.soracom.io
TCP funnel.soracom.io:23080
UDP funnel.soracom.io:23080

クラウドサービスへ送信されるデータ

クラウドサービスに送信されるデータは以下のようなフォーマットになります。

{
    "operatorid": "ソラコムのアカウントID",
    "timestamp": "funnelがデータを受け取った日時(unix time)",
    "destination" : {
        "resourceUrl": "送信先クラウドサービスのURL",
        "service": "(aws-iot|kinesis|firehose|eventhubs)",
        "provider":"(aws|azure)"
    },
    "credentialId": "ソラコムの認証情報のID",
    "payloads": "送信されたデータ本体",
    "sourceProtocol": "(tcp|udp|http|unspecified)",
    "imsi": "送信元のSIMのIMSI"
}
pagetop