SORACOM BeamでAmazon KinesisのTLS処理をオフロードする #soracom

2015.09.30

ども、大瀧です。 長らくステルスモードだったIoTプラットフォームのスタートアップ、SORACOM, INCのサービスが発表されました。 早速試してみたレポートを2本と応用編としてSORACOM Beamの設定例を2本、同時公開します!

本エントリーでは、AWSのストリーミングデータ処理サービスAmazon KinesisへのHTTPS通信のTLS暗号化をBeamにオフロードする構成を紹介します。

構成の概要

図に示すと以下のようになります。

beam-kinesis1_2

通常のKinesisへの通信は、AWS SDKやAWS CLIなどからKinesisのエンドポイントに対しTLS暗号化の元HTTPSリクエストを発行します。IoTで利用するデバイスやゲートウェイではTLS暗号化処理が負荷になることから、これをBeamにオフロードさせようというのが今回の狙いです。

Kinesisの構成

今回はサンプルとして、東京リージョンにOtakiTestストリームを1シャードで作成しました。

kinesis-beam02

Kinesisでの特別な設定はありません。

Beamの構成

続いてSORACOM Beamを設定します。SORACOMユーザーコンソールからグループ設定画面を表示し、グループの設定から[HTTPエントリポイント]をクリックします。

kinesis-beam03

任意の設定名を入力し、エントリポイントの[プロトコル]を「HTTP」、[パス]に [/]を入力します。転送先は、[プロトコル]を「HTTPS」、[ホスト名]に東京リージョンのKinesisのエンドポイントであるkinesis.ap-northeast-1.amazonaws.com、[パス]はエントリポイントと同じく「/」とします。

kinesis-beam04

グループの設定ができたら、有効にしたいSIMをグループに追加します。

IoTゲートウェイの構成

今回は別エントリーでAir SIMを設定したRaspberry Pi 2を利用し、AWS CLIでKinesisにリクエストを発行します。AWS CLIは、apt-getpython-pipパッケージを先にインストールし、pipコマンドでインストールします。

$ sudo apt-get update
$ sudo apt-get install python-pip
$ sudo pip install awscli

AWS CLIのエンドポイントにBeamを指定し、BeamがKinesisへのリクエストを中継しますが、AWS CLIはエンドポイントのURLをAWSの署名に含めるHTTPリクエストのホストヘッダに使い回してしまうため、BeamエントリポイントのURLとKinesisエンドポイントで署名に不整合が生じ、Kinesisへのリクエストがエラーになります。そこで今回はAWS CLIのスクリプトを変更し、BeamエントリポイントをエンドポイントとするときはホストヘッダをKinesisエンドポイントに決め打ちするようパッチを作成しました。

こんな感じで当てます。

$ wget https://gist.githubusercontent.com/otaki-ryuta/b548bd916e07429fd578/raw/44bc2947f6063e6b95b34847ce92b460289ed5ce/awscli-beam.patch
$ cd /usr/lib/python2.7/dist-packages/botocore
$ sudo patch -u < ~/awscli-beam.patch
patching file auth.py
patch unexpectedly ends in middle of line
Hunk #1 succeeded at 172 with fuzz 1.
$

これでOKです。では、試しにBeam経由でKinesisにデータを送信してみます。

$ aws configure
(APIキーなどを入力)
$ aws kinesis put-record --region ap-northeast-1 --stream-name OtakiTest --partition-key test --data 'test' \
  --endpoint http://beam.soracom.io:8888/
{
    "ShardId": "shardId-000000000000",
    "SequenceNumber": "49554112327853074975925532337158824267872753048654708738"
}
$

送信できました!

まとめ

SORACOM BeamでTLS暗号化をオフロードする例として、Amazon KinesiへのAWS CLIによるデータ送信をご紹介しました。AWS APIとの通信はレスポンスのデータ量がそれなりにあるので、Amazon API Gatewayでそのあたりをうまくコントロールできると、より効率良くKinesisが利用できるかもしれません。Beamの様々な活用方法を探していきましょう!

ちょっとだけ宣伝

クラスメソッドはソラコムのSPSインテグレーションパートナーとして参画し、本日9/30〜10/2に開催されるITpro EXPO 2015のソラコムブースに出展します。当日ソラコムブースシアターで行われるミニシアターに代表の横田と私大瀧が毎日登壇します!ぜひ遊びに来てください!SORACOMサービスについて技術話しましょう!

他のSORACOM記事はこちら