Cloud & IT Cert Prep · レッスン

Event Grid とイベント駆動型アーキテクチャ

Event Grid を使用して Azure サービスやカスタム パブリッシャーからのイベントをルーティングし、複数のサブスクライバーにファンアウトして、Event Grid と Event Hubs および Service Bus を比較します。

レッスン 4/413 ステップ

「Event Grid とイベント駆動型アーキテクチャ」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

イベント駆動アーキテクチャとは

イベント駆動アーキテクチャでは、コンポーネント同士が直接呼び出し合うのではなく、イベントを発行してサブスクライブすることで通信します。あるコンポーネント(プロデューサー)は、ファイルがアップロードされた、注文が行われた、デバイスが測定値を送信した、といった注目すべき事象が発生したときにイベントを発行します。他のコンポーネント(サブスクライバー)は、自分が関心を持つイベントに対して、独立かつ非同期に反応します。これによりプロデューサーとコンシューマーが疎結合になり、スケーラビリティ、回復性、保守性が向上します。

Azure Event Grid とは

Azure Event Gridは、プッシュ モデルを使用して、ソース(パブリッシャー)からハンドラー(サブスクライバー)へイベントを配信する、フル マネージドのイベント ルーティング サービスです。Event Grid は、リアクティブな個別イベント、つまり何かが変化し、すぐに対応する必要があるケース向けに設計されています。自動再試行により少なくとも 1 回の配信を保証し、フィルターによってサブスクライバーが関連するイベントだけを受信できるようにします。また、Azure Functions、Logic Apps、webhook、Event Hubs、Service Bus キューへイベントをルーティングできます。

Event Grid のトピックとイベント サブスクリプション

パブリッシャーはEvent Grid トピックにイベントを送信します。サブスクライバーはトピック上にイベント サブスクリプションを作成し、エンドポイントと任意のフィルター規則を指定します。1 つのトピックに複数のサブスクリプションを設定でき、各サブスクリプションは一致するイベントの独立したコピーを受信します。Blob Storage、Resource Manager、Service Bus、Azure Container Registryなどの Azure サービスには、追加構成なしで利用できるシステム トピックが用意されています。

# Create a custom Event Grid topic
az eventgrid topic create \
  --name MyEventTopic \
  --resource-group MyRG \
  --location eastus

# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
  --endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'

イベント スキーマ

Event Grid に発行されるイベントは、必須フィールドを含む標準 JSON スキーマに従います。必須フィールドは、id(一意識別子)、eventType(例: Microsoft.Storage.BlobCreated)、subject(イベント リソースへのパス)、eventTime(ISO 8601 タイムスタンプ)、dataVersion、data(イベント固有のペイロード)です。Event Grid は、他のイベント プラットフォームとの相互運用性を実現するために、CloudEvents スキーマ(CNCF 標準)もサポートしています。

// Event Grid event payload (Event Grid schema)
[
  {
    'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
    'eventType': 'Microsoft.Storage.BlobCreated',
    'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
    'eventTime': '2025-01-15T12:30:00.000Z',
    'data': {
      'api': 'PutBlockList',
      'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
      'contentType': 'image/jpeg',
      'contentLength': 524288
    },
    'dataVersion': '',
    'metadataVersion': '1'
  }
]

イベントのフィルター処理

イベント サブスクリプションでは、サブスクライバー側で不要なイベントを減らすためにフィルター処理を利用できます。イベントの種類(BlobDeletedではなく BlobCreatedだけを受信)、subject のプレフィックスまたはサフィックス(特定のコンテナー内の BLOB だけを受信)、または StringContains、NumberGreaterThan、BoolEqualsなどの演算子を使用したイベント データ内の任意のフィールドに対する高度なフィルターで絞り込めます。フィルター処理はサーバー側で行われるため、サブスクライバーが受信するのは条件に一致するイベントだけです。

# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
  --name jpgImageSub \
  --source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
  --endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
  --included-event-types 'Microsoft.Storage.BlobCreated' \
  --subject-ends-with '.jpg'

Event Grid、Event Hubs、Service Bus の比較

Azure にはイベントとメッセージを処理する 3 つのサービスがあります。シナリオに応じて選択してください。Event Gridはリアクティブなイベント ルーティング向けです(少量で個別のリアクティブなイベント、例: リソース変更通知)。Event Hubsは高スループットのイベント ストリーミング向けです(毎秒数百万件のイベント、テレメトリ、ビッグ データ パイプライン)。Service Busは、順序制御、重複検出、デッドレター処理、トランザクションを備えたエンタープライズ メッセージング向けです(注文処理、金融取引)。

// Decision guide:
// Event Grid  — 'Something happened, react to it'
//               Azure resource events, webhooks, low-latency fan-out
//               Price: per event (cheap for low volume)

// Event Hubs  — 'Capture a firehose of streaming data'
//               IoT telemetry, log aggregation, real-time analytics
//               Price: per throughput unit + capture

// Service Bus — 'Reliable message delivery between services'
//               Order processing, workflow steps, dead-letter queues
//               Price: per operation + messaging units

カスタム イベントの発行

トピックのアクセス キーを使用し、単純な HTTP POST リクエストで Event Grid トピックにカスタム イベントを発行できます。HTTP リクエストを作成できるサービスやアプリケーションであれば、イベントを発行できます。そのため、オンプレミス アプリケーション、サードパーティ サービス、または Event Grid をネイティブにサポートしていない Azure サービスからも簡単にイベントを発行できます。効率を高めるため、1 回の POST で最大 1 MB のイベントをバッチ処理できます。

# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)

# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
  -H 'Content-Type: application/json' \
  -H "aeg-sas-key: $TOPIC_KEY" \
  -d '[{
    "id": "event-001",
    "eventType": "Contoso.OrderPlaced",
    "subject": "/orders/ORD-12345",
    "eventTime": "2025-01-15T12:00:00Z",
    "data": { "orderId": "ORD-12345", "total": 99.99 },
    "dataVersion": "1.0"
  }]'

デッドレターと再試行のポリシー

イベントの配信試行が失敗した場合(サブスクライバーが 2xx 以外の HTTP 応答を返した場合)、Event Grid はジッターを伴う指数バックオフを使用して、最大24 時間(72 時間まで構成可能)、最大 30 回まで再試行します。再試行を使い果たした後、Event Grid は未配信イベントを Azure Blob Storage コンテナーにデッドレターとして保存し、手動で調査できるようにします。信頼性の高いイベント配信が重要で、失敗したイベントの監査や再処理が必要な場合は、デッドレター処理を構成してください。

# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../topics/MyEventTopic' \
  --deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
  --max-delivery-attempts 30 \
  --event-ttl 1440  # 24 hours in minutes

Azure Event Hubs の概要

Azure Event Hubsは、毎秒数百万件のイベントを受信して処理できる分散データ ストリーミング プラットフォームです。パーティション分割されたコンシューマー モデルを使用しており、イベントはパーティションに分散され、各コンシューマー グループはそれぞれ独立して、自分のペースでイベントを読み取ります。これにより、複数のコンシューマーが調整なしに同じストリームを処理できます。一般的な用途には、IoT テレメトリの取り込み、アプリケーション ログの集約、クリックストリーム分析、リアルタイム ダッシュボード用データ パイプラインなどがあります。

# Create an Event Hubs namespace and hub
az eventhubs namespace create \
  --name myEventHubNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az eventhubs eventhub create \
  --name telemetry \
  --namespace-name myEventHubNS \
  --resource-group MyRG \
  --partition-count 8 \
  --message-retention 3  # Days to retain events

信頼性の高いメッセージングのための Azure Service Bus

Azure Service Busは、キュー(ポイント対ポイント)とサブスクリプション付きトピック(パブリッシュ/サブスクライブ)を提供するエンタープライズ メッセージ ブローカーです。Event Grid(ファイア アンド フォーゲット)や Event Hubs(ストリーミング)とは異なり、Service Bus は順序付き配信(FIFO キュー)、重複検出、処理に失敗したメッセージ用のデッドレター キュー、グループ単位の処理を行うメッセージ セッション、トランザクションを保証します。これらはすべて、金融処理や注文処理のワークフローに不可欠です。

# Create a Service Bus namespace and queue
az servicebus namespace create \
  --name myServiceBusNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az servicebus queue create \
  --name order-processing \
  --namespace-name myServiceBusNS \
  --resource-group MyRG \
  --enable-dead-lettering-on-message-expiration true \
  --max-delivery-count 10  # Move to dead-letter after 10 failed attempts

実践的なイベント駆動パターン: ファイル処理

Azure でよく使用されるイベント駆動パターンは次のとおりです。ユーザーがBlob Storageにファイルをアップロードすると、BlobCreatedイベントがEvent Gridに発行されます。Event Grid はそのイベントをAzure Functionにルーティングし、ファイルを処理します(画像のサイズ変更、テキストの抽出、データの検証など)。処理結果はAzure SQL Databaseに書き込まれます。処理に失敗した場合、イベントはストレージ コンテナーにデッドレターとして保存されます。このパイプライン全体ではポーリングが不要で、アイドル時に永続的なコンピューティング リソースも必要ありません。

// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
  const blobUrl = eventGridEvent.data.url;
  const blobName = eventGridEvent.subject.split('/blobs/').pop();

  context.log('Processing image:', blobName);

  // Process via Cognitive Services Vision API
  const tags = await analyzeImage(blobUrl);

  // Write metadata to Cosmos DB via output binding
  context.bindings.cosmosOutput = {
    id: blobName,
    tags,
    processedAt: new Date().toISOString()
  };

  context.log('Processing complete for:', blobName);
};

簡単な確認

このレッスンで扱った Microsoft Azure Fundamentals (AZ-900) の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、Azure Event Gridがフィルター処理とデッドレター処理を備えたプッシュ配信によって、パブリッシャーからサブスクライバーへ個別イベントをルーティングすること、Event Grid(リアクティブなイベント)、Event Hubs(ストリーミング)、Service Bus(信頼性の高いエンタープライズ メッセージング)の主な違い、そして Blob Storage のイベントを Event Grid 経由で Azure Functions につなぐことでイベント駆動パイプラインを構築する方法を学びました。次は Azure DevOps サービスについて説明します。

無料で開始

AI チューターと学ぶ Cloud & IT Cert Prep — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
150
レッスン
600

よくある質問

「Event Grid とイベント駆動型アーキテクチャ」レッスンは無料ですか?

はい。「Event Grid とイベント駆動型アーキテクチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「Event Grid とイベント駆動型アーキテクチャ」で何を学びますか?

Event Grid を使用して Azure サービスやカスタム パブリッシャーからのイベントをルーティングし、複数のサブスクライバーにファンアウトして、Event Grid と Event Hubs および Service Bus を比較します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Event Grid とイベント駆動型アーキテクチャ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Azure Functions のトリガーとバインド
  2. ステートフル ワークフロー向け Durable Functions
  3. Azure Logic Apps
  4. Event Grid とイベント駆動型アーキテクチャ
← Cloud & IT Cert Prepに戻る