Claude-skill-registry azure-event-grid

Event routing with Azure Event Grid. Configure topics, subscriptions, event handlers, and dead-lettering. Use for event-driven architectures, serverless triggers, and reactive systems on Azure.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/azure-event-grid" ~/.claude/skills/majiayu000-claude-skill-registry-azure-event-grid && rm -rf "$T"
manifest: skills/data/azure-event-grid/SKILL.md
source content

Azure Event Grid

Expert guidance for event routing and serverless event handling.

Create Resources

# Create custom topic
az eventgrid topic create \
  --name myeventtopic \
  --resource-group myResourceGroup \
  --location eastus

# Create system topic (for Azure services)
az eventgrid system-topic create \
  --name mysystemtopic \
  --resource-group myResourceGroup \
  --source /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account} \
  --topic-type Microsoft.Storage.StorageAccounts \
  --location eastus

# Create subscription
az eventgrid event-subscription create \
  --name mysubscription \
  --source-resource-id /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.EventGrid/topics/myeventtopic \
  --endpoint https://myfunction.azurewebsites.net/api/handler \
  --endpoint-type webhook

Event Subscriptions

Webhook Endpoint

az eventgrid event-subscription create \
  --name webhook-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint https://myapi.com/events \
  --endpoint-type webhook \
  --event-delivery-schema eventgridschema

Azure Function

az eventgrid event-subscription create \
  --name function-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app}/functions/{function} \
  --endpoint-type azurefunction

Service Bus Queue

az eventgrid event-subscription create \
  --name servicebus-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.ServiceBus/namespaces/{ns}/queues/{queue} \
  --endpoint-type servicebusqueue

Storage Queue

az eventgrid event-subscription create \
  --name storage-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}/queueServices/default/queues/{queue} \
  --endpoint-type storagequeue

Publish Events

Python

from azure.eventgrid import EventGridPublisherClient, EventGridEvent
from azure.core.credentials import AzureKeyCredential

client = EventGridPublisherClient(
    endpoint="https://myeventtopic.eastus-1.eventgrid.azure.net/api/events",
    credential=AzureKeyCredential(key)
)

events = [
    EventGridEvent(
        event_type="MyApp.Orders.Created",
        data={"orderId": "12345", "customer": "John"},
        subject="orders/12345",
        data_version="1.0"
    )
]

client.send(events)

.NET

using Azure;
using Azure.Messaging.EventGrid;

var client = new EventGridPublisherClient(
    new Uri(topicEndpoint),
    new AzureKeyCredential(topicKey)
);

var events = new List<EventGridEvent>
{
    new EventGridEvent(
        subject: "orders/12345",
        eventType: "MyApp.Orders.Created",
        data        data: new { OrderId = "12345", Customer = "John" }
    )
};

await client.SendEventsAsync(events);

Cloud Events

from azure.eventgrid import EventGridPublisherClient
from azure.core.messaging import CloudEvent

client = EventGridPublisherClient(endpoint, credential)

events = [
    CloudEvent(
        type="MyApp.Orders.Created",
        source="/myapp/orders",
        data={"orderId": "12345"},
    )
]

client.send(events)

Event Filtering

Subject Filtering

az eventgrid event-subscription create \
  --name filtered-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint https://myapi.com/events \
  --subject-begins-with "orders/" \
  --subject-ends-with ".json"

Advanced Filtering

az eventgrid event-subscription create \
  --name advanced-sub \
  --source-resource-id $TOPIC_ID \
  --endpoint https://myapi.com/events \
  --advanced-filter data.priority StringIn high critical \
  --advanced-filter data.amount NumberGreaterThan 1000

Advanced Filter Examples

{
  "filter": {
    "advancedFilters": [
      {
        "operatorType": "StringIn",
        "key": "data.category",
        "values": ["electronics", "clothing"]
      },
      {
        "operatorType": "NumberGreaterThan",
        "key": "data.price",
        "value": 100
      },
      {
        "operatorType": "IsNotNull",
        "key": "data.customerId"
      }
    ]
  }
}

Dead Lettering

az eventgrid event-subscription create \
  --name sub-with-dlq \
  --source-resource-id $TOPIC_ID \
  --endpoint https://myapi.com/events \
  --deadletter-endpoint /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default/containers/deadletters \
  --max-delivery-attempts 10 \
  --event-ttl 1440

Azure Function Handler

import azure.functions as func
import json

def main(event: func.EventGridEvent):
    event_data = event.get_json()

    print(f"Event ID: {event.id}")
    print(f"Event Type: {event.event_type}")
    print(f"Subject: {event.subject}")
    print(f"Data: {json.dumps(event_data)}")

    # Process event
    if event.event_type == "MyApp.Orders.Created":
        process_order(event_data)

System Topics (Built-in Events)

# Storage events
az eventgrid system-topic event-subscription create \
  --name blob-created \
  --system-topic-name storage-topic \
  --resource-group myResourceGroup \
  --endpoint https://myfunction.azurewebsites.net/api/blobhandler \
  --included-event-types Microsoft.Storage.BlobCreated

# Resource events
az eventgrid event-subscription create \
  --name resource-changes \
  --source-resource-id /subscriptions/{sub} \
  --endpoint https://myapi.com/events \
  --included-event-types Microsoft.Resources.ResourceWriteSuccess

Bicep Deployment

resource eventGridTopic 'Microsoft.EventGrid/topics@2023-12-15-preview' = {
  name: topicName
  location: location
  properties: {
    inputSchema: 'EventGridSchema'
    publicNetworkAccess: 'Enabled'
  }
}

resource subscription 'Microsoft.EventGrid/eventSubscriptions@2023-12-15-preview' = {
  name: 'webhook-subscription'
  scope: eventGridTopic
  properties: {
    destination: {
      endpointType: 'WebHook'
      properties: {
        endpointUrl: webhookUrl
      }
    }
    filter: {
      includedEventTypes: [
        'MyApp.Orders.Created'
        'MyApp.Orders.Updated'
      ]
    }
    retryPolicy: {
      maxDeliveryAttempts: 10
      eventTimeToLiveInMinutes: 1440
    }
  }
}

Resources