Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Genom att publicera orkestreringslivscykel-händelser till Azure Event Grid kan man möjliggöra DevOps-automatisering (till exempel blå/gröna distributioner), övervakningspaneler i realtid och spårning av långvariga bakgrundsprocesser.
Anmärkning
Den här guiden använder .NET exempel, men begreppen och Azure CLI kommandona gäller för alla Durable Functions språk som stöds.
Tips/Råd
Om du redan har konfigurerat ett anpassat Event Grid-ämne och en hanterad identitet går du vidare till Konfigurera Durable Functions publisher-appen.
Förutsättningar
Ett Durable Functions projekt som distribuerats till Azure. Om du inte har en skapar du en med hjälp av snabbstarten för önskat språk:
Den korrekta versionen av Durable Functions-tillägget. För .NET uppdaterar du tillägget till den senaste versionen:
2.7.0+ (pågående)
dotnet add package Microsoft.Azure.WebJobs.Extensions.DurableTask1.1.0+ (isolerad arbetare)
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask
För andra språk kontrollerar du
package.json,requirements.txt,pom.xmlellerrequirements.psd1.Hanterad identitet aktiverad och konfigurerad på din funktionsapp.
En aktiv lagringsleverantör eller den lokala Azurite-lagringsemulatorn.
Azure CLI eller Azure Cloud Shell.
Ett HTTP-testverktyg som skyddar dina data.
Skapa ett anpassat Event Grid-ämne
Du kan skapa ett Event Grid-ämne för att skicka händelser från Durable Functions med hjälp av the Azure CLI, PowerShell eller the Azure portal.
Den här guiden använder Azure CLI.
Skapa en resursgrupp
Skapa en resursgrupp med kommandot az group create. Välj en plats som stöder Event Grid och matchar var du vill distribuera dina resurser.
Anmärkning
För närvarande stöder Azure Event Grid inte alla regioner. Information om vilka regioner som stöds finns i Översikt över Azure Event Grid.
az group create --name <resource-group-name> --location <location>
Aktivera resursprovidern för Event Grid
Om det är första gången du använder Event Grid i din Azure-prenumeration kan du behöva registrera Event Grid-resursprovidern. Registrera providern genom att köra följande kommando:
az provider register --namespace Microsoft.EventGridDet kan ta en stund innan registreringen är klar. Kontrollera statusen genom att köra följande kommando:
az provider show --namespace Microsoft.EventGrid --query "registrationState"När
registrationStateärRegisteredkan du fortsätta.
Skapa ett anpassat ämne
Ett Event Grid-ämne innehåller en användardefinierad slutpunkt som du publicerar händelsen till. Ersätt <topic-name> i följande kommando med ett unikt namn för ditt ämne. Ämnesnamnet måste vara unikt eftersom det blir en DNS-post.
az eventgrid topic create --name <topic-name> --location <location> --resource-group <resource-group-name>
Hämta ämnesslutpunkten
Hämta slutpunkten för ämnet. Ersätt <topic-name> i följande kommandon med det namn du valde.
az eventgrid topic show --name <topic-name> --resource-group <resource-group-name> --query "endpoint" --output tsv
Spara den här slutpunkten för senare.
Konfigurera Event Grid-publicering med hanterad identitet (rekommenderas)
Hanterade identiteter i Azure gör det möjligt för resurser att autentisera till Azure-tjänster utan att lagra autentiseringsuppgifter, vilket förenklar säkerhets- och identitetshantering. Tilldela den hanterade identitet som är associerad med din Durable Function-app till ditt anpassade Event Grid-ämne.
Konfigurera Durable Functions publisher-appen
Även om din Durable Functions-app automatiskt publicerar orkestreringslivscykelhändelser till Event Grid måste du konfigurera anslutningsinställningarna. Lägg till följande i extensions.durableTask-avsnittet i din host.json.
{
"version": "2.0",
"extensions": {
"durableTask": {
"eventGridTopicEndpoint": "%EventGrid__topicEndpoint%",
"eventGridKeySettingName": "EventGrid__credential"
}
}
}
Anmärkning
Inställningen eventGridTopicEndpoint refererar till den anpassade ämnesslutpunkten för Event Grid som du sparade tidigare. Inställningen för autentiseringsuppgifter hanterar både scenarier med hanterad identitet och anslutningssträng.
Tilldela rollen Event Grid Data Sender
Ge din hanterade identitet behörighet att publicera händelser till Event Grid-ämnet.
az role assignment create \
--assignee <client-id-of-managed-identity> \
--assignee-principal-type ServicePrincipal \
--role "EventGrid Data Sender" \
--scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name>
Ersätt följande värden:
-
<client-id-of-managed-identity>: Klient-ID för din användartilldelade hanterade identitet -
<subscription-id>: Ditt Azure-prenumerations-ID -
<resource-group-name>: Namnet på resursgruppen som innehåller event grid-ämnet -
<topic-name>: Namnet på ditt Event Grid-ämne
Anmärkning
Rolltilldelningar kan ta 5–10 minuter att propagera. Du kan se autentiseringsfel om du fortsätter direkt efter tilldelningen.
Konfigurera appinställningar
När du har aktiverat hanterad identitet för funktionsappen och ämnet konfigurerar du inställningarna för Event Grid-appen i din Durable Functions funktionsapp.
Lägg till följande appinställningar:
-
EventGrid__topicEndpoint— Event Grid-ämnesslutpunkten. -
EventGrid__credential– inställt påmanagedidentity. -
EventGrid__clientId– det användartilldelade klient-ID:t för hanterad identitet.
az functionapp config appsettings set --name <function app name> --resource-group <resource group name> --settings EventGrid__topicEndpoint="<topic endpoint>" EventGrid__credential="managedidentity" EventGrid__clientId="<client id>"
Prenumerera på händelser
Om du vill ta emot publicerade livscykelhändelser skapar du en Event Grid-prenumeration som dirigerar händelser från ditt anpassade ämne till en prenumerant. Vanliga prenumeranttyper är Azure Functions (med en Event Grid-utlösare), Logic Apps och webhooks.
I följande exempel skapas en prenumerantfunktionsapp med en Event Grid-utlösare med hjälp av Azure CLI. Om du redan har en prenumerant går du vidare till Skapa en Event Grid-prenumeration.
Skapa en lyssnarfunktionsapp
Skapa en funktionsapp som värd för Event Grid-utlösaren. Lyssnaren måste finnas i samma region som Event Grid-ämnet.
# Create a resource group
az group create --name <listener-resource-group-name> --location <location>
# Create a storage account
az storage account create \
--name <storage-account-name> \
--resource-group <listener-resource-group-name> \
--location <location> \
--sku Standard_LRS \
--allow-blob-public-access false
# Create the function app
az functionapp create \
--resource-group <listener-resource-group-name> \
--consumption-plan-location <location> \
--runtime <preferred-runtime> \
--functions-version 4 \
--name <listener-function-app-name> \
--storage-account <storage-account-name>
Skapa och distribuera en Event Grid-utlösarfunktion
Skapa ett lokalt projekt, lägg till en Event Grid-utlösare och publicera det:
mkdir EventGridListenerFunction && cd EventGridListenerFunction
func init --name EventGridListener --runtime dotnet-isolated
func new --template "Event Grid trigger" --name EventGridTrigger
func azure functionapp publish <listener-function-app-name>
Anmärkning
Ersätt dotnet-isolated med önskad körning (node, python, javaeller powershell). Detaljerade distributionsinstruktioner finns i Publicera till Azure.
Skapa en Event Grid-prenumeration
Skapa prenumerationen med hjälp av azurefunction slutpunktstypen, som automatiskt hanterar webhook-validering:
az eventgrid event-subscription create \
--name <subscription-name> \
--source-resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name> \
--endpoint /subscriptions/<subscription-id>/resourceGroups/<listener-resource-group-name>/providers/Microsoft.Web/sites/<listener-function-app-name>/functions/EventGridTrigger \
--endpoint-type azurefunction
Tips/Råd
Att använda --endpoint-type azurefunction med funktionens resurs-ID är den rekommenderade metoden. Den hanterar webhooksvalidering automatiskt och är mer tillförlitlig än att använda --endpoint-type webhook med en URL.
Händelseschema
När ett orkestreringstillstånd ändras publicerar Durable Functions-körningen en händelse med följande struktur. Händelser genereras automatiskt för varje tillståndsövergång – du behöver inte lägga till någon kod.
| Fält | Beskrivning |
|---|---|
id |
Unik identifierare för Event Grid-händelsen. |
subject |
durable/orchestrator/{orchestrationRuntimeStatus} – statusen kan vara Running, Completed, Failedeller Terminated. |
eventType |
Alltid orchestratorEvent. |
eventTime |
Händelsetid (UTC). |
data.hubName |
TaskHub-namn . |
data.functionName |
Orchestrator-funktionsnamn. |
data.instanceId |
Unikt orkestreringsinstans-ID. |
data.runtimeStatus |
Running, Completed, Failed eller Canceled. |
data.reason |
Ytterligare spårningsdata. Mer information finns i Diagnostics i Durable Functions. |
Event Grid säkerställer leverans minst en gång, så du kan i sällsynta fall få samma händelser fler än en gång vid fel. Överväg att lägga till dedupliceringslogik med hjälp av instanceId om det behövs.
Verifiera händelseleverans
Om du vill verifiera konfigurationen från slutpunkt till slutpunkt distribuerar du din Durable Functions app och utlöser en orkestrering:
Publicera funktionskoden till Azure och kontrollera att funktionsappen visar "Körs" i Azure portalen.
I Azure-portalen kontrollerar du appinställningarna under Inställningar>Miljövariabler inkluderar
EventGrid__topicEndpointoch (om hanterad identitet används)EventGrid__credential.Utlös en orkestrering med hjälp av en HTTP-klient:
curl -X POST https://<function_app_name>.azurewebsites.net/api/HelloOrchestration_HttpStartI Azure-portalen går du till funktionsappen listener>EventGridTrigger>Monitor för att visa mottagna händelser. Du bör se händelser med ämnen som
durable/orchestrator/Runningochdurable/orchestrator/Completed.
Verifiera i Application Insights (valfritt)
Om du vill ha en mer omfattande vy kör du den här KQL-frågan i funktionsappens Application Insights-loggar:
traces
| where message contains "Event type" or message contains "Event subject"
| project timestamp, message
| order by timestamp desc
Felsökning
Händelser publiceras inte till Event Grid
Problem: Lyssnarfunktionen tar inte emot händelser.
Lösningar:
- Kontrollera att Durable Functions funktionsappen har rätt appinställningar:
-
EventGrid__topicEndpointmåste peka på din anpassade ämnesslutpunkt -
EventGrid__credentialmåste anges tillmanagedidentity -
EventGrid__clientIdmåste anges om du använder en användartilldelad identitet
-
- Kontrollera att den hanterade identiteten har rollen EventGrid Data Sender tilldelad till det anpassade event grid-ämnet.
- Kontrollera loggarna för Durable Functions-funktionsappen i Application Insights för eventuella fel.
- Kontrollera att Event Grid-ämnet finns och är tillgängligt i samma prenumeration.
Lyssnarfunktionen utlöses inte
Problem: Lyssnarfunktionen finns men körs inte när händelser publiceras.
Lösningar:
- Kontrollera att Event Grid-prenumerationen har skapats och är aktiverad:
- I Azure-portalen går du till event grid-ämnet → Prenumerationer
- Bekräfta att din lyssnarfunktions prenumeration visas med statusen Aktiverad
- Kontrollera att Event Grid-prenumerationen använder rätt slutpunktstyp:
- För Azure Functions använder du
--endpoint-type azurefunctionmed funktionens resurs-ID - Om du använde
--endpoint-type webhookkontrollerar du att webhookens URL är i rätt format:https://<function-app>.azurewebsites.net/runtime/webhooks/eventgrid?functionName=<function-name>&code=<system-key>
- För Azure Functions använder du
- Kontrollera om det finns fel eller leveransproblem i lyssnarfunktionens apploggar.
- I avsnittet Event Grid → Mått söker du efter borttagna händelser som kan tyda på leveransfel.
"Förbjudet" eller autentiseringsfel i loggar
Problem: Autentiseringsfel vid publicering till Event Grid.
Lösningar:
- Kontrollera att den hanterade identiteten är korrekt konfigurerad och aktiverad i Durable Functions funktionsappen:
- I Azure-portalen går du till funktionsappen → Identity
- Bekräfta att "Status" visar På för antingen en systemtilldelad eller användartilldelad identitet
- Kontrollera att rolltilldelningen är korrekt:
- Gå till event grid-ämnet → Access Control (IAM)
- Bekräfta att den hanterade identiteten har rollen EventGrid Data Sender (obs! inget utrymme mellan "Event" och "Grid")
- Rolltilldelningen kan ta 5–10 minuter att sprida
Felmeddelanden "Anslutningen nekades" eller "slutpunkten hittades inte"
Problem: Anslutningsfel till Event Grid-ämnet.
Lösningar:
- Kontrollera att Event Grid-ämnesslutpunkten i appinställningarna är korrekt och innehåller den fullständiga URL:en (till exempel
https://my-topic.eventgrid.azure.net/api/events) - Kontrollera att Event Grid-ämnesresursen finns i samma prenumeration och region
- Kontrollera att din Durable Functions app har nätverksåtkomst till Event Grid-slutpunkten
Testa lokalt
Om du vill testa lokalt läser du Lokal testning med visningswebbappen. När du testar lokalt med hanterad identitet använder du dina autentiseringsuppgifter för utvecklare för att autentisera mot Event Grid-ämnet. Mer information finns i Konfigurera Durable Functions med hanterad identitet – lokal utveckling.
Rensa resurser
Om du inte kommer att använda resurserna som skapades i den här handledningen, ta bort dem för att undvika avgifter.
Ta bort resursgrupperna
Ta bort både resursgrupper och alla deras inneslutna resurser:
az group delete --name <resource-group-name> --yes
az group delete --name <listener-resource-group-name> --yes
Ta bort enskilda resurser
Om du vill behålla vissa resurser kan du ta bort dem individuellt:
Ta bort Event Grid-prenumerationen:
az eventgrid event-subscription delete \ --name <subscription-name> \ --source-resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name>Ta bort Event Grid-ämnet:
az eventgrid topic delete --name <topic-name> --resource-group <resource-group-name>Ta bort funktionsapparna:
az functionapp delete --name <publisher-function-app-name> --resource-group <resource-group-name> az functionapp delete --name <listener-function-app-name> --resource-group <listener-resource-group-name>Ta bort lagringskontona:
az storage account delete --name <storage-account-name> --resource-group <resource-group-name> --yes az storage account delete --name <listener-storage-account-name> --resource-group <listener-resource-group-name> --yes
Nästa steg
Läs mer om: