この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、大瀧です。 長らくステルスモードだった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処理をオフロードする【本記事】