Share via


Event Grid と信頼性

Azure Event Grid を使えば、イベント ベースのアーキテクチャを持つアプリケーションを簡単に開発できます。 このソリューションには、ストレージ BLOB やリソース グループなどの Azure サービスから送信されるイベントに対するサポートが組み込まれています。 さらに 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 を超えることはできません。
  • ロード テスト中にバッチ サイズの選択を構成および最適化します。
  • カスタム コードを保持するエンドポイントに配信する場合にのみ、HTTP200-204 応答で Event Grid メッセージが受け取られるようにします。
  • Event Grid で失敗したイベント発行を監視します。

構成に関する推奨事項

Azure Event Grid を設定するときは、信頼性を最適化するための次の推奨事項の実行を検討してください。

推奨 Description
Event Grid で失敗したイベント配信を監視します。 Delivery Failed メトリックは、メッセージをイベント ハンドラーに配信できなかったたびに増加します (タイムアウトまたは非 200-204 HTTP の状態コード)。 イベントを削除できない場合は、配信不能キュー (DLQ) ストレージ アカウントを設定します。 DLQ アカウントは、最大再試行回数の後でも配信できないイベントを配置する場所です。 必要に応じて、Event Grid を介して "新しいファイル" イベントを処理するなどして、DLQ ストレージ アカウントに通知システムを実装します。
高スループットのシナリオでは、バッチ イベントを使用します。 サービスによって、1 つのイベントを含む配列ではなく、複数のイベントを含む json 配列がサブスクライバーに配信されます。 コンシューマー アプリケーションは、これらの配列を処理できる必要があります。
イベントのバッチ サイズは、1MB を超えることはできません。 メッセージ ペイロードが大きい場合、バッチには 1 つまたは少数のメッセージだけが格納されます。 コンシューマー サービスは、さらに多くのイベント バッチを処理する必要があります。 イベントに大きなペイロードがある場合は、BLOB ストレージなどの他の場所に格納し、イベントで参照を渡すことを検討してください。 CloudEvents スキーマを使用してサードパーティのサービスと統合する場合は、64KB イベントを超えないようにすることをお勧めします。
ロード テスト中にバッチ サイズの選択を構成および最適化します。 バッチ サイズの選択は、ペイロードのサイズとメッセージの量によって異なります。
Event Grid で失敗したイベント発行を監視します。 Unmatched メトリックには、発行されているが、どのサブスクリプションにも一致しないメッセージが表示されます。 アプリケーション アーキテクチャによっては、後者が意図的なものである場合があります。

ソース成果物

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

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

Event Grid ドメインの既存のプライベート エンドポイントのリソース 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 ドメインのパブリック ネットワーク アクセスの状態を確認するには、次のクエリを使用します。

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

すべてのパブリック Event Grid ドメインのファイアウォール規則を確認するには、次のクエリを使用します。

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

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

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

Event Grid トピックの既存のプライベート エンドポイントのリソース 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 トピックのパブリック ネットワーク アクセスの状態を確認するには、次のクエリを使用します。

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

次のステップ