14.8K Views
September 16, 23
スライド概要
2023/09/16 Japan Azure User Group 13周年イベントのショートセッション資料です
今から始める Event Grid 2023/09/16 Ja pa n A zure User Group 13 周年イベント Shunsuk e Yoshik a wa
自己紹介 Shunsuke Yoshikawa X: https://x.com/ussvgr Qiita: https://qiita.com/ussvgr ⚫ 所属: 株式会社エーピーコミュニケーションズ ⚫ 普段の仕事: Azure×コンテナ中心のインフラ構築(AKSとかContainer Appsとか) ⚫ MICUG クラウドネイティブ/内製開発分科会オーガナイザー ⚫ Platform Engineering Meetup 運営メンバー ⚫ Microsoft MVP (Microsoft Azure) 2023/06~ ⚫ 愛知県在住
Event Grid とは 発生元(イベントパブリッシャー)で生じた イベント を 送信先(イベントハンドラー)へ届けるためのサービス。 2018年1月にGA。 引用元: Announcing the general availability of Azure Event Grid | Azure Blog
なぜ今Event Gridを紹介するか ⚫ よく使われるサービスの割に日本語の解説が少ない(気がする) ⚫ 最近大型アップデートがあり、プレビュー中の機能がたくさんある ⇒ 基本的な仕組みをおさらいしつつ、新しい機能を知ってもらいたい
基本的な仕組みのおさらい
トピック と サブスクリプション イベントパブリッシャーからのメッセージを保持する トピック と イベントハンドラーに送るメッセージを定義する サブスクリプション で構成される。 引用元: Announcing the general availability of Azure Event Grid | Azure Blog
トピック の種類 トピックにはイベントパブリッシャーの種類ごとに以下の区別がある。 ⚫ システムトピック … Azureサービスからのイベントを受信したい場合に使用する。 ⚫ カスタムトピック … 自作のアプリケーションのイベントを受信したい場合に使用する。 ⚫パートナートピック … 対応した3rdパーティー製品のイベントに使用する。SAPとかAuth0とか。
サブスクリプション サブスクリプションは、トピックが受信したイベントを どの送信先(イベントハンドラー)に送信するかを定義する。 対応しているイベントハンドラーは以下のとおり。 ⚫ Azure Functions ⚫ Webhook (任意のエンドポイント、Azure Automation、Logic Apps) ⚫ Event Hubs ⚫ Service Bus ⚫ Queue Storage ⚫ Azure Relay
トピックとサブスクリプションの関連性 ひとつのトピックに対し複数のサブスクリプションを設定することが可能。 サブスクリプションごとに送信対象のイベントをフィルタリングすることもできる。 全イベントを送信 Subscription A BlobCreated Blob Storage Topic /aaa/*.jpg の イベントのみ送信 Subscription B
イベント ドメイン アプリケーションで大規模・複数宛先にイベントを配信したい場合に使用する。 トピックを論理的に束ねる ドメイン を作成することで、 単一のエンドポイントで複数のトピックにイベントを配信できる。 ドメインのイベントすべてを配信する ドメインサブスクリプション を作成可能。 Event Domain Topic 1 アプリ Subscription 1 Endpoint Topic 2 Subscription 2 Domain Subscription
イベントスキーマ Event Gridが送受信するイベントはJSONで表現される。 送受信可能なスキーマとして、 Azure独自の Event Grid スキーマ と、 CNCFで定められたオープンな規格である CloudEvents スキーマ の2種類がある。 入出力でスキーマの種類を変換することもできる。 (Event Grid スキーマ → CloudEvents スキーマのみ。逆は不可。) Event Grid スキーマ Blob Storage CloudEvents スキーマ Topic Subscription A
イベントスキーマの例
[{
"topic": "/subscriptions/{subscription-id}/resourceGroups/Storage/providers/Microsoft.Storage/storageAccounts/my-storage-account",
"subject": "/blobServices/default/containers/test-container/blobs/new-file.txt",
"eventType": "Microsoft.Storage.BlobCreated",
"eventTime": "2017-06-26T18:41:00.9584103Z",
"id": "831e1650-001e-001b-66ab-eeb76e069631",
"data": {
"api": "PutBlockList",
"clientRequestId": "6d79dbfb-0e37-4fc4-981f-442c9ca65760",
"requestId": "831e1650-001e-001b-66ab-eeb76e000000",
"eTag": "\"0x8D4BCC2E4835CD0\"",
"contentType": "text/plain",
"contentLength": 524288,
"blobType": "BlockBlob",
"url": "https://my-storage-account.blob.core.windows.net/testcontainer/new-file.txt",
"sequencer": "00000000000004420000000000028963",
"storageDiagnostics": {
"batchId": "b68529f3-68cd-4744-baa4-3c0498ec19f0"
}
},
"dataVersion": "",
"metadataVersion": "1"
}]
引用元: Event Grid ソースとしての Azure Blob Storage – Azure Event Grid
リトライとデッドレター イベントハンドラーが正常なレスポンスを返さなかった場合、 Event Gridは自動的にリトライを行う。 リトライ間隔は自動で管理され、10秒→30秒→1分→5分…と間隔を開け再送される。 ユーザー側では、最大試行回数とTime-to-live(TTL)のみ 設定が可能。 どちらかの条件が満たされた際にイベントは 配信不能 となる。 事前に設定しておくことで、配信不能となったイベント(デッドレター)を ストレージアカウント(BLOB)に保存可能。未設定の場合イベントは破棄される。 指定回数 or TTLの期間中 再送を繰り返す 配信不能イベントをBLOBに格納
新しい機能の紹介 ※以降で紹介する機能はすべてプレビュー中です
Event Grid on Kubernetes 2021年のMicrosoft Buildで発表。 Event Gridを Azure Arc対応Kubernetesクラスター上にデプロイ できる。 これにより、オンプレミスや他クラウドでもEvent Gridを使用可能! フル機能ではなく、カスタムトピックのみ・CloudEventsスキーマのみなど制約あり。 引用元: Azure Arc を使用した Kubernetes 上の Event Grid (プレビュー) - 概要
Event Grid 名前空間 2023年のBuildで発表。 複数のトピック・サブスクリプションを 名前空間 でグループ化して管理できる。 Event Grid 名前空間
イベント ドメインと何が違うの? 根本的に従来の Event Grid と仕組みが異なる。 ⚫ 価格体系の変更 従来のEvent Grid をBasicレベル 、Event Grid名前空間を Standardレベル と定義する新たなレベル体系が導入された。 Basicレベルはイベントの操作単位での料金のみだが、 Standardは スループットユニットの稼働料金 + イベント操作料金 となる。 ⚫ スループットユニットの数を増やすことで性能をスケール可能 ⚫ 現状ではカスタムイベントのみに対応。Azureリソースからのイベントには対応しない。 ⚫ アイコンも専用のものが準備されてる。 名前空間 トピック サブスクリプション
プル型配信のサポート Event Grid 名前空間のみで対応する新たな配信モード。 従来はEvent Gridからのプッシュ型配信のみに対応しており、 イベントハンドラーは常時応答を返せる状態である必要があった。 プル型配信に対応することで、 イベントハンドラー側の任意のタイミングでイベントを処理できる。 引用元: HTTP によるプル配信 (プレビュー)
MQTTプロトコルのサポート Event Grid 名前空間のみに対応する。 従来のEvent GridはHTTP(S)にのみ対応していたが、 IoTデバイスで一般的に使われているMQTTもサポートするようになった。 証明書によるクライアント認証などIoT向け機能もある。 引用元: Azure Event Grid での MQTT サポートの概要 (プレビュー)
MQTTプロトコルといえば… 従来からMQTTに対応したIoT向けサービスとして IoT Hub が存在する。 Event Grid (MQTT)とIoT Hubの違いとして以下の比較表が公式ドキュメント内にある。 IoT Hub Event Grid デバイスとクラウド アプリ間の緊密な結合を備えた クライアント/サーバー モデル。 パブリッシャーとサブスクライバーを分離する パブリッシュ/サブスクライブ モデル。 MQTT v3.1.1 の限定的な機能サポートと、 プレビュー段階の MQTT v5 の制限付き機能サポート。 その他の機能のサポートは計画されていません。 MQTT v3.1.1 および v5 プロトコルのサポート。 さらに多くの機能サポートと業界コンプライアンスが 計画されています。 静的で定義済みのトピック。 ワイルドカードをサポートするカスタム階層型トピック。 クラウドからデバイスへのブロードキャストと デバイス間通信はサポートされません。 デバイスからクラウドへのブロードキャスト、 高ファンアウトのクラウドからデバイスへのブロードキャスト、 およびデバイス間の通信パターンをサポートします。 最大メッセージ サイズは 256 kb です。 最大メッセージ サイズは 512 kb です。 引用元: MQTT プロトコルを使用した IoT ハブとの通信
まとめ ⚫イベント駆動はクラウドネイティブアーキテクチャにおける重要なポイントです ⚫ 仕組みを理解して、正しく使いましょう ⚫ まだまだ Event Grid は進化していっているので今後も要チェック!
Enjoy Event-driven with Azure !