Microsoftは、Event Grid on Iot Edgeのパブリックプレビューを発表した。ネットワークにつながらない環境やリモート環境に構築されたシステム上での、イベント駆動アーキテクチャの採用が可能になる。これはつまり、ルーティング機能を備えたパブリッシュ/サブスクライブモデルを使用したイベント駆動シナリオの実装が、任意の場所で動作しているIoT(Internet of Things)デバイス上で実現できる、ということだ。
Event Gridは2017年8月にAzure上で公開されたサービスで、アプリケーション間のイベントをルーティングするマネージドサービスを提供している。イベントは3つのスキーマ中のいずれかに準拠しており、一般的にそのコンテンツは、各メッセージが送信すべき場所を決定するエンベローブと、アプリケーション特有の形式によるペイロードから構成されている。
アプリケーション独自のスキーマ定義が可能なCustomEventや、イベント駆動通信の業界標準を実装したCloudEventsに対して、EventGridは"アウトオブボックス"スキーマである。さらにEventGridは、Microsoft Azure MVPでCloud Azure TechnologyコンサルタントであるSteef-Jan Wiggers氏が以前InfoQで説明したように、プッシュ-プッシュ形式のパブリッシュ/サブスクライブ機構を使って通信を行う。
Event Gridのイベントに関するコンセプトは、Azureサービスやイベントスキーマに準拠したサードパーティソースなどのソース(パブリッシャ)が発行したイベントを中心に展開されています。Azure内のイベントパブリッシャとしては、IoT Hub、Storage、最近追加されたEvent Hubsなどがあります。発行されたイベントはイベントグリッドのトピックに送信され、各トピックがひとつないし複数のサブスクライバ(イベントハンドラ)になります。トピックはイベントパブリッシャに紐付けるか、あるいは特別なイベント用のカスタムイベントにすることが可能です。そして最後に、イベントハンドラがそのイベントに対応した処理を実行するのです。Azureでイベントハンドラになるのは、FunctionsやWebHook、Event Hubsなどです。
サービスによって受信されたイベントは、ひとつないし複数のサブスクライバにプッシュアウトされる。どのサブスクライバがどのメッセージを必要としているのかは、フィルタリングを用いて決定される。また、確実なデリバリを保証するために、リトライや配信不能(dead-lettering)といったメカニズムが実装されている。
IoT Edgeは、Azure外部で動作するデバイス上にIoT機能を実装するマネージドサービスであり、Iot Hubと統合されることによって、デバイスとAzure間のコミュニケーションを可能にする。そのためにIoT Edgeには、ネットワーク接続がないか、あるいは最小限のデータ交換のみで動作し、なおかつテレメトリを収集して、デバイス上でこれをベースとした動作を行うことを可能にするオプションが提供されている。この機能は、Dockerコンテナのモジュールと呼ばれるものと、モジュール間のメッセージを調停するランタイムの組み合わせで実現されている。
出典: https://docs.microsoft.com/en-us/azure/iot-edge/about-iot-edge
新たに導入されたこの機能は、Event GridがDockerコンテナとして、IoT Edge上で動作可能になったということを意味している。その結果、これらデバイス上でのイベントの送受信が可能になり、サービスが同一デバイスや他のデバイス上のモジュール、あるいはAzure内のサービスと対話することが可能になった。さらに、Azure上のイベントグリッドとIoT Edgeには完全な機能同一性がある。つまり、まったく同じ動作をするのである。
現時点では、Event Gridとの統合インタラクション機能を持った、最初から使用可能なモジュールはBlob Storageモジュールのみであり、コンテナへのBlobの配置に対してサービスが反応することが可能である。それ以外のモジュールもサービスとの通信は可能だが、資料で説明されているように、HTTPエンドポイントの公開が要件となる。
新機能を使用するには、まず最初にIoT Edgeデバイスを設定する必要がある。これはAzure MarketplaceのVirtual Machineとして使用することも可能だ。次に、対象とするデバイスをIoT Hub内にセットして、デバイスへコンフィギュレーションをプッシュする。これによってルーティングが起動され、Event Grid on Docker HubモジュールなどのDockerイメージがダウンロードされてインストールされる。ドキュメントにはローカルイベントやクラウド間データ交換、イベントフォワーディングなどいくつかの例が紹介されている。