Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het publiceren van levenscyclusgebeurtenissen voor indelingen naar Azure Event Grid maakt DevOps-automatisering (zoals blauw/groene implementaties), realtime bewakingsdashboards en het bijhouden van langlopende achtergrondprocessen mogelijk.
Opmerking
In deze handleiding worden .NET voorbeelden gebruikt, maar de concepten en Azure CLI opdrachten zijn van toepassing op alle ondersteunde Durable Functions talen.
Aanbeveling
Als u al een aangepast Event Grid-onderwerp en een beheerde identiteit hebt geconfigureerd, gaat u naar Configure the Durable Functions publisher app.
Vereiste voorwaarden
Een Durable Functions project dat is geïmplementeerd in Azure. Als u er nog geen hebt, maakt u er een met behulp van de quickstart voor uw voorkeurstaal:
De juiste versie van de Durable Functions-uitbreiding. Werk voor .NET de extensie bij naar de nieuwste versie:
2.7.0+ (in-proces)
dotnet add package Microsoft.Azure.WebJobs.Extensions.DurableTask1.1.0+ (geïsoleerde werkrol)
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Voor andere talen controleert u uw
package.json,requirements.txt, ofpom.xmlofrequirements.psd1.Beheerde identiteit ingeschakeld en geconfigureerd in uw functie-app.
Een actieve opslagprovider of de lokale Azurite-opslagemulator.
Een HTTP-testprogramma waarmee uw gegevens veilig blijven.
Een aangepast Event Grid-onderwerp maken
U kunt een Event Grid-onderwerp maken voor het verzenden van gebeurtenissen vanuit Durable Functions met behulp van the Azure CLI, PowerShell of de Azure portal.
In deze handleiding wordt de Azure CLI gebruikt.
Een brongroep maken
Maak een resourcegroep met de opdracht az group create. Kies een locatie die Ondersteuning biedt voor Event Grid en komt overeen met de locatie waar u uw resources wilt implementeren.
Opmerking
Op dit moment biedt Azure Event Grid geen ondersteuning voor alle regio's. Zie het overzicht van Azure Event Grid voor informatie over welke regio's worden ondersteund.
az group create --name <resource-group-name> --location <location>
De Event Grid-resourceprovider inschakelen
Als dit de eerste keer is dat u Event Grid in uw Azure-abonnement gebruikt, moet u mogelijk de Event Grid-resourceprovider registreren. Voer de volgende opdracht uit om de provider te registreren:
az provider register --namespace Microsoft.EventGridHet kan even duren voordat de registratie is voltooid. Voer de volgende opdracht uit om de status te controleren:
az provider show --namespace Microsoft.EventGrid --query "registrationState"Wanneer
registrationStateRegisteredis, bent u klaar om door te gaan.
Een aangepast onderwerp maken
Een Event Grid-onderwerp biedt een door de gebruiker gedefinieerd eindpunt waarnaar u uw gebeurtenis post. Vervang <topic-name> in de volgende opdracht door een unieke naam voor uw onderwerp. De onderwerpnaam moet uniek zijn omdat deze een DNS-vermelding wordt.
az eventgrid topic create --name <topic-name> --location <location> --resource-group <resource-group-name>
Het onderwerpeindpunt ophalen
Haal het eindpunt van het onderwerp op. Vervang <topic-name> in de volgende opdrachten door de naam die u hebt gekozen.
az eventgrid topic show --name <topic-name> --resource-group <resource-group-name> --query "endpoint" --output tsv
Sla dit eindpunt op voor later gebruik.
Event Grid-publicatie configureren met beheerde identiteit (aanbevolen)
Met beheerde identiteiten in Azure kunnen resources zich authentiseren bij Azure-services zonder dat referenties hoeven te worden opgeslagen, waardoor beveiliging en identiteitsbeheer eenvoudiger worden. Wijs de beheerde identiteit die is gekoppeld aan uw Durable Function-app toe aan het aangepaste Event Grid-onderwerp.
De Durable Functions publisher-app configureren
Hoewel uw Durable Functions-app automatisch orkestratielevenscyclusevenementen in Event Grid publiceert, moet u de verbindingsinstellingen configureren. Voeg het volgende toe aan de extensions.durableTask sectie in uw host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"eventGridTopicEndpoint": "%EventGrid__topicEndpoint%",
"eventGridKeySettingName": "EventGrid__credential"
}
}
}
Opmerking
De eventGridTopicEndpoint instelling verwijst naar het eindpunt van het aangepaste Event Grid-onderwerp dat u eerder hebt opgeslagen. De referentie-instelling verwerkt zowel beheerde identiteit als verbindingsreeks scenario's.
Rol Event Grid-gegevenszender toewijzen
Verleen uw beheerde identiteit toestemming om gebeurtenissen naar het Event Grid-topic te publiceren.
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>
Vervang de volgende waarden:
-
<client-id-of-managed-identity>: De client-id van uw door de gebruiker toegewezen beheerde identiteit -
<subscription-id>: uw Azure-abonnements-id -
<resource-group-name>: De naam van de resourcegroep met het Event Grid-onderwerp -
<topic-name>: De naam van uw Event Grid-onderwerp
Opmerking
Het kan 5 tot 10 minuten duren voordat roltoewijzingen zijn doorgegeven. Mogelijk ziet u verificatiefouten als u direct na de toewijzing doorgaat.
App-instellingen configureren
Zodra u beheerde identiteit voor uw functie-app en onderwerp hebt ingeschakeld, configureert u de Event Grid-app-instellingen in uw Durable Functions functie-app.
Voeg de volgende app-instellingen toe:
-
EventGrid__topicEndpoint— het Event Grid-onderwerpeindpunt. -
EventGrid__credential— ingesteld opmanagedidentity. -
EventGrid__clientId— de client-id van een door de gebruiker toegewezen beheerde identiteit.
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>"
Abonneren op gebeurtenissen
Als u de gepubliceerde levenscyclus-gebeurtenissen wilt ontvangen, maakt u een Event Grid-abonnement waarmee gebeurtenissen van uw aangepaste onderwerp worden gerouteerd naar een abonnee. Veelvoorkomende abonneetypen zijn Azure Functions (met een Event Grid-trigger), Logic Apps en webhooks.
In het volgende voorbeeld wordt een abonneefunctie-app gemaakt met een Event Grid-trigger met behulp van de Azure CLI. Als u al een abonnee hebt, gaat u verder met het maken van een Event Grid-abonnement.
Een listener-functie-app maken
Maak een functie-app om de Event Grid-trigger te hosten. De listener moet zich in dezelfde regio bevinden als het Event Grid-onderwerp.
# 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>
Een Event Grid-triggerfunctie maken en implementeren
Een lokaal project opzetten, een Event Grid-trigger toevoegen en publiceren:
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>
Opmerking
Vervang door dotnet-isolated uw voorkeursruntime (node, python, javaof powershell). Zie Publicatie naar Azure voor gedetailleerde implementatie-instructies.
Een Event Grid-abonnement maken
Maak het abonnement met behulp van het azurefunction-eindpunttype, dat webhookvalidatie automatisch afhandelt.
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
Aanbeveling
Het gebruik --endpoint-type azurefunction met de resource-id van de functie is de aanbevolen benadering. Webhookvalidatie wordt automatisch verwerkt en is betrouwbaarder dan het gebruik van --endpoint-type webhook met een URL.
Gebeurtenisschema
Wanneer de toestand van een orkestratie verandert, publiceert de Durable Functions-runtime een gebeurtenis met de volgende structuur. Gebeurtenissen worden automatisch gegenereerd voor elke statusovergang. U hoeft geen code toe te voegen.
| Veld | Beschrijving |
|---|---|
id |
Unieke id voor de Event Grid-gebeurtenis. |
subject |
durable/orchestrator/{orchestrationRuntimeStatus}— de status kan Runningzijn, Completedof FailedTerminated. |
eventType |
Altijd orchestratorEvent. |
eventTime |
Tijd van gebeurtenis (UTC). |
data.hubName |
TaskHub-naam . |
data.functionName |
De naam van de Orchestrator-functie. |
data.instanceId |
Unieke orkestratie-instantie-ID. |
data.runtimeStatus |
Running, Completed, Failed of Canceled. |
data.reason |
Aanvullende traceringsgegevens. Zie Diagnostics in Durable Functions voor meer informatie. |
Event Grid zorgt voor ten minste één levering, dus u kunt dubbele gebeurtenissen ontvangen in zeldzame foutscenario's. Overweeg indien nodig ontdubbelingslogica instanceId toe te voegen.
Gebeurtenislevering verifiëren
Om de end-to-end-installatie te verifiëren, implementeer uw Durable Functions-app en activeer een orkestratie.
Publiceer de functiecode naar Azure en controleer of de functie-app wordt uitgevoerd in de Azure-portal.
Controleer in de Azure-portal uw app-instellingen onder Settings>Omgevingsvariabelen
EventGrid__topicEndpointen (indien met beheerde identiteit)EventGrid__credential.Een orkestratie activeren met behulp van een HTTP-client:
curl -X POST https://<function_app_name>.azurewebsites.net/api/HelloOrchestration_HttpStartNavigeer in de Azure-portal naar de functie-app listener>EventGridTrigger>Monitor om ontvangen gebeurtenissen weer te geven. U zou gebeurtenissen met onderwerpen zoals
durable/orchestrator/Runningendurable/orchestrator/Completedmoeten zien.
Controleren in Application Insights (optioneel)
Voor een uitgebreider overzicht voert u deze KQL-query uit in de Application Insights Logs voor uw functie-app:
traces
| where message contains "Event type" or message contains "Event subject"
| project timestamp, message
| order by timestamp desc
Troubleshooting
Gebeurtenissen worden niet gepubliceerd naar Event Grid
Probleem: de listenerfunctie ontvangt geen gebeurtenissen.
Oplossingen:
- Controleer of de Durable Functions functie-app de juiste app-instellingen heeft:
-
EventGrid__topicEndpointmoet verwijzen naar uw aangepaste onderwerpeindpunt -
EventGrid__credentialmoet zijn ingesteld opmanagedidentity -
EventGrid__clientIdmoet worden ingesteld als u een door de gebruiker toegewezen identiteit gebruikt
-
- Controleer of voor de beheerde identiteit de rol EventGrid-gegevenszender is toegewezen aan het aangepaste Event Grid-onderwerp.
- Controleer de Durable Functions functie-app-logboeken in Application Insights op fouten.
- Controleer of het Event Grid-onderwerp bestaat en toegankelijk is in hetzelfde abonnement.
De listenerfunctie wordt niet geactiveerd
Probleem: de listenerfunctie bestaat, maar wordt niet uitgevoerd wanneer gebeurtenissen worden gepubliceerd.
Oplossingen:
- Controleer of het Event Grid-abonnement is gemaakt en is ingeschakeld:
- Navigeer in de Azure-portal naar het Event Grid-onderwerp → Subscriptions
- Controleer of het abonnement van uw listenerfunctie wordt vermeld met de status Ingeschakeld
- Controleer of het Event Grid-abonnement het juiste eindpunttype gebruikt:
- Gebruik voor Azure Functions
--endpoint-type azurefunctionmet de resource-id van de functie - Als u deze hebt gebruikt
--endpoint-type webhook, controleert u of de URL van de webhook de juiste indeling heeft:https://<function-app>.azurewebsites.net/runtime/webhooks/eventgrid?functionName=<function-name>&code=<system-key>
- Gebruik voor Azure Functions
- Controleer de logboeken van de listener-functie-app op fouten of leveringsproblemen.
- Controleer in het Event Grid-onderwerp → metrische gegevens op verwijderde gebeurtenissen die kunnen duiden op bezorgingsfouten.
'Verboden' en verificatiefouten in logboeken
Probleem: verificatiefouten bij het publiceren naar Event Grid.
Oplossingen:
- Controleer of de beheerde identiteit correct is geconfigureerd en ingeschakeld in de Durable Functions functie-app:
- Navigeer in de Azure-portal naar uw functie-app → Identity
- Bevestig dat "Status" Aan toont voor zowel systeemtoegewezen als gebruikers toegewezen identiteit
- Controleer of de roltoewijzing juist is:
- Navigeer naar het Event Grid-onderwerp → Access Control (IAM)
- Controleer of uw beheerde identiteit de rol EventGrid-gegevenszender heeft (opmerking: geen spatie tussen 'Event' en 'Grid')
- Het kan 5-10 minuten duren voordat de roltoewijzing is doorgegeven
Fouten 'Verbinding geweigerd' of 'eindpunt niet gevonden'
Probleem: Verbindingsfouten met het Event Grid-onderwerp.
Oplossingen:
- Controleer of het Event Grid-onderwerpeindpunt in uw app-instellingen juist is en de volledige URL bevat (bijvoorbeeld
https://my-topic.eventgrid.azure.net/api/events) - Controleer of de Event Grid-onderwerpresource bestaat in hetzelfde abonnement en dezelfde regio
- Controleer of uw Durable Functions-app netwerktoegang heeft tot het Event Grid-eindpunt
Lokaal testen
Als u lokaal wilt testen, raadpleegt u Lokaal testen met de viewer-web-app. Wanneer u lokaal test met een beheerde identiteit, gebruikt u uw ontwikkelaarsreferenties om te autoriseren tegen het Event Grid-topic. Zie Configureer Durable Functions met beheerde identiteit - Lokale ontwikkeling voor meer informatie.
De hulpbronnen opschonen
Als u de resources die in deze zelfstudie zijn gemaakt niet meer gaat gebruiken, verwijdert u deze om kosten te voorkomen.
De resourcegroepen verwijderen
Verwijder zowel resourcegroepen als alle bijbehorende resources:
az group delete --name <resource-group-name> --yes
az group delete --name <listener-resource-group-name> --yes
Afzonderlijke bronnen verwijderen
Als u bepaalde resources wilt behouden, kunt u ze afzonderlijk verwijderen:
Het Event Grid-abonnement verwijderen:
az eventgrid event-subscription delete \ --name <subscription-name> \ --source-resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name>Het Event Grid-onderwerp verwijderen:
az eventgrid topic delete --name <topic-name> --resource-group <resource-group-name>Verwijder de functie-apps:
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>Verwijder de opslagaccounts:
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
Volgende stappen
Meer informatie over: