Event Grid とオペレーショナル エクセレンス

Azure Event Grid を使用すると、イベントベースのアーキテクチャを備えたアプリケーションを簡単に作成することができます。 ストレージ BLOB やリソース グループと同様に、このソリューションは、Azure サービスから受け取るイベントを処理する組み込みの機能を備えています。 さらに Event Grid では、カスタム トピックを使用した独自のイベントもサポートされます。

Event Grid の使用方法の詳細については、Azure Event Grid を使用したカスタム イベントの作成とルーティングに関するページを参照してください。

Event Grid を使用してワークロードのオペレーショナル エクセレンスを促進する方法を理解するには、「Event Grid のトピックおよび Event Grid ドメインの診断ログ」を参照してください。

以降のセクションでは、Azure Event Grid とオペレーショナル エクセレンスの具体的な内容について説明します。

  • 設計上の考慮事項
  • 構成チェックリスト
  • 推奨構成
  • ソース成果物

設計上の考慮事項

Azure Event Grid にはアップタイム SLA があります。 詳しくは「Event Grid の SLA」を参考にしてください。

チェック リスト

オペレーショナル エクセレンスを念頭に Azure Event Grid を構成しましたか?

  • Event Grid で失敗したイベント配信を監視します。
  • バッチ イベントを使用する。
  • イベント バッチのサイズを 1MB の上限以下に収める。
  • ロード テスト時に選択するバッチ サイズを設定し、最適化する。
  • カスタム コードを保持するエンドポイントに配信する場合にのみ、Event Grid メッセージが HTTP 200-204 応答で受け入れられるようにする。
  • 発行に失敗した Event Grid のイベントを監視する。

構成に関する推奨事項

Azure Event Grid を構成するときに、次の推奨事項を考慮して、オペレーショナル エクセレンスを最適化します。

推奨 説明
Event Grid で失敗したイベント配信を監視します。 Delivery Failed メトリックは、イベント ハンドラーへのメッセージ送信に失敗するたびに (タイムアウトになるか 200-204 HTTP 以外の状態コードが出るたびに) 増加します。 イベントが消失してはならない条件は、Dead-Letter-Queue (DLQ) ストレージ アカウントを設定します。 DLQ アカウントには、送信失敗回数が最大再試行回数に達したイベントを配置します。 必要であれば、たとえば Event Grid で新規ファイルイベントを処理することによって、DLQ ストレージ アカウントに通知システムを実装します。
高スループットのシナリオでバッチ イベントを使用する。 このサービスでは、1 つではなく複数のイベントを含む json 配列をサブスクライバーに送信します。 コンシューマー アプリケーションでは、これらの配列を処理できる必要があります。
イベント バッチのサイズを 1MB の上限以下に収める。 メッセージのペイロードが大きい場合、バッチに配置できるメッセージは 1 - 3 個程度に限られます。 コンシューマー サービスで処理するイベント バッチの数は増えます。 イベントのペイロードが大きい場合は、その内容を BLOB ストレージなどの他の場所に保存し、イベントにはその内容への参照を記述することを検討してください。 CloudEvents スキーマを利用してサードパーティ製のサービスと統合するときは、イベントが 64KB を超えることは推奨しません。
ロード テスト時に選択するバッチ サイズを設定し、最適化する。 適切なバッチ サイズは、ペイロードのサイズとメッセージの分量により異なります。
発行に失敗した Event Grid のイベントを監視する。 Unmatched メトリックは、発行したメッセージのうち、一致するサブスクリプションが 1 つもなかったものの数を表します。 アプリケーションのアーキテクチャーによっては、仕様により、メッセージとサブスクリプションを故意に一致させない場合もあります。

ソース成果物

利用可能なすべての Event Grid トピックの Input Schema (入力スキーマ) の種類を確認するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/topics'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

Event Grid ドメインの既存のプライベート エンドポイントの Resource ID (リソース ID) を取得するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/domains' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

利用可能なすべての Event Grid ドメインの Public Network Access (公開ネットワーク アクセス) の状態を確認するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/domains' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

すべての公開 Event Grid ドメインの Firewall Rules (ファイアウォール規則) を確認するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/domains' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

すべての公開 Event Grid トピックの Firewall Rules (ファイアウォール規則) を確認するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/topics' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

Event Grid トピックの既存のプライベート エンドポイントの Resource ID (リソース ID) を取得するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/topics' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

使用可能なすべての Event Grid ドメインの入力スキーマの種類を確認するには、次のスキーマを使用します。

Resources 
| where type == 'microsoft.eventgrid/domains'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

利用可能なすべての Event Grid トピックの Public Network Access (公開ネットワーク アクセス) の状態を確認するには、次のクエリを使用します。

Resources 
| where type == 'microsoft.eventgrid/topics' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

次のステップ