【新サービス】AWS GreengrassがGA(一般利用開始)になりました!
梅雨の候, 梅雨空のうっとうしい季節となりました。お元気でしょうか、せーのです。
さて今日はIoT関係久々の大型更新をお送りします。あのgreengrassがついにGAです。
AWS Greengrassとは
AWS GreengrassとはAWSのIoT系最新サービスになります。AWS IoTは「Device Broker」「Rule Engine」「Device Shadow」などのコンポーネントで成り立っていますが、Greengrassはそれらのコンポーネントの大部分がまるっとデバイスの中で構築できてしまう、という驚きのサービスです。なんとLambdaもデバイスの中で動きます。これらのコンポーネント類はコンテナにパックされており、ハードの条件さえ整えばどこにでもデプロイできます。AWSを使うのにもはやクラウドすら要らない時代になってきました。
ところで、どうしてこのサービスが必要なのでしょう。それはIoTの流れの一つでもある「エッジコンピューティング」という考え方が大きく関わってきます。
エッジコンピューティング
IoTでデータをクラウドに集めよう、という時、実際の業務ではいくつか懸念点が出ることがあります。例えば
- レイテンシを10ms以下に押さえたい。クラウドに上げると処理が間に合わない
- デバイスが置かれる場所に通信が通らない(山の中とか)
- 現場が遠隔地すぎてゲートウェイと繋がらない
- デバイスから集めたデータは個人情報等が多く入っていて、クラウドに上げることがセキュリティ上できない(医療機関とか)
- 常にクラウドと通信していると通信料がかかりすぎる
のような場合です。このような場合は手元のデバイス、もしくはゲートウェイにてクラウドの代わりに処理を行い、クラウドにあげてもいいデータのみをあげてもいいタイミングでまとめてあげる、というのがベストプラクティスとなります。これを「エッジコンピューティング」「フォグコンピューティング」と言います。速さを追求することが多いのでC++で書いたりすることが多いのですが、Greengrassではこのエッジコンピューティングを「AWSリソースが動くコンテナをデバイスにデプロイする」ことで解決しました。コンテナはAWS IoTと通信出来るようになっていて、一度設置しておけば、通信が出来る場所であればクラウドからファームアップデートが可能です。逆に通信出来ない場所でもコンテナが独自に働くのでデータの収集、加工がデバイスの中で可能となります。コンテナとAWSは最長5年に一度同期を取れればOKです。
特徴
レスポンスの速さ
何と言ってもコレにつきます。ローカルにAWS IoTが引っ越してきたようなものなのでレイテンシがぐっと下がります。
デバイスプログラミングをLambdaで書ける
クラウドエンジニアにはこれは朗報ではないでしょうか。Greengrassはコンテナ仕様なのでクラウドで書いていたLambdaがそのままデバイスで動きます(Python2.7対応)。またAWS上でLambdaはバージョン管理出来ますが、同じようにデバイス上のLambdaもクラウドで管理して、デバイス上のLambdaにレプリケーションすることができます。レプリケーションするかどうかはデバイス内のGreengrass Groupで設定します。
オフライン利用
AWS IoTのコアコンポーネントがそのままデバイス内に入っているのでクラウドを気にすることなく動きます。
コスト削減
クラウドにデータをアップする前にデバイス内のLambdaで色々な加工ができるのでサマリが簡単に作れます。クラウドとして分析に必要なデータをまとめて上げることで通信料の削減になります。
セキュリティ
セキュリティポリシー上クラウドにあげられないデータはデバイス内に保持しておいて、マスクした上でクラウドに上げる、というような処理もできます。またAWS以外の独自のCA、独自の証明書にも対応しているのでAWSが作る証明書以外を使いたい、という、主に製造業のニーズなどにも対応しています。
仕様
Greengrass core(GGC)
Greengrassの文字通り「コア」です。GreengrassはソフトウェアですのでLambdaの実行、メッセージング、Shadowなどは全てコンテナエンジン上で動きます。そのコンテナエンジンを管理するのがGGCです。
Greengrass Group
Greengrassの構成をする一単位、というイメージです。GGCとデバイス類が一つのグループとして認識されます。グループでは全てのデータの流れを設定しておきます。このデータはこのLambdaで処理をする、処理が終わったデータはローカルに置くのか、クラウドに上げるのか、等すべてのトランザクションを設定しておく必要があります。
Local Rule Engine
AWS IoTのRule Engineのローカル版です。AWSにあげるのかどうか等をルール設定します。
Local Lambda
エッジ処理のキモです。Python2.7に対応しています(言語は今後増えていくそうです)。AWS Lambdaと違い実行時間に制限がありません。
開発方法も今まで通りコードを書いて、zip化して、アップロードします。テストはクラウド上でもできるので、Lambda開発、自動テストをCI等で既に組んでいる人はそのままその仕組みが使えます。
Shadow
GreengrassのShadowはローカルにそのまま保持しておくことも、クラウドに同期することもできます。通信が繋がらない場合、ステータスをクラウドにあげたくない場合はローカルに、現在の状態をスマホなどで確認したい場合は同期させる、等自由に組むことができます。
SDK
AWS IoT Device SDKを使ってローカルネットワークを通じたGGCとの通信が可能となります。また「AWS Greengrass Core SDK」というSDKを使うとローカル内でのLambdaの操作やメッセージング、Shadowの操作が可能になります。
Certification
認証はAWS IoT同様相互認証がベースとなります。クラウド内のSigV4認証情報に関連付けることが出来、必要に応じてAWSリソースとの紐付けができます。またAWSが用意した証明書以外にも独自の証明書、独自のCAを建てて運用することも可能です。
ハード条件
- Linux 4.4 with OverlayFS enabled
- glibc libraries 2.14
- python 2.7
- SQLite 3+
- x86_64, armv6 arm64
- 128MB RAM
- Core 1GHz-
制限
ShadowはAWS IoTと通信できる関係上AWS IoT同様8kまで、となります
料金
- アクティブなGGCごとの価格
- 1年無償/3台のデバイスまで
- $0.16/month or $1.49/year
使用可能リージョン
バージニア / オレゴンリージョンで使用可能です。
まとめ
長くなりそうなのでひとまずザクッと特徴をまとめました。エッジコンピューティングはこれからのIoTの幅を広げるために必須な技術と言っても過言ではありません。1年無料、ということで是非触ってマスターしましょう!
続報として実際にデバイスを通じて触ってみた記事をあげます。そちらもお楽しみに!
参考リンク
- https://aws.amazon.com/jp/about-aws/whats-new/2017/06/aws-greengrass-is-now-generally-available/
- https://aws.amazon.com/jp/blogs/aws/aws-greengrass-run-aws-lambda-functions-on-connected-devices/
- https://aws.amazon.com/jp/greengrass/
- https://aws.amazon.com/jp/iot/sdk/
- https://aws.amazon.com/jp/sdk-for-python/
- https://www.youtube.com/watch?v=XQQjX8GTEko