Event Grid と信頼性
Azure Event Grid を使用すると、イベントベースのアーキテクチャを備えたアプリケーションを簡単に作成することができます。 ストレージ BLOB やリソース グループと同様に、このソリューションは、Azure サービスから受け取るイベントを処理する組み込みの機能を備えています。 さらに Event Grid では、カスタム トピックを使用した独自のイベントもサポートされます。
Event Grid の使用方法の詳細については、Azure Event Grid を使用したカスタム イベントの作成とルーティングに関するページを参照してください。
Event Grid で信頼性の高いワークロードを作成する方法は「Azure Event Grid でのサーバー側 geo ディザスター リカバリー」を参考にしてください。
以下のセクションは Azure Event Grid と信頼性に関する説明です。
- 設計上の考慮事項
- 構成チェックリスト
- 推奨構成
- ソース成果物
設計上の考慮事項
Azure Event Grid にはアップタイム SLA があります。 詳しくは「Event Grid の SLA」を参考にしてください。
チェック リスト
信頼性を考慮して Azure Event Grid を設定しましたか。
- 複数リージョンに対する 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']