Configure Azure Event Grid Subscriptions

The azure-native:eventgrid:EventSubscription resource, part of the Pulumi Azure Native provider, defines an Event Grid event subscription that routes events from a source to a destination endpoint. This guide focuses on three capabilities: destination configuration, subject-based filtering, and dead letter handling.

Event subscriptions connect Event Grid topics or event sources to destination resources. The examples are intentionally small. Combine them with your own Event Grid topics, destination endpoints, and filtering logic.

Route events to Event Hub with subject filtering

Event-driven architectures often route events from Event Grid topics to Event Hubs, where downstream consumers process them at scale.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    destination: {
        endpointType: "EventHub",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1",
    },
    eventSubscriptionName: "examplesubscription1",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    destination={
        "endpoint_type": "EventHub",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1",
    },
    event_subscription_name="examplesubscription1",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			Destination: &eventgrid.EventHubEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("EventHub"),
				ResourceId:   pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription1"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        Destination = new AzureNative.EventGrid.Inputs.EventHubEventSubscriptionDestinationArgs
        {
            EndpointType = "EventHub",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1",
        },
        EventSubscriptionName = "examplesubscription1",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .destination(EventHubEventSubscriptionDestinationArgs.builder()
                .endpointType("EventHub")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1")
                .build())
            .eventSubscriptionName("examplesubscription1")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      destination:
        endpointType: EventHub
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.EventHub/namespaces/ContosoNamespace/eventhubs/EH1
      eventSubscriptionName: examplesubscription1
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1

When events arrive at the topic, Event Grid evaluates the filter. The subjectBeginsWith and subjectEndsWith properties match against the event’s subject field. Only matching events flow to the Event Hub specified in destination.resourceId. The scope property identifies the Event Grid topic that generates events.

Invoke Azure Functions with dead letter handling

Serverless workflows trigger Azure Functions in response to events. When delivery fails repeatedly, dead letter destinations capture undeliverable events.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    deadLetterDestination: {
        blobContainerName: "contosocontainer",
        endpointType: "StorageBlob",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination: {
        endpointType: "AzureFunction",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc",
    },
    eventSubscriptionName: "examplesubscription1",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    dead_letter_destination={
        "blob_container_name": "contosocontainer",
        "endpoint_type": "StorageBlob",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination={
        "endpoint_type": "AzureFunction",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc",
    },
    event_subscription_name="examplesubscription1",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			DeadLetterDestination: &eventgrid.StorageBlobDeadLetterDestinationArgs{
				BlobContainerName: pulumi.String("contosocontainer"),
				EndpointType:      pulumi.String("StorageBlob"),
				ResourceId:        pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg"),
			},
			Destination: &eventgrid.AzureFunctionEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("AzureFunction"),
				ResourceId:   pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription1"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        DeadLetterDestination = new AzureNative.EventGrid.Inputs.StorageBlobDeadLetterDestinationArgs
        {
            BlobContainerName = "contosocontainer",
            EndpointType = "StorageBlob",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
        },
        Destination = new AzureNative.EventGrid.Inputs.AzureFunctionEventSubscriptionDestinationArgs
        {
            EndpointType = "AzureFunction",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc",
        },
        EventSubscriptionName = "examplesubscription1",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.StorageBlobDeadLetterDestinationArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .deadLetterDestination(StorageBlobDeadLetterDestinationArgs.builder()
                .blobContainerName("contosocontainer")
                .endpointType("StorageBlob")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg")
                .build())
            .destination(AzureFunctionEventSubscriptionDestinationArgs.builder()
                .endpointType("AzureFunction")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc")
                .build())
            .eventSubscriptionName("examplesubscription1")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      deadLetterDestination:
        blobContainerName: contosocontainer
        endpointType: StorageBlob
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg
      destination:
        endpointType: AzureFunction
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Web/sites/ContosoSite/funtions/ContosoFunc
      eventSubscriptionName: examplesubscription1
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1

Event Grid attempts to deliver events to the Azure Function specified in destination.resourceId. If delivery fails after all retries, the event moves to the Storage Blob container specified in deadLetterDestination. The blobContainerName and resourceId properties identify where failed events are stored for later analysis.

Deliver to Service Bus Queue with dead letter backup

Service Bus queues provide reliable message delivery with built-in retry and dead letter handling.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    deadLetterDestination: {
        blobContainerName: "contosocontainer",
        endpointType: "StorageBlob",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination: {
        endpointType: "ServiceBusQueue",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ",
    },
    eventSubscriptionName: "examplesubscription1",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    dead_letter_destination={
        "blob_container_name": "contosocontainer",
        "endpoint_type": "StorageBlob",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination={
        "endpoint_type": "ServiceBusQueue",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ",
    },
    event_subscription_name="examplesubscription1",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			DeadLetterDestination: &eventgrid.StorageBlobDeadLetterDestinationArgs{
				BlobContainerName: pulumi.String("contosocontainer"),
				EndpointType:      pulumi.String("StorageBlob"),
				ResourceId:        pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg"),
			},
			Destination: &eventgrid.ServiceBusQueueEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("ServiceBusQueue"),
				ResourceId:   pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription1"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        DeadLetterDestination = new AzureNative.EventGrid.Inputs.StorageBlobDeadLetterDestinationArgs
        {
            BlobContainerName = "contosocontainer",
            EndpointType = "StorageBlob",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
        },
        Destination = new AzureNative.EventGrid.Inputs.ServiceBusQueueEventSubscriptionDestinationArgs
        {
            EndpointType = "ServiceBusQueue",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ",
        },
        EventSubscriptionName = "examplesubscription1",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.StorageBlobDeadLetterDestinationArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .deadLetterDestination(StorageBlobDeadLetterDestinationArgs.builder()
                .blobContainerName("contosocontainer")
                .endpointType("StorageBlob")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg")
                .build())
            .destination(ServiceBusQueueEventSubscriptionDestinationArgs.builder()
                .endpointType("ServiceBusQueue")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ")
                .build())
            .eventSubscriptionName("examplesubscription1")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      deadLetterDestination:
        blobContainerName: contosocontainer
        endpointType: StorageBlob
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg
      destination:
        endpointType: ServiceBusQueue
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ContosoNamespace/queues/SBQ
      eventSubscriptionName: examplesubscription1
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1

Events flow to the Service Bus Queue specified in destination.resourceId. The deadLetterDestination configuration ensures that events which cannot be delivered after all retries are written to the specified Storage Blob container. This pattern separates event delivery from failure handling.

Queue events in Azure Storage with dead letter handling

Storage Queues offer simple, cost-effective message queuing for event-driven workloads.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    deadLetterDestination: {
        blobContainerName: "contosocontainer",
        endpointType: "StorageBlob",
        resourceId: "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination: {
        endpointType: "StorageQueue",
        queueName: "queue1",
        resourceId: "/subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    eventSubscriptionName: "examplesubscription1",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    dead_letter_destination={
        "blob_container_name": "contosocontainer",
        "endpoint_type": "StorageBlob",
        "resource_id": "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    destination={
        "endpoint_type": "StorageQueue",
        "queue_name": "queue1",
        "resource_id": "/subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
    },
    event_subscription_name="examplesubscription1",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			DeadLetterDestination: &eventgrid.StorageBlobDeadLetterDestinationArgs{
				BlobContainerName: pulumi.String("contosocontainer"),
				EndpointType:      pulumi.String("StorageBlob"),
				ResourceId:        pulumi.String("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg"),
			},
			Destination: &eventgrid.StorageQueueEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("StorageQueue"),
				QueueName:    pulumi.String("queue1"),
				ResourceId:   pulumi.String("/subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription1"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        DeadLetterDestination = new AzureNative.EventGrid.Inputs.StorageBlobDeadLetterDestinationArgs
        {
            BlobContainerName = "contosocontainer",
            EndpointType = "StorageBlob",
            ResourceId = "/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
        },
        Destination = new AzureNative.EventGrid.Inputs.StorageQueueEventSubscriptionDestinationArgs
        {
            EndpointType = "StorageQueue",
            QueueName = "queue1",
            ResourceId = "/subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg",
        },
        EventSubscriptionName = "examplesubscription1",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.StorageBlobDeadLetterDestinationArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .deadLetterDestination(StorageBlobDeadLetterDestinationArgs.builder()
                .blobContainerName("contosocontainer")
                .endpointType("StorageBlob")
                .resourceId("/subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg")
                .build())
            .destination(StorageQueueEventSubscriptionDestinationArgs.builder()
                .endpointType("StorageQueue")
                .queueName("queue1")
                .resourceId("/subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg")
                .build())
            .eventSubscriptionName("examplesubscription1")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      deadLetterDestination:
        blobContainerName: contosocontainer
        endpointType: StorageBlob
        resourceId: /subscriptions/55f3dcd4-cac7-43b4-990b-a139d62a1eb2/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg
      destination:
        endpointType: StorageQueue
        queueName: queue1
        resourceId: /subscriptions/d33c5f7a-02ea-40f4-bf52-07f17e84d6a8/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/contosostg
      eventSubscriptionName: examplesubscription1
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1

The destination.queueName property specifies which queue receives events within the Storage Account identified by destination.resourceId. The deadLetterDestination captures failed deliveries in a separate Storage Blob container. This configuration provides basic queuing with failure tracking.

Push events to webhook endpoints

Webhooks provide an HTTP-based integration point for external systems. Event Grid validates webhook endpoints during subscription creation.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    destination: {
        endpointType: "WebHook",
        endpointUrl: "https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE",
    },
    eventSubscriptionName: "examplesubscription1",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    destination={
        "endpoint_type": "WebHook",
        "endpoint_url": "https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE",
    },
    event_subscription_name="examplesubscription1",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			Destination: &eventgrid.WebHookEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("WebHook"),
				EndpointUrl:  pulumi.String("https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription1"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        Destination = new AzureNative.EventGrid.Inputs.WebHookEventSubscriptionDestinationArgs
        {
            EndpointType = "WebHook",
            EndpointUrl = "https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE",
        },
        EventSubscriptionName = "examplesubscription1",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .destination(WebHookEventSubscriptionDestinationArgs.builder()
                .endpointType("WebHook")
                .endpointUrl("https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE")
                .build())
            .eventSubscriptionName("examplesubscription1")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      destination:
        endpointType: WebHook
        endpointUrl: https://azurefunctionexample.azurewebsites.net/runtime/webhooks/EventGrid?functionName=EventGridTrigger1&code=PASSWORDCODE
      eventSubscriptionName: examplesubscription1
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg/providers/Microsoft.EventGrid/topics/exampletopic1

Event Grid delivers events via HTTP POST to the URL specified in destination.endpointUrl. The endpoint must respond to validation requests during subscription creation. The filter properties control which events are delivered based on subject matching.

Subscribe to resource group events

Resource group subscriptions capture events from all resources within a group, enabling centralized monitoring.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const eventSubscription = new azure_native.eventgrid.EventSubscription("eventSubscription", {
    destination: {
        endpointType: "WebHook",
        endpointUrl: "https://requestb.in/15ksip71",
    },
    eventSubscriptionName: "examplesubscription2",
    filter: {
        isSubjectCaseSensitive: false,
        subjectBeginsWith: "ExamplePrefix",
        subjectEndsWith: "ExampleSuffix",
    },
    scope: "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg",
});
import pulumi
import pulumi_azure_native as azure_native

event_subscription = azure_native.eventgrid.EventSubscription("eventSubscription",
    destination={
        "endpoint_type": "WebHook",
        "endpoint_url": "https://requestb.in/15ksip71",
    },
    event_subscription_name="examplesubscription2",
    filter={
        "is_subject_case_sensitive": False,
        "subject_begins_with": "ExamplePrefix",
        "subject_ends_with": "ExampleSuffix",
    },
    scope="subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg")
package main

import (
	eventgrid "github.com/pulumi/pulumi-azure-native-sdk/eventgrid/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := eventgrid.NewEventSubscription(ctx, "eventSubscription", &eventgrid.EventSubscriptionArgs{
			Destination: &eventgrid.WebHookEventSubscriptionDestinationArgs{
				EndpointType: pulumi.String("WebHook"),
				EndpointUrl:  pulumi.String("https://requestb.in/15ksip71"),
			},
			EventSubscriptionName: pulumi.String("examplesubscription2"),
			Filter: &eventgrid.EventSubscriptionFilterArgs{
				IsSubjectCaseSensitive: pulumi.Bool(false),
				SubjectBeginsWith:      pulumi.String("ExamplePrefix"),
				SubjectEndsWith:        pulumi.String("ExampleSuffix"),
			},
			Scope: pulumi.String("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg"),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var eventSubscription = new AzureNative.EventGrid.EventSubscription("eventSubscription", new()
    {
        Destination = new AzureNative.EventGrid.Inputs.WebHookEventSubscriptionDestinationArgs
        {
            EndpointType = "WebHook",
            EndpointUrl = "https://requestb.in/15ksip71",
        },
        EventSubscriptionName = "examplesubscription2",
        Filter = new AzureNative.EventGrid.Inputs.EventSubscriptionFilterArgs
        {
            IsSubjectCaseSensitive = false,
            SubjectBeginsWith = "ExamplePrefix",
            SubjectEndsWith = "ExampleSuffix",
        },
        Scope = "subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg",
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.eventgrid.EventSubscription;
import com.pulumi.azurenative.eventgrid.EventSubscriptionArgs;
import com.pulumi.azurenative.eventgrid.inputs.EventSubscriptionFilterArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var eventSubscription = new EventSubscription("eventSubscription", EventSubscriptionArgs.builder()
            .destination(WebHookEventSubscriptionDestinationArgs.builder()
                .endpointType("WebHook")
                .endpointUrl("https://requestb.in/15ksip71")
                .build())
            .eventSubscriptionName("examplesubscription2")
            .filter(EventSubscriptionFilterArgs.builder()
                .isSubjectCaseSensitive(false)
                .subjectBeginsWith("ExamplePrefix")
                .subjectEndsWith("ExampleSuffix")
                .build())
            .scope("subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg")
            .build());

    }
}
resources:
  eventSubscription:
    type: azure-native:eventgrid:EventSubscription
    properties:
      destination:
        endpointType: WebHook
        endpointUrl: https://requestb.in/15ksip71
      eventSubscriptionName: examplesubscription2
      filter:
        isSubjectCaseSensitive: false
        subjectBeginsWith: ExamplePrefix
        subjectEndsWith: ExampleSuffix
      scope: subscriptions/5b4b650e-28b9-4790-b3ab-ddbd88d727c4/resourceGroups/examplerg

The scope property references a resource group rather than a specific topic. Event Grid delivers events from all resources in that group to the webhook destination. This pattern enables monitoring across multiple resource types without individual subscriptions.

Beyond these examples

These snippets focus on specific event subscription features: destination types, subject-based filtering, and dead letter handling with Storage Blob. They’re intentionally minimal rather than full event-driven architectures.

The examples reference pre-existing infrastructure such as Event Grid topics or event sources, destination resources like Event Hubs and Azure Functions, and Storage accounts for dead letter destinations. They focus on configuring the subscription rather than provisioning the surrounding infrastructure.

To keep things focused, common subscription patterns are omitted, including:

  • Retry policies (maxDeliveryAttempts, eventTimeToLiveInMinutes)
  • Managed identity authentication (deliveryWithResourceIdentity, deadLetterWithResourceIdentity)
  • Event delivery schemas (CloudEventSchemaV1_0, CustomInputSchema)
  • Advanced filters (numeric, boolean, string array operators)
  • Expiration time configuration
  • Labels for subscription organization

These omissions are intentional: the goal is to illustrate how each subscription feature is wired, not provide drop-in event routing modules. See the EventSubscription resource reference for all available configuration options.

Let's configure Azure Event Grid Subscriptions

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Configuration & Destinations
What destination types are supported for event delivery?
Event subscriptions support seven destination types: EventHub, AzureFunction, HybridConnection, ServiceBusQueue, ServiceBusTopic, StorageQueue, and WebHook. Each destination type requires an endpointType and resourceId (or endpointUrl for WebHook).
What scope formats can I use for event subscriptions?
The scope can be a subscription (/subscriptions/{subscriptionId}/), resource group (/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}), specific resource, or EventGrid topic. The scope determines which resource’s events the subscription receives.
What's the default event delivery schema?
The default eventDeliverySchema is EventGridSchema. You can change this when creating the subscription to use a different schema format.
Event Filtering
How do I filter events by subject?
Configure the filter property with subjectBeginsWith and subjectEndsWith to match event subjects. Use isSubjectCaseSensitive (defaults to false) to control whether matching is case-sensitive.
Error Handling & Reliability
What's the difference between deadLetterDestination and deadLetterWithResourceIdentity?
deadLetterDestination uses Azure Event Grid’s identity to authenticate with the dead letter destination, while deadLetterWithResourceIdentity uses the managed identity configured on the parent resource (topic or domain). The same distinction applies to destination vs deliveryWithResourceIdentity.
Is a dead letter destination required?
No, deadLetterDestination is optional. However, most examples include it to handle events that cannot be delivered. Without it, failed events may be lost after retry attempts are exhausted.
How do I configure retry behavior for failed deliveries?
Use the retryPolicy property to configure the maximum number of delivery attempts and time to live for events. This controls how Event Grid handles delivery failures.
Immutability & Limitations
What properties can't be changed after creation?
Both scope and eventSubscriptionName are immutable. To change either value, you must delete and recreate the event subscription.
API Versions
How do I use a different API version?
The default API version is 2025-02-15. To use other available versions (2022-06-15, 2023-06-01-preview, etc.), generate a local SDK package using: pulumi package add azure-native eventgrid [ApiVersion].

Using a different cloud?

Explore messaging guides for other cloud providers: