SORACOM BeamでAmazon KinesisのTLS処理をオフロードする #soracom
ども、大瀧です。 長らくステルスモードだったIoTプラットフォームのスタートアップ、SORACOM, INCのサービスが発表されました。 早速試してみたレポートを2本と応用編としてSORACOM Beamの設定例を2本、同時公開します!
- 新IoTプラットフォームSORACOMを試してみた
- 3GPi on Raspberry Pi 2 + SORACOM Air SIMでインターネットに接続する
- SORACOM BeamでFluent Bitからセキュアにセンサーデータを転送する
- SORACOM BeamでAmazon KinesisのTLS処理をオフロードする【本記事】
本エントリーでは、AWSのストリーミングデータ処理サービスAmazon KinesisへのHTTPS通信のTLS暗号化をBeamにオフロードする構成を紹介します。
構成の概要
図に示すと以下のようになります。
通常のKinesisへの通信は、AWS SDKやAWS CLIなどからKinesisのエンドポイントに対しTLS暗号化の元HTTPSリクエストを発行します。IoTで利用するデバイスやゲートウェイではTLS暗号化処理が負荷になることから、これをBeamにオフロードさせようというのが今回の狙いです。
Kinesisの構成
今回はサンプルとして、東京リージョンにOtakiTest
ストリームを1シャードで作成しました。
Kinesisでの特別な設定はありません。
Beamの構成
続いてSORACOM Beamを設定します。SORACOMユーザーコンソールからグループ設定画面を表示し、グループの設定から[HTTPエントリポイント]をクリックします。
任意の設定名を入力し、エントリポイントの[プロトコル]を「HTTP」、[パス]に [/]を入力します。転送先は、[プロトコル]を「HTTPS」、[ホスト名]に東京リージョンのKinesisのエンドポイントであるkinesis.ap-northeast-1.amazonaws.com
、[パス]はエントリポイントと同じく「/」とします。
グループの設定ができたら、有効にしたいSIMをグループに追加します。
IoTゲートウェイの構成
今回は別エントリーでAir SIMを設定したRaspberry Pi 2を利用し、AWS CLIでKinesisにリクエストを発行します。AWS CLIは、apt-get
でpython-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記事はこちら
- 新IoTプラットフォームSORACOMを試してみた
- 3GPi on Raspberry Pi 2 + SORACOM Air SIMでインターネットに接続する
- SORACOM BeamでFluent Bitからセキュアにセンサーデータを転送する
- SORACOM BeamでAmazon KinesisのTLS処理をオフロードする【本記事】