SORACOMのサービス内容を整理する（2018年4月）



## Introduction

4月からIoTに取り組むチームにJOINし、この２週間ほどSORACOMの各種サービスを触っています。

SORACOM社が提供する各種サービスの仕組みと便利さについて非常に感心しましたので、自身の勉強も兼ねて、SORACOM社の提供している各種サービスを簡単に整理してみたいと思います。
![soracom_image.png](https://qiita-image-store.s3.amazonaws.com/0/62038/a9647d7a-cca6-1885-ce83-98da1d59511c.png)


## SORACOM Air

> **IoT 向けデータ通信サービス**
> SORACOM Air は、IoT 向けのコネクティビティを提供するサービスです。
> ユーザーコンソールや API を利用して各種設定の変更や、通信量を監視するなど IoT の通信を一元管理することができます。
![SISS004-Air SIM B.png](https://qiita-image-store.s3.amazonaws.com/0/62038/65a3ddc3-938b-3a15-5402-21fb944bf4b1.png)

まずは、基本となるSORACOM Air 。
IOT向けのデータ通信を提供してくれるサービスとなり、「for セルラー(3G/LTE)」「for LoRaWAN」「for SigFox」の3つのタイプが提供されています。

IoTの発展に伴い、LPWA（＝Low Power Wide Area）と呼ばれる少ない消費電力で広いエリアをカバーする無線通信技術の開発が進んでおり、その規格の代表的なものが「LoRaWAN」「SigFox」となります。
詳しくは、[LPWAとは？](https://soracom.jp/lpwa/?gclid=Cj0KCQjwzcbWBRDmARIsAM6uChW1tvM5OLHwbYPCI6e66Mt0jbt8bsitfvi-F9yUekRg40HUC1sPtgEaAlPeEALw_wcB) を参照してください。

Soracom Airには、利用者専用のWEBコンソールが用意されており、そちらからSIMごとの通信状況の確認や、通信速度の変更、休止や再開を行うことが出来ます。

また、すべての操作に対してAPIが用意されていますので、プログラムを作成することによって自動制御の仕組みを構築することも可能になっています。

サービスの使い方や各種APIの使い方などを詳細に説明している [SORACOM Developers](https://dev.soracom.io/jp/) という開発者向けの公式サイトも運営されています。




## SORACOM Beam

> **データ転送支援**
> SORACOM Beam は、IoT デバイスにかかる暗号化等の高負荷処理や接続先の設定を、クラウドにオフロードできるサービスです。SORACOM Beam を利用することによって、クラウドを介していつでも、どこからでも、簡単に IoT デバイスを管理することができます。大量のデバイスを直接設定する必要はありません。
![SISS005-SORACOM Beam.png](https://qiita-image-store.s3.amazonaws.com/0/62038/b1a2977f-0275-6679-ff64-331216514b49.png)


SORACOM Beam は、データ暗号化・プロトコル変換、接続先の管理、クラウドへの安全な接続、ヘッダ操作を提供してくれるサービスとなります。



### データ暗号化・プロトコル変換

IoTデバイスの限られたリソースでは、送信データに対する十分なセキュリティを確保することが難しいケースもあります。また、デバイス側で通信の暗号化(SSL/TSL)が出来たとしても、証明書をデバイス側に管理することになりますので、セキュリティ的には十分な状態とは言えません。

SORACOM Beam では、デバイスからBeamまでを3G/LTEの閉域網を使ってデータ通信し、Beam側でTLSを利用した暗号化を行い、通信先のサーバまでデータ送受信を行います。
証明書などの認証情報はデバイス側でなくSORACOM側に管理されますので、セキュリティ的にも高い状態となり、証明書を個々のデバイスごとでなくSORACOM１箇所で管理することが出来ます。

また、以下のように、デバイスからSORACOMまでのプロトコルと、SORACOMから通信先サーバまでのプロトコルの変換の機能も持っています。

* HTTP ⇔ HTTP/HTTPS
* MQTT ⇔ MQTT/MQTTS
* TCP ⇔ TCP/TCPS、HTTP/HTTPS
* UDP ⇔ HTTP/HTTPS

例えば、デバイスからSORACOMまでの通信をTCPで行い、SORACOMからお客様サーバまでの通信をHTTPSで行うと言うような利用方法が考えられます。



### 接続先管理

SORACOM Beamを使うことで、すべてのIoTデバイスのデータ通信先をSORACOMのエンドポイントに統一することが可能となります。実際の接続先となるお客様先のサーバ情報は、*SIMに設定したグループ単位* にSORACOMのWEBコンソールから設定します。

本番環境・テスト環境の切替や物理サーバの故障・リプレイスなどにより、接続先サーバを変更する必要が発生した場合は、個々に配置しているIoTデバイスの接続先設定を直接変更する必要はなく、WEBコンソールからグループ別に変更することが出来ます。

また、APIを利用したプログラムを作成して、何らかの理由で接続先サーバへの通信が途切れた場合に、自動的に別の接続先に切り替ると言うような仕組みを作成することも可能です。



### クラウドへの安全な接続

SORACOM Beamの接続先に各種クラウドサービスを指定することで、IoTデバイスの接続先にクラウドサービスを簡単に利用することが出来ます。

通常であれば、各種クラウドサービスの要件に応じたプロトコルで通信し、認証キー/パスワードをIoTデバイス内で管理する必要がありましたが、これらはすべてSORACOM Beamが制御/管理してくれますので、セキュリティ面での懸念も解消されます。



### ヘッダ操作

SORACOM Beamからお客様の通信先にデータ送信する際に、IMSI、IMEI、署名ヘッダ、事前共有鍵、カスタムヘッダの情報を付与することが可能です。

例えば、IoTデバイスから送信されるデータにデバイス識別可能な情報が無い場合などにIMSI（SIMカードごとの一意な番号）を付与して、どのデバイスから送られてきているデータかを判断することが可能となります。





## SORACOM Canal

> **プライベート接続サービス**
> SORACOM Canal は、Amazon Web Services(AWS)上に構築したお客様の仮想プライベートクラウド環境と SORACOM プラットフォームを直接接続するプライベート接続サービスです。
![SISS006-SORACOM Canal.png](https://qiita-image-store.s3.amazonaws.com/0/62038/78eb8a03-c501-4c3f-f91f-1cf99324ae51.png)


SORACOMのプラットフォームはAWS環境上に構築されており、お客様の環境がAWSの場合は、SORACOM Canalを利用することにより、お客様のVPC(仮想プライベートクラウド環境)とSORACOMのVPCが直接つながり、AWS内の閉じた環境で接続することが可能となります。

こうすることで、IoTデバイスからSORACOMまでが3G/LTEの閉塞網での通信、SORACOMから送信先サーバまでの通信がAWS内の通信となるため、デバイスからサーバまでインターネットを介さずにプライベートネットワークで通信が可能となります。



## SORACOM Direct

> **専用線接続サービス**
> SORACOM Direct は、SORACOMからお客様のシステムを専用線で接続する専用線接続サービスです。
![SISS007-SORACOM Direct.png](https://qiita-image-store.s3.amazonaws.com/0/62038/67fbced4-001c-801d-74b2-dfae27535466.png)

SORACOM Directは、お客様のサーバがAWS以外の場合に、SORACOMプラットフォームとお客様環境を、AWSが提供している「Direct Connect」というサービスを利用した専用線で接続するサービスとなります。

SORACOM Canal同様に、デバイスからサーバまでインターネットを介さずにプライベートネットワークで通信が可能となります。



## SORACOM Door

> **仮想専用線接続サービス**
> SORACOM Door は、SORACOM からお客様のシステムを仮想専用線で接続するサービスです。
![SISS010-SORACOM Door.png](https://qiita-image-store.s3.amazonaws.com/0/62038/c6c0c2d2-5df3-0d60-f7eb-27ffa9dfe201.png)

SORACOM Doorは、お客様のサーバがAWS以外の場合に、SORACOMプラットフォームとお客様環境を、AWSが提供している「Virtual Private Network(VPN)接続機能」というサービスを利用した仮想専用線で接続するサービスとなります。

SORACOM Canal同様に、デバイスからサーバまでインターネットを介さずにプライベートネットワークで通信が可能となります。


## SORACOM Endorce

> **認証サービス**
> SORACOM Endorse は、Air SIM を使用しているデバイスに対して、SORACOM が認証プロバイダーとしてデバイスの認証サービスを提供します。 SIM を使用した認証を Wi-Fi などの SIM 以外の通信にも使うことが可能となります。
![SISS008-SORACOM Endorse.png](https://qiita-image-store.s3.amazonaws.com/0/62038/d84e5bb1-3060-1a26-7c5f-61a45a5d1979.png)

SORACOM Endorse は、SORACOM Air SIMを使用しているデバイスに対して、デバイス認証サービスを提供してくれます。
デバイスがAir SIMで接続した際に、EndorceがIMSIなどのデータを含んだ認証トークン(SORACOMの秘密鍵で署名されている)を発行します。
デバイスがこの認証トークンをお客様サーバに送信すると、お客様サーバ側ではSORACOMの公開鍵を用いてEndorceに問い合わせ正しく発行されたものかどうかの検証を行うことが出来ます。

こうすることで、その接続がどのデバイス(SIM)から来た通信なのかを正しく特定することが可能となります。



## SORACOM Funnel

> **クラウドリソースアダプタ**
> SORACOM Funnel は、デバイスからのデータを特定のクラウドサービスに直接転送するクラウドリソースアダプターです。 SORACOM Funnel でサポートされるクラウドサービスと、そのサービスの接続先のリソースを指定するだけで、データを指定のリソースにインプットすることができます。
![SISS009-SORACOM Funnel.png](https://qiita-image-store.s3.amazonaws.com/0/62038/6744a354-7f54-ce04-5eb5-05d67fe68bc0.png)

SORACOM Funnelは、各種クラウドサービス用のアダプタが準備されており、IoTデバイス→SORACOM→クラウドサービスへのデータ転送を簡単に実現することが可能なサービスです。

現在、Funnelでは以下の５種類のアダプタが用意されています。

* AWS IoT
* Amazon Kinesis
* Amazon Kinesis Firehose
* Microsoft Azure Event Hubs
* Google Cloud Pub/Sub

上記以外にも、Partner Hosted Adapterとして、SORACOM認定パートナーが提供する各種クラウドサービスへのアダプタも用意されています。

* [Torrentio](http://www.site.torrentio.tech/torrentio/)
* [DataSpider Cloud](https://www.appresso.com/dataspidercloud/)
* [Impulse](https://www.brains-tech.co.jp/impulse/)
* [Platio](https://plat.io/)
* [Thing Interaction Framewor](https://www.kii.com/)
* [MotionBoard](http://www.wingarc.com/product/motionboard/)

Funnelを使用すると、各種クラウドサービスへの認証情報をIoTデバイス側でなくSORACOM側で管理することが可能となりますので、セキュリティの向上・管理の煩雑さの解消につながります。

また、Beamと同様に、IoTデバイス側の接続先はSORACOMに統一し最終的な接続先サーバの情報はSORACOMで管理されている状態となりますので、接続先の柔軟な切り替え・各IoTデバイスの設定変更が不要というメリットもあります。

Beamと異なり、デバイスからFunelへのプロトコルはHTTP/TCP/UDPのみとなります。MQTTを使いたい場合はBeamを使用してください。



## SORACOM Gate

> **デバイスLAN接続サービス**
> SORACOM Gate は SORACOM Air で接続された IoT デバイスとのデバイス LAN 接続サービスを提供するサービスです。
![SISS011-SORACOM Gate.png](https://qiita-image-store.s3.amazonaws.com/0/62038/456768e6-bea7-c248-a728-25da21936946.png)

SORACOM Gateは、お客様のホストを仮想プライベートゲートウェイ(VPG)でAir SIMで接続されたデバイス群と同じLayer2サブネットに所属させるサービスです。

この機能を使うことで、お客様ホストから直接デバイスにアクセスしたり、SORACOM Airを搭載したデバイス同士を同じネットワークで接続することが可能となります。

例えば、デバイス内のプログラムを直接変更したり、データを直接取得したりすることが出来ます。




## SORACOM Harvest

> **データ収集・蓄積サービス**
> SORACOM Harvest は、IoTデバイスからのデータを収集、蓄積するサービスです。
![SISS014-SORACOM Harvest.png](https://qiita-image-store.s3.amazonaws.com/0/62038/ed54f7d0-5e9f-3c9f-3033-8a93c72e57c5.png)

SORACOM Harvestは、お客様が別途サーバやストレージを用意しなくても、SORACOMプラットフォーム上にデータを蓄積して、可視化のためのグラフツールを提供してくれる機能となります。

Harvestではデータは40日間しか保存されませんので、より長期間にわたってデータを保存する必要がある場合には任意のタイミングでデータを移行させる必要があります。

また、対応プロトコルはHTTP、TCP、UDPとなっています。



## SORACOM Inventory

> **デバイス管理サービス**
> Inventory は、OMA LightweightM2M(LwM2M)をベースにしたデバイス管理のためのフレームワークを提供するサービスです。
![SISS015-SORACOM Inventory.png](https://qiita-image-store.s3.amazonaws.com/0/62038/8e96d50b-8dc6-a408-6756-f3097374e5e1.png)


SORACOM Inventoryは、デバイスの管理を行う仕組みとなります。
SORACOM Airを使用しているデバイスのデータ/状態取得、データ配信、プログラムの遠隔実行、ファームのアップデートなどの操作をリモートで実行することが可能となります。

当機能を使用するためには、あらかじめIoTデバイス側にLwM2Mに対応したエージェントを組み込んで動作させておく必要があります。



## SORACOM Junction

> **透過型トラフィック処理サービス**
> SORACOM Junctionは、透過型トラフィック処理サービスです。VPG を通るパケットに対して、ミラーリング、リダイレクション、インスペクションの3つの機能を提供します。
![SISS017-SORACOM Junction.png](https://qiita-image-store.s3.amazonaws.com/0/62038/72190fd9-b20a-dfa2-bdb5-c4e5ced06d33.png)

SORACOM Junctionは、SORACOMのVPGを通るパケットに対して、別の宛先にパケットのコピーを送信したり、経路を変更したり、パケットの統計情報を取得したりする機能を提供します。

Air SIMからの通信の分析や監視を行うことで、各種状況の把握や異常をいち早く検知することが可能となります。



## さいごに

SORACOMプラットフォームは、利用者の声に応えるために、日々、機能改善・機能追加が行われおり、使ってみると、すごく良く考えられたプラットフォームであると感心させられます。

今後は個々の機能をより深く掘り進んで行きたいと思います！