配信不能な場所の設定と再試行ポリシー
イベント サブスクリプションの作成時には、イベント配信の設定をカスタマイズできます。 この記事では、配信不能の場所の設定方法と、再試行の設定のカスタマイズ方法を示します。 これらの機能については、「Event Grid によるメッセージの配信と再試行」をご覧ください。
注意
メッセージの配信、再試行、配信不能の詳細については、「Event Grid によるメッセージの配信と再試行」を参照してください。
配信不能の場所の設定
配信不能の場所を設定するには、エンドポイントに配信できなかったイベントを保持するためストレージ アカウントが必要です。 この例では、既存のストレージ アカウントのリソース ID を取得します。 ここでは、配信不能エンドポイント用にそのストレージ アカウント内のコンテナーを使用するイベント サブスクリプションを作成します。
注意
- この記事のコマンドを実行する前に、ストレージ アカウントを作成し、ストレージに BLOB コンテナーを作成してください。
- Event Grid サービスは、このコンテナーに BLOB を作成します。 BLOB の名前には、すべての文字を大文字にした Event Grid サブスクリプションの名前が付けられます。 たとえば、サブスクリプションの名前が
My-Blob-Subscription
の場合、配信不能 BLOB の名前はMY-BLOB-SUBSCRIPTION
(myblobcontainer/MY-BLOB-SUBSCRIPTION/2019/8/8/5/111111111-1111-1111-1111-111111111111.json
) になります。 この動作は、Azure サービス間での大文字と小文字の処理の違いから保護するためのものです。 - 上記の例では
.../2019/8/8/5/...
は、0 以外の埋め込み日付と時刻 (UTC) です:.../YYYY/MM/DD/HH/...
。 - 作成された配信不能 BLOB には、配列内に 1 つ以上のイベントが含まれます。これは、配信不能を処理する際に考慮すべき重要な動作です。
Azure portal
イベント サブスクリプションの作成時に、次の図に示すように、[追加機能] タブで配信不能を有効にできます。 この機能を有効にした後、配信不能イベントを保持する BLOB コンテナーと、BLOB ストレージを持つ Azure サブスクリプションを指定します。
必要に応じて、配信不能に対するシステム割り当てマネージド ID またはユーザー割り当てマネージド ID を有効にできます。 マネージド ID は、ストレージへのイベントの書き込みを許可する「ロールベースのアクセス制御 (RBAC) ロール」のメンバーである必要があります。
配信不能を有効にして、既存のイベント サブスクリプション設定の構成もできます。 イベント サブスクリプションの [イベント サブスクリプション] ページで、[追加機能] タブに切り替えて、次の図に示すように配信不能設定を表示します。
Azure CLI
containername=testcontainer
topicid=$(az eventgrid topic show --name demoTopic -g gridResourceGroup --query id --output tsv)
storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
az eventgrid event-subscription create \
--source-resource-id $topicid \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--deadletter-endpoint $storageid/blobServices/default/containers/$containername
配信不能処理を無効にするには、コマンドを再実行してイベント サブスクリプションを作成しますが、deadletter-endpoint
の値は指定しないでください。 イベント サブスクリプションを削除する必要はありません。
注意
ローカル マシンで Azure CLI を使用する場合は、Azure CLI バージョン 2.0.56 以降を使用してください。 Azure CLI の最新バージョンをインストールする手順については、「Azure CLI のインストール」を参照してください。
PowerShell
$containername = "testcontainer"
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
$storageid = (Get-AzStorageAccount -ResourceGroupName gridResourceGroup -Name demostorage).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-DeadLetterEndpoint "$storageid/blobServices/default/containers/$containername"
配信不能処理を無効にするには、コマンドを再実行してイベント サブスクリプションを作成しますが、DeadLetterEndpoint
の値は指定しないでください。 イベント サブスクリプションを削除する必要はありません。
注意
ローカル マシンで Azure PowerShell を使用する場合は、Azure PowerShell バージョン 1.1.0 以降を使用してください。 Azure のダウンロード サイトから最新の Azure PowerShell をダウンロードしてインストールしてください。
再試行ポリシーの設定
Event Grid サブスクリプションの作成時には、Event Grid がイベント配信を試行する期間の値を設定できます。 既定では、Event Grid は、24 時間 (1440 分)、または 30 回の試行を行います。 Event Grid サブスクリプションには、これらの値のいずれかを設定できます。 イベントの有効期限の値は 1 から 1440 までの整数にする必要があります。 最大再試行回数は 1 から 30 までの整数にする必要があります。
再試行のスケジュールを構成することはできません。
Azure portal
イベント サブスクリプションの作成時に、[追加機能] タブで再試行ポリシー設定を構成できます。
既存のイベント サブスクリプションの再試行ポリシー設定の構成もできます。 イベント サブスクリプションの [イベント サブスクリプション] ページで、[追加機能] タブに切り替えて、次の図に示すように再試行ポリシー設定を表示します。
Azure CLI
イベントの Time to Live を 1440 分以外の値に設定するには、次のコマンドを使用します。
az eventgrid event-subscription create \
-g gridResourceGroup \
--topic-name <topic_name> \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--event-ttl 720
最大再試行回数を 30 以外の値に設定するには、次のコマンドを使用します。
az eventgrid event-subscription create \
-g gridResourceGroup \
--topic-name <topic_name> \
--name <event_subscription_name> \
--endpoint <endpoint_URL> \
--max-delivery-attempts 18
注意
event-ttl
と max-deliver-attempts
の両方を設定した場合、Event Grid は期限切れについて最初の設定を使用して、イベント配信を停止するタイミングを判別します。 たとえば、Time-to-live (TTL) を 30 分に設定し、配信の最大試行回数を 5 回に設定したとします。 イベントが 30 分の時間経過または 5 回の試行 (どちらか先に発生した方) の後に配信されなかった場合、そのイベントは配信不能となります。
指数再試行スケジュールに関して、配信の最大試行回数を 10 に設定した場合、TTL に達する 30 分前に最大 6 回の配信試行が行われます。したがって、最大試行回数を 10 に設定しても、この場合は影響を受けず、イベントは 30 分後に配信不能になります。
PowerShell
イベントの Time to Live を 1440 分以外の値に設定するには、次のコマンドを使用します。
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-EventTtl 720
最大再試行回数を 30 以外の値に設定するには、次のコマンドを使用します。
$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
New-AzEventGridSubscription `
-ResourceId $topicid `
-EventSubscriptionName <event_subscription_name> `
-Endpoint <endpoint_URL> `
-MaxDeliveryAttempt 18
注意
event-ttl
と max-deliver-attempts
の両方を設定した場合、Event Grid は期限切れについて最初の設定を使用して、イベント配信を停止するタイミングを判別します。 たとえば、Time-to-live (TTL) を 30 分に設定し、配信の最大試行回数を 5 回に設定したとします。 イベントが 30 分の時間経過または 5 回の試行 (どちらか先に発生した方) の後に配信されなかった場合、そのイベントは配信不能となります。
指数再試行スケジュールに関して、配信の最大試行回数を 10 に設定した場合、TTL に達する 30 分前に最大 6 回の配信試行が行われます。したがって、最大試行回数を 10 に設定しても、この場合は影響を受けず、イベントは 30 分後に配信不能になります。
次のステップ
- Azure 関数アプリを利用して配信不能イベントを処理するサンプル アプリケーションについては、「Azure Event Grid Dead Letter Samples for .NET」 (.NET 向け Azure Event Grid 配信不能サンプル) を参照してください。
- イベント配信と再試行については、「Event Grid によるメッセージ配信と再試行」をご覧ください。
- Event Grid の概要については、Event Grid の紹介に関する記事を参照してください。
- Event Grid の使用をすぐに開始するには、Azure Event Grid でのカスタム イベントの作成とルーティングに関する記事を参照してください。