IoTデバイスで取得したデータをSORACOM Beam経由からFunk経由に切り替えた話

本記事はSORACOM Advent Calendar 2019の3日目のものです。

2019年よりIoT.kyotoの開発メンバーに加わりました長崎です!

今回は、ある案件で、ホワイトリストデモアプリを作成した際に、エッジコンピューティング可能なカメラ機能を搭載したIoTデバイスからの通信手段としてSORACOMのサービスを使用し、それがすごく便利だったので、そのことについて以下に記していきたいと思います。
また、ホワイトリストデモアプリについての詳細はこちらからご覧いただけます。

1️⃣ 概要

ホワイトリストデモアプリの簡単なアーキテクチャ図になります。

AWS Lambdaとは

2️⃣ サービスについての説明

本題に入る前に、今回扱ったSORACOMサービスとエッジコンピューティングについて簡単に説明したいと思います。
また、SORACOMの概要についてはこちらから

SORACOMサービスの説明

  • SORACOM Beam
    • データの暗号化処理をクラウド側で負担してくれる
    • データの送信先をBeamに固定し、そこから先の接続の切り替えが可能
    • クラウドサービスに接続可能
    • AWSサービスのLambdaを使用する場合はAPI Gatewayを設定する必要がある

(Beamについて詳しくはこちらから)

  • SORACOM Funk
    • 認証や暗号化はクラウド側で行ってくれる
    • IoTデバイスからクラウドサービスのファンクション(AWS Lambdaなど)を直接呼び出せる
    • データの処理結果をデバイス側で受け取ることが可能

(Funkについて詳しくはこちらから)

エッジコンピューティングの説明

デバイスなどから取得したデータをそのままクラウドにあげるのではなく、デバイス(エッジ)側でデータを処理し、その結果をクラウドにあげる仕組みのことです。

3️⃣ エッジコンピューティングからAWS Lambdaまでの道のり

カメラ機能を搭載したIoTデバイス側で画像処理を行い、その結果をBeam経由でAPI Gatewayに送信し、Lambdaで結果を使った処理をしました。
(※下の図はあくまでも簡略的に表したものになります。)
しかし、このままだといくつか問題があったので、のちにFunkに切り替えることにしました。

BeamからFunk.png

Amazon API Gatewayとは

次項でなぜFunkに切り替える必要があったのかについて説明したいと思います。

4️⃣ BeamからFunkに切り替えた背景

Beamを使用したアーキテクチャの簡略図が以下のものになります。

Beamの図.png

このままだと、何か問題が起きたときに、それがIoTデバイス側で起きたことなのか、SORACOM側なのか、それともAPI Gateway側なのか、はたまたLambda側なのか…など、原因究明にかなりの時間を費やしていました。😓
また、Amazon API Gatewayではタイムアウトまでの時間をカスタマイズすることは可能ですが、(2019/11/25現在で)50ミリ秒~29秒までしか設定できないため、実質30秒以内に処理できるものしか実行することはできません…💦
ここで、問題の切り分けをもっとスピーディーにできないか、処理中のタイムアウトまでの時間をもう少し伸ばすことはできないか…と考えていくうちにFunkというサービスにたどり着くことができました!

Funkを導入したアーキテクチャは次のようになります。

Funkの図.png

AWS IAMとは

BeamからFunkに切り替えることによって、Amazon API Gatewayを経由する必要がなくなったので、何か問題が起こったときには、それがIoTデバイス側なのか、SORACOM側なのか、それともLambda側なのかの切り分けがしやすく原因究明の時間短縮につながることになりました。
また、タイムアウトまでの時間は(2019/11/25現在で)Lambdaは15分まで対応されているので、多少時間のかかる処理も実現できるようになりました。😊

まとめ

エッジコンピューティング可能なIoTデバイスで処理した結果をクラウドにあげて、そこからその情報をもとにさらにAWS Lambdaなどを使って処理をしたい場合はどうしても処理時間が長くなってしまいます。
BeamからFunkに切り替えることで、タイムアウト時間をそこまで気にすることなく開発することができ、しかもFunctionを直接実行することができるので開発がスムーズに進むので、業務効率がかなり上がったのではないかと思います!