# Azure Event Grid にイベントを送信する

Azure インフラで Stripe イベントを使用します。

[Azure Event Grid](https://learn.microsoft.com/en-us/azure/event-grid/overview)は、Microsoft Azureが提供する、拡張性が高く、完全に管理されたイベントルーティングサービスです。イベントの送信先を使用してEvent Gridと組み込むことで、統合コードやインフラストラクチャのスケーリングロジックを管理することなく、StripeイベントをAzureインフラストラクチャに直接ルーティングすることができます。Event Gridはイベントを受信すると、[Webhook](https://learn.microsoft.com/en-us/azure/event-grid/handler-webhooks)、[Azure Functions](https://learn.microsoft.com/en-us/azure/event-grid/handler-functions)、[Event Hub](https://learn.microsoft.com/en-us/azure/event-grid/handler-event-hubs)など、[さまざまなイベントハンドラ](https://learn.microsoft.com/en-us/azure/event-grid/event-handlers)にルーティングして、ビジネスの自動化を処理またはトリガーできます。

## Stripe から Event Grid へのイベントフロー

アカウントでアクティビティーが発生すると、Stripe はイベントを生成します。これらのイベントは、[Azure サブスクリプション](https://learn.microsoft.com/en-us/microsoft-365/enterprise/subscriptions-licenses-accounts-and-tenants-for-microsoft-cloud-offerings?view=o365-worldwide)の [Azure パートナートピック](https://learn.microsoft.com/en-us/azure/event-grid/concepts#partner-topics)(Stripe でイベントの送信先として定義)を通じて Event Grid に送信されます。次に、[Azure Event Subscriptions](https://learn.microsoft.com/en-us/azure/event-grid/subscribe-through-portal) は、これらのイベントを構成済みの[イベントハンドラー](https://learn.microsoft.com/en-us/azure/event-grid/event-handlers)にルーティングして、ビジネスロジックに従ってデータを処理します。

## Event Grid リソースプロバイダを登録する [Azureポータル]

Event Grid を使用するには、[サブスクリプション](https://learn.microsoft.com/en-us/microsoft-365/enterprise/subscriptions-licenses-accounts-and-tenants-for-microsoft-cloud-offerings?view=o365-worldwide)で Event Grid [リソースプロバイダー](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types)を登録する必要があります。サブスクリプションで Event Grid を以前に使用したことがある場合は、次のセクションに進んでパートナーオーソリを作成します。

Azure ポータルで Event Grid リソースプロバイダーを登録するには、以下のようにします。

1. 検索バーを使用して **Subscriptions** を選択します。
2. Event Grid に使用するサブスクリプションをサブスクリプションリストから選択します。
3. **サブスクリプション**ページで、**設定**\>**リソースプロバイダー**をクリックします。
4. **Microsoft.EventGrid** を検索し、**ステータス**が**未登録**であることを確認します。ステータスが**登録済み**の場合は、次のセクションに進んでパートナーオーソリを作成します。
5. プロバイダーリストで **Microsoft.EventGrid** を選択します。
6. コマンドバーで**登録**を選択します。
7. 更新して、**Microsoft.EventGrid** のステータスが **Registered** に変わることを確認します。

## パートナーオーソリの作成 [Azureポータル]

Azure ポータルで[パートナーオーソリ](https://learn.microsoft.com/en-us/azure/event-grid/subscribe-to-partner-events#authorize-partner-to-create-a-partner-topic)を作成し、指定した[サブスクリプション](https://learn.microsoft.com/en-us/microsoft-365/enterprise/subscriptions-licenses-accounts-and-tenants-for-microsoft-cloud-offerings?view=o365-worldwide)と[リソースグループ](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/overview#resource-groups)で[パートナートピック](https://learn.microsoft.com/en-us/azure/event-grid/concepts#partner-topics)を作成することへの Stripe が同意を得られるようにします。

1. Azure ポータルにサインインします。
2. 上部の検索バーで**パートナーの設定**と入力し、結果の**サービス**の下にある** Event Grid パートナーの設定**を選択します。
3. **Event Grid Partner Configurations** ページで、コマンドバーの **+ Create** を選択します。
4. **パートナー設定の作成**ページで、以下のステップを実行します。
5. **プロジェクトの詳細**セクションで、パートナーにパートナートピックの作成を許可するサブスクリプションとリソースグループを選択します。
6. **パートナーのオーソリ**セクションで、この設定で定義されているパートナーのオーソリのデフォルトの有効期限を指定します。
7. パートナーが指定されたリソースグループでパートナートピックを作成するためのオーソリを提供するには、**+パートナーオーソリ**リンクを選択します。
8. **レビュー + 作成**を選択します。
9. **リソースを作成するためのパートナーオーソリを追加**ページで、次のステップに従って Stripe をオーソリします。
10. [確認済みパートナー](https://learn.microsoft.com/en-us/azure/event-grid/partner-events-overview#verified-partners)のリストから **Stripe** を選択します
11. **オーソリ有効期限**を指定します。 Event Grid の組み込みを設定する際に、サブスクリプションに新しいパートナートピックを Stripe が作成できる期間を決定するオーソリ有効期限を設定します。このオーソリは、このサブスクリプション ID で新しい Stripe イベントの送信先が作成されるたびに使用されます。ほとんどの実装では、これを 90 日に設定することを推奨します。この有効期限は、サブスクリプションに新しいパートナートピックを作成する Stripe の機能に影響します。オーソリの有効期限が切れても、既存のパートナートピックとイベント配信は引き続き機能します。
12. **追加**を選択します。
13. **Create Partner Configuration (パートナー設定の作成)** ページに移動し、パートナーが下部のパートナーオーソリリストに追加されていることを確認します。
14. ページの下部にある**レビュー + 作成**を選択します。
15. **レビュー**ページで、すべての設定をレビューし、**作成**を選択してパートナー登録を作成します。

## 新しいイベントの送信先を追加する [ワークベンチ]

> #### サンドボックスでイベントを送信する
> 
> 本番アカウントまたは[サンドボックス](https://docs.stripe.com/sandboxes.md)を使用して、イベントを Event Grid に送信します。

ダッシュボードのワークベンチを使用するか、[API](https://docs.stripe.com/api/v2/core/event-destinations.md)を使用してプログラムでイベントの送信先を作成します。

#### ダッシュボード

ダッシュボードでイベントの送信先を作成するには、以下のようにします。

1. ワークベンチの [Webhooks](https://dashboard.stripe.com/workbench/webhooks) タブを開きます。
2. **新しい送信先を作成する**をクリックします。
3. イベントの受信元を選択します。Stripe は、**お客様のアカウント** と[連結アカウント](https://docs.stripe.com/connect.md)の 2 種類の設定をサポートしています。**アカウント** を選択して、自分のアカウントからイベントをリッスンします。[Connect アプリケーション](https://docs.stripe.com/connect.md)を作成し、連結アカウントからのイベントをリッスンする場合は、**連結アカウント** を選択します。

> #### 組織のイベント送信先からのイベントをリッスンする
> 
> [組織](https://docs.stripe.com/get-started/account/orgs.md)内にイベントの送信先を作成する場合は、**アカウント**を選択して組織内のアカウントからのイベントをリッスンするか、**連結アカウントと v2 アカウント**を選択して組織内の連結アカウントと v2 アカウントからのイベントをリッスンします。

1. この送信先で受信する[イベントタイプ](https://docs.stripe.com/api/events/types.md)を選択します。次に、**続行** をクリックします。
2. デスティネーションタイプとして **Azure Event Grid** を選択し、**続行**をクリックします。
3. 以下の情報を入力します。
   - [Azure サブスクリプション ID](https://learn.microsoft.com/en-us/microsoft-365/enterprise/subscriptions-licenses-accounts-and-tenants-for-microsoft-cloud-offerings?view=o365-worldwide):イベントを受信するために Stripe パートナートピックが作成されるサブスクリプション。
   - [Azure リソースグループ](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/overview#resource-groups): Stripe パートナートピックを含むリソースグループ。
   - [Azure リージョン](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/): Stripe パートナートピックがデプロイされるリージョン。
   - (任意) **送信先の名前**: Stripe でのこのイベントの送信先リソースの一意の名前。名前を指定しない場合は、ランダムな名前が生成されます。後で変更できます。
   - (任意) **説明**: イベントの送信先のインスタンスを区別する説明。これは後で変更できます。
4. **送信先を作成する**をクリックします。

#### API

[API](https://docs.stripe.com/api/v2/event-destinations.md)を使用して、 Event Grid の新しいイベントの送信先を作成します。以下の例では、[従量課金](https://docs.stripe.com/billing/subscriptions/usage-based.md)の検証エラーがトリガーされた場合に、Stripe がお客様に通知します。

[Connect アプリケーション](https://docs.stripe.com/connect.md)を作成し、連結アカウントをリッスンする場合は、[events_from](https://docs.stripe.com/api/v2/core/event-destinations/create.md#v2_create_event_destinations-events_from) パラメーターを使用し、その値を `@accounts` に設定します。[Organization](https://docs.stripe.com/get-started/account/orgs.md) イベントの送信先では、組織内のアカウントからのイベントには `@organization_members` を使用し、組織全体の連結アカウントのイベントには `@organization_members/@accounts` を使用します。

## パートナートピックを有効にする [Azureポータル]

イベントの送信先を設定すると、Stripe は設定時に指定したサブスクリプションと地域に[パートナートピック](https://learn.microsoft.com/en-us/azure/event-grid/partner-events-overview-for-partners#customers-authorization-to-create-partner-topics)を作成します。Stripe がイベントをパートナートピックに送信できるようにするには、パートナートピックを有効にする必要があります。イベントの送信先の作成から 7 日以内にパートナートピックを有効にします。この期間内にパートナートピックを関連付けない場合、Azure は自動的にパートナートピックを削除します。パートナートピックが削除されると、Stripe イベントの送信先は自動的に無効になり、イベントを受信するには新しい送信先を作成する必要があります。

[ワークベンチ](https://dashboard.stripe.com/webhooks)で、イベント送信先の **Complete setup in Azure** をクリックすると、パートナートピックを有効化できます。

### または、Azure portal でパートナートピックに手動で移動できます

1. Azure ポータルの検索バーで、** Event Grid パートナートピック**を検索して選択します。
2. **Event Grid Partner Topics ( Event Grid のパートナートピック)** ページで、Stripe パートナートピックを選択します。本番環境の送信先の場合、パートナートピック名はイベントの送信先 ID (「ed_」で始まる) と同じです。サンドボックスの送信先の場合、パートナートピック名は「test_」プレフィックスが削除されたイベントの送信先 ID です。イベントの送信先 ID は、Stripe の**ワークベンチ**の**Webhook**タブで、 Event Grid の送信先の詳細を表示することで確認できます。
3. 有効化メッセージをレビューし、ページまたはコマンドバーで**有効化**を選択して、ページに記載されている有効期限までにパートナートピックを有効化します。
4. アクティベーションのステータスが**Activated**に設定されていることを確認します。

## Event Subscriptions とイベントハンドラを作成する [Azureポータル]

Stripe パートナートピックを有効にしたら、[イベントハンドラ](https://learn.microsoft.com/en-us/azure/event-grid/event-handlers)を使用して少なくとも 1 つの[イベントサブスクリプション](https://learn.microsoft.com/en-us/azure/event-grid/subscribe-through-portal)を作成し、Stripe イベントを受信する必要があります。イベントサブスクリプションは、Stripe パートナートピックから特定のイベントハンドラに送信されるイベントを定義します。これらのコンポーネントがないと、イベントは Event Grid に送信され、24 時間保持されます。ただし、どの宛先にも配信されません。

次の手順を複数回繰り返して、複数の Event Subscriptions とイベントハンドラを定義できます。

1. Azure サブスクリプションで、[Event Grid のイベントハンドラとしてサポートされるサービスを設定してください](https://docs.microsoft.com/en-us/azure/event-grid/event-handlers)。このハンドラは、Stripe がパートナートピックに送信するイベントを処理します。たとえば、[Event Grid ビューア](https://learn.microsoft.com/en-us/azure/event-grid/custom-event-quickstart-portal#create-a-message-endpoint)のサンプルを使用すると、パートナートピックから受信した Stripe イベントメッセージを表示する構築済みの [Web アプリ](https://github.com/Azure-Samples/azure-event-grid-viewer)をデプロイできます。
2. Azure ポータルの検索ボックスに **Event Grid Partner Topics ( Event Grid パートナートピック)** と入力し、**Event Grid Partner Topics ( Event Grid パートナートピック)** を選択します。
3. **Event Grid Partner Topics ( Event Grid のパートナートピック)** ページで、リストで Stripe パートナートピックを選択します。本番環境の送信先の場合、パートナートピック名はイベントの送信先 ID (「ed_」で始まる) と同じです。サンドボックスの送信先の場合、パートナートピック名は、「test_」プレフィックスが削除されたイベントの送信先 ID です。イベントの送信先 ID は、Stripe の**ワークベンチ**の **Webhook** タブで、Event Grid の送信先の詳細を表示することで確認できます。
4. パートナートピックの** Event Grid パートナートピック**ページで、コマンドバーの**+ Event Subscription** を選択します。
5. **イベントサブスクリプションを作成** ページで、以下を実行します。
6. イベントサブスクリプションの**名前**を入力します。
7. **Filter to Event Types (イベントタイプに絞り込む)** で、サブスクリプションが受信するイベントのタイプを選択します。
8. **Endpoint Type** で、イベントハンドラとして使用した Azure サービスを選択します。
9. **エンドポイントリンクを設定する**を選択します。
10. **Select Event Hub** ページで、エンドポイントの設定を選択し、**Confirm Selection** を選択します。
11. **イベントサブスクリプションの作成**ページで、**作成**を選択します。

これで、Stripe イベントはパートナートピックとそれに対応するイベントハンドラに正常に配信されました。

## テストイベントをトリガーする

テストイベントを送信するには、Stripe ダッシュボードでオブジェクトを手動で作成し、イベントの送信先が登録されているイベントタイプをトリガーします。[Stripe for VS Code](https://docs.stripe.com/stripe-vscode.md) を使用してイベントをトリガーする方法をご確認ください。

#### スナップショットイベントをトリガーする

[Stripe Shell](https://docs.stripe.com/workbench/shell.md) または [Stripe CLI](https://docs.stripe.com/cli.md) で次のコマンドを使用できます。この例では、`payment_intent.succeeded` イベントがトリガーされます。

```bash
stripe trigger payment_intent.succeeded
Running fixture for: payment_intent
Trigger succeeded! Check dashboard for event details.
```

#### シンイベントのトリガー

[Stripe CLI](https://docs.stripe.com/cli.md) で次のコマンドを使用できます。この例では、`v1.billing.meter.error_report_triggered` イベントがトリガーされます。

```bash
stripe trigger v1.billing.meter.error_report_triggered
Setting up fixture for: list_billing_meters
Running fixture for: list_billing_meters
Setting up fixture for: billing_meter
Running fixture for: billing_meter
Setting up fixture for: list_billing_meters_after_creation
Running fixture for: list_billing_meters_after_creation
Setting up fixture for: billing_meter_event_session
Running fixture for: billing_meter_event_session
Setting up fixture for: create_billing_meter_event_stream
Running fixture for: create_billing_meter_event_stream
Trigger succeeded! Check dashboard for event details.
```

## シンイベントハイドレーション

[シンイベント](https://docs.stripe.com/event-destinations.md#thin-events)は、イベントに関連する API リソースに関する参照情報を含む通知です。Azure Event Grid に送信すると、その情報をもとに完全なイベントや API リソースオブジェクト (「イベントハイドレーション」とも呼ばれます) を取得できます。Azure ポータルでは、サポートされている任意の[イベントハンドラ](https://learn.microsoft.com/azure/event-grid/event-handlers)を使用してイベントサブスクリプションを設定することで、このプロセスを構成できます。シンイベントを [Webhook エンドポイント](https://docs.stripe.com/webhooks.md)に送信する場合は、API を使用してイベントまたはリソースデータ全体をご自身で取得する必要があります。このプロセスでは、各イベントに関連付けられたリソースの現在の状態を取得することで、新しいデータを提供します。

## イベント送信の動作

このセクションは、Stripe が Azure Event Grid にイベントを送信する際に想定されるさまざまな動作を理解するのに役立ちます。

### 自動での再試行

本番環境では、Stripe は指数バックオフを使用して最長 3 日間、送信先へのイベントの配信を試行します。イベント送信先の**イベントの配信**タブで、該当がある場合、次回の再試行のタイミングを確認します。Stripe はサンドボックスで作成されたイベントの配信を数時間のうちに 3 回再試行します。Stripe が再試行するときに、送信先が無効化または削除されていた場合、そのイベントの以降の再試行は行われません。ただし、Stripe が再試行できるようになる前にイベントの送信先を無効にして、再び有効にした場合は、以降の再試行が引き続き行われます。

### 手動での再試行

Azure Event Grid にイベントを手動で再送信することはできません。

### イベントの順序付け

Stripe は、イベントが生成された順序で配信されることを保証しません。たとえば、サブスクリプションを作成することで、次のイベントが生成されるとします。

- `customer.subscription.created`
- `invoice.created`
- `invoice.paid`
- `charge.created` (支払いが付随する場合)

イベントの宛先が、特定の順序でのイベントの受信に依存しないようにしてください。スナップショットイベントは `created` を秒単位で記録するため、異なるイベントが同じタイムスタンプを共有することがあります。イベントの順序や、イベントをすでに処理したかどうかを判断するために `created` を使用しないでください。代わりに [イベント ID](https://docs.stripe.com/api/events/object.md#event_object-id) を追跡して、重複した配信を特定します。API を使用して、不足しているオブジェクトを取得することもできます。たとえば、このイベントを最初に受信した場合、`invoice.paid` の情報を使用して、invoice、charge、subscription オブジェクトを取得できます。

### API のバージョン管理

イベント発生時のアカウント設定の API バージョンによって API バージョンが決まり、さらに送信先に送られる [Event (イベント)](https://docs.stripe.com/api/events.md) の構造が決まります。たとえば、アカウントで 2015-02-16 など、以前の API バージョンが設定されている場合、[バージョン管理](https://docs.stripe.com/api.md#versioning)を使用して特定のリクエストの API バージョンを変更しても、生成され送信先に送られる [Event (イベント)](https://docs.stripe.com/api/events.md) オブジェクトは、2015-02-16 の API バージョンに基づくものになります。[Event (イベント)](https://docs.stripe.com/api/events.md) オブジェクトは、作成後に変更することはできません。たとえば、支払いを更新しても、元の支払いイベントは変更されません。そのため、アカウントの API バージョンを後から更新しても、既存の [Event (イベント)](https://docs.stripe.com/api/events.md) オブジェクトがさかのぼって変更されることはありません。新しい API バージョンを使用して `/v1/events` を呼び出すことで以前の [Event (イベント)](https://docs.stripe.com/api/events.md) を取得しても、受信したイベントの構造には影響しません。テストイベントの送信先は、デフォルトの API バージョンか、最新の API バージョンのいずれかに設定できます。送信先に送られる [Event (イベント)](https://docs.stripe.com/api/events.md) は、イベントの送信先で指定されているバージョンに従って構造化されます。

## イベントの送信先ステータス

Event Grid の送信先には、イベント受信への対応状況を示すいくつかのステータスがあります。

- **アクティブ**: Azureでパートナートピックを有効化した場合、Stripe は Event Grid にイベントを送信します。
- **無効**: Stripe は Event Grid にイベントを送信できていません。送信先を手動で無効化したか、あるいはパートナートピックの有効化期限切れにより Stripe が自動で無効化するとこのステータスになります。

## イベント構造

Event Grid は、イベントデータ交換を標準化するためのオープン仕様であるCloudEventsスキーマ(`v1.0`)を使用してイベントを配信します。 Event Grid を介してStripeイベントを受信すると、元のStripeイベントJSONオブジェクトは、CloudEventsエンベロープ内の`data`プロパティにラップされます。

Event Grid を介して配信される `v1.billing.meter.error_report_triggered` イベントの例を示します。

```json
{
  "specversion": "1.0",			
  "type": "v1.billing.meter.error_report_triggered",			
  "source": "/providers/stripe/ed_test_61StH5LQO42M712JD16Sr8c00mSQTEEmwCfiQq4wqQc4",
  "id": "9aeb0fdf-c01e-0131-0922-9eb54906e209",	
  "time": "2025-07-11T14:30:00Z",
  "subject": null,
  "dataContentType": "application/cloudevents+json",
  "data": {
    "id": "evt_test_65R9Ijk8dKEYZcXeRWn16R9A7j1FSQ3w3TGDPLLGSM4CW0",
    "object": "v2.core.event",
    "type": "v1.billing.meter.error_report_triggered",
    "livemode": false,
    "created": "2024-09-17T06:20:52.246Z",
    "related_object": {
      "id": "mtr_test_61R9IeP0SgKbYROOx41PEAQhH0qO23oW",
      "type": "billing.meter",
      "url": "/v1/billing/meters/mtr_test_61R9IeP0SgKbYROOx41PEAQhH0qO23oW"
    }
  }
}
```

## Stripe が応答を待つイベントタイプに対応する

Stripe はほとんどのイベントタイプを非同期で送信します。ただし、特定のイベントタイプに対しては、Stripe は応答を待ちます。イベントの送信先からの応答の有無は、これらの特定のイベントタイプに関する Stripe のアクションに直接影響を及ぼします。

Event Grid の宛先は、応答が必要なイベントタイプに対して限定的に対応します。

- Event Grid の送信先の `issuing_authorization.request` イベントタイプに登録することはできません。代わりに、[Webhook エンドポイント](https://docs.stripe.com/webhooks.md)を設定してこのイベントタイプに登録します。`issuing_authorization.request`を使用することで、購入リクエストをリアルタイムで承認できます。これには、送信先がイベントに応答して、リクエストを承認または拒否する必要があります。 Event Grid は、コンシューマーに送信する前に、Stripe への応答を処理します。したがって、この送信先タイプでは、このイベントタイプを使用して支払いをオーソリすることはできません。
- Event Grid を使用する場合は、`checkout_sessions.completed` に登録できます。ただし、ウェブサイトに直接 [Checkout](https://docs.stripe.com/payments/checkout.md) を埋め込んだり、Stripe がホストする決済ページに顧客をリダイレクトする場合、これは[Checkout のリダイレクト動作](https://docs.stripe.com/checkout/fulfillment.md#redirect-hosted-checkout)を処理しません。Event Grid に`checkout_sessions.completed` イベントを送信しても、リダイレクト動作には影響しません。決済のリダイレクト動作を変更するには、このイベントタイプを [Webhook エンドポイント](https://docs.stripe.com/webhooks.md)で処理します。

## See also

- [シンイベントタイプのリスト](https://docs.stripe.com/api/v2/core/events/event-types.md)
- [スナップショットイベントタイプの一覧](https://docs.stripe.com/api/events/.md)
- [イベントの送信先概要](https://docs.stripe.com/event-destinations.md)
- [イベントを Webhook エンドポイントに送信](https://docs.stripe.com/webhooks.md)
