Oefening: een werkstroom maken met Durable Functions
In deze oefening gebruikt u het voorbeeldscenario uit de vorige les om te leren hoe u een goedkeuringswerkstroom maakt in Azure Portal met behulp van Durable Functions.
Een functie-app maken
Meld u aan bij de Azure Portal met hetzelfde account dat u hebt gebruikt om de sandbox te activeren.
Selecteer in het menu van Azure Portal of op de startpagina onder Azure-servicesde optie Een resource maken. Het deelvenster Een resource maken wordt weergegeven.
Zoek en selecteer Functie-applicatie. Selecteer Verbruiken selecteer vervolgens de knop Selecteer. Het deelvenster Functie-App maken wordt weergegeven.
Voer op het tabblad Basisinformatie de volgende waarden in voor elke instelling.
Instelling Waarde Beschrijving projectdetails Abonnement Concierge-abonnement Hiermee geeft u het abonnement op waaronder deze nieuwe functie-app wordt gemaakt. Resourcegroep Selecteer in de vervolgkeuzelijst [naam sandbox-resourcegroep] Hiermee geeft u de naam op van de resourcegroep waarin u uw functie-app wilt maken. We maken de functie-app in de sandbox-resourcegroep die is toegewezen toen we de sandbox hebben geactiveerd, namelijk [naam sandbox-resourcegroep] .Instantiegegevens Naam van functie-app nl-NL: [Wereldwijd Unieke Naam] Hiermee geeft u de naam op die uw nieuwe functie-app identificeert. Geldige tekens zijn a-z
,0-9
en-
.Uitgeven Code Hiermee geeft u op dat de functie code gebruikt in plaats van een container. Runtimestack Node.js Hiermee geeft u op dat de voorbeeldcode in deze module is geschreven in JavaScript. Versie 20 LTS Specificeert de versie van de runtimestack. Regio [Selecteren in de lijst na deze sectie] Kies de regio die zich het dichtst bij u bevindt en die ook een van de toegestane Sandbox-regio's is, zoals hieronder volgen. besturingssysteem Besturingssysteem Windows Hiermee geeft u het besturingssysteem op dat als host fungeert voor de functie-app. plannen Met de gratis sandbox kunt u resources maken in een subset van de globale Azure-regio's. Selecteer een regio in de volgende lijst wanneer u resources maakt:
- West VS 2
- Zuid-Centraal VS
- Centraal-VS
- Oostelijke Verenigde Staten
- West-Europa
- Zuidoost-Azië
- Oost-Japan
- Brazilië - zuid
- Australië - zuidoost
- Centraal-India
Kies Volgende: Opslag.
Voer op het tabblad Storage de volgende waarden in voor elke instelling.
Instelling Waarde Beschrijving Opslag Opslagaccount nl-NL: [Wereldwijd Unieke Naam] Hiermee geeft u de naam op van het nieuwe opslagaccount dat wordt gebruikt door uw functie-app (die niet overeenkomt met de wereldwijd unieke naam die u voor uw functie hebt opgegeven). Namen van opslagaccounts moeten tussen de 3 en 24 tekens lang zijn en mogen alleen cijfers en kleine letters bevatten. In dit dialoogvenster wordt het veld automatisch gevuld met een unieke naam die dynamisch wordt gegenereerd. U kunt echter gerust een andere naam of zelfs een bestaand account gebruiken. Selecteer Volgende: Netwerken. Accepteer de standaardwaarden.
Selecteer Volgende: Bewaking.
Voer op het tabblad Bewaking de volgende waarde in voor de instelling.
Instelling Waarde Beschrijving Application Insights- Application Insights inschakelen Geen Hiermee geeft u op dat Application Insights is uitgeschakeld voor deze module. Selecteer Beoordelen en maken en bekijk de opties die u hebt geconfigureerd. Als u tevreden bent met uw opties, selecteert u Maken om de functie-app in te richten en te implementeren.
Wacht totdat de implementatie is voltooid voordat u doorgaat. De implementatie kan enkele minuten duren.
Installeer het npm-pakket durable-functions
Omdat we JavaScript Durable Functions maken, moeten we het durable-functions
npm-pakket installeren. Voer hiervoor de volgende stappen uit.
Selecteer Ga naar resource om uw functie-app te selecteren. Het deelvenster van de-functie-app wordt weergegeven.
Selecteer in het linkermenuvenster, onder Ontwikkelhulpprogramma's, App Service Editor (preview)en selecteer vervolgens Editor openen. De App Service-editor deelvenster Snel starten wordt weergegeven in een nieuw browservenster.
Markeer in het linkermenuvenster de map WWWROOT.
Selecteer in het linkerwerkbalkmenu het pictogram Open Console.
Met deze actie wordt de console gestart. U kunt deze console gebruiken voor toegang tot de webserver die als host fungeert voor uw functies en het schrijven van de code voor uw functies.
Maak een nieuw package.json-bestand.
Voer de volgende opdrachten uit in de console om het nieuwe JSON-bestand te maken en open het in de editor.
touch package.json open package.json
Voeg de volgende code toe.
{ "name": "example", "version": "1.0.0" }
Vervang
example
door de naam van uw pakket. U kunt bijvoorbeeld de wereldwijd unieke naam gebruiken die u eerder hebt opgegeven voor uw functie.
Selecteer Ctrl+S- om het bestand op te slaan en Ctrl+Q- om het document te sluiten.
Ga terug naar Azure Portal.
Selecteer in de linkermenubalk onder Development ToolsConsole. Het deelvenster Console wordt weergegeven voor uw functie-app.
Voer de volgende opdracht uit:
npm install durable-functions
Met deze opdracht wordt het knooppuntpakketbeheer geïnstrueerd om het
durable-functions
-pakket en eventuele vereiste afhankelijkheden te installeren. Het kan enkele minuten duren voordat de installatie is voltooid en het knooppuntpakketbeheer kan enkele waarschuwingen weergeven, die u kunt negeren.Notitie
Als u wordt gevraagd een nieuwere versie van npm te installeren, gebruikt u de opdracht in de fout om de nieuwere versie te installeren en installeert u het
durable-functions
pakket zodra de nieuwe versie is geïnstalleerd.Wacht totdat alle pakketten zijn geïnstalleerd.
Schuif in het linkermenuvenster omhoog en selecteer Overzichten selecteer in de bovenste menubalk Opnieuw opstartenen selecteer vervolgens Ja wanneer u wordt gevraagd opnieuw op te starten.
Wacht totdat het opnieuw opstarten is voltooid voordat u doorgaat.
De clientfunctie maken voor het indienen van een ontwerpvoorstel
Selecteer in het menu van Azure Portal of op de startpagina onder Recente resourcesde optie Alleweergeven en selecteer vervolgens uw functie-app. Het deelvenster van de-functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functions in het midden van het scherm.
Selecteer de knop Maken in Azure Portal. Het deelvenster Functie maken wordt weergegeven.
Onder Selecteer een sjabloon, voer in het vak Filter de Durable Functions HTTP-starter in en selecteer het sjabloon uit de lijst. Met deze sjabloon maakt u een duurzame functie die wordt uitgevoerd als reactie op een HTTP-aanvraag.
Voer onder Sjabloondetailsin het veld Nieuwe functie de naam HttpStart voor de functie in, selecteer in het veld Autorisatieniveau de optie Functie, en selecteer vervolgens Maken. Het deelvenster HttpStart- wordt weergegeven voor uw functie.
Selecteer in het linkermenuvenster onder Developerde optie Code + Test. Het deelvenster Code + Test wordt weergegeven voor uw functie.
De code voor het index.js-bestand wordt weergegeven in de editor. Het bestand moet er ongeveer uitzien als in het volgende voorbeeld:
const df = require("durable-functions"); module.exports = async function (context, req) { const client = df.getClient(context); const instanceId = await client.startNew(req.params.functionName, undefined, req.body); context.log(`Started orchestration with ID = '${instanceId}'.`); return client.createCheckStatusResponse(context.bindingData.req, instanceId); };
Selecteer in de vervolgkeuzelijst voor de bestanden in uw functie function.json om de bindingen weer te geven die aan uw nieuwe functie zijn gekoppeld. Met deze informatie worden verificatievereisten opgegeven, samen met de HTTP-methoden die de functie kunnen activeren. Dit bestand geeft ook aan dat de functie een client is die het orkestratieproces start. Het bestand moet er ongeveer uitzien als in het volgende voorbeeld:
{ "bindings": [ { "authLevel": "function", "name": "req", "type": "httpTrigger", "direction": "in", "route": "orchestrators/{functionName}", "methods": [ "post", "get" ] }, { "name": "$return", "type": "http", "direction": "out" }, { "name": "starter", "type": "orchestrationClient", "direction": "in" } ] }
Notitie
Een binding koppelt resources en andere items aan een trigger. Het is een declaratief mechanisme dat de noodzaak om codeverwijzingen naar andere services en functies in uw code te verwijderen.
De orchestratorfunctie maken
Selecteer in het menu van Azure Portal of op de startpagina onder Recente resourcesde optie Alleweergeven en selecteer vervolgens uw functie-app. Het deelvenster van de-functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functions in het midden van het scherm.
Selecteer maken in de menubalk van Functions. Het deelvenster Functie maken wordt weergegeven.
Voer onder Selecteer een sjabloonin het vak FilterDurable Functions-orchestrator in en selecteer die sjabloon in de lijst. Met deze sjabloon maakt u een betrouwbare functie waarmee de uitvoering van functies wordt gecoördineerd.
Voer onder Sjabloondetailsvoor het veld Nieuwe functieOrchFunction in als naam van de functie en selecteer vervolgens maken. Het OrchFunction-functiepaneel wordt weergegeven.
Selecteer in het linkermenuvenster onder Developerde optie Code + Test. Het deelvenster Code + Test wordt weergegeven voor uw functie.
De code voor het index.js-bestand wordt weergegeven in de editor.
Vervang de bestaande code door de volgende code.
const df = require("durable-functions"); module.exports = df.orchestrator(function* (context) { const outputs = []; /* * We will call the approval activity with a reject and an approved to simulate both */ outputs.push(yield context.df.callActivity("Approval", "Approved")); outputs.push(yield context.df.callActivity("Approval", "Rejected")); return outputs; });
Met deze code wordt een activiteitsfunctie aangeroepen met de naam Approval, die u binnenkort maakt. De code in de orchestratorfunctie roept tweemaal de goedkeuringsfunctie aan. De eerste keer simuleert u het accepteren van het voorstel en de tweede keer test u de logica voor voorstel-afwijzing.
De waarde die elke aanroep retourneert, wordt gecombineerd en teruggegeven aan de clientfunctie. In een productieomgeving roept uw orkestratiefunctie een reeks activiteitsfuncties aan die de beslissing nemen om te accepteren of af te wijzen, en het resultaat van deze activiteiten teruggeven.
Selecteer in de bovenste menubalk Opslaan om de nieuwe functie op te slaan.
De activiteitsfunctie maken
Selecteer in het menu van Azure Portal of op de startpagina onder Recente resourcesde optie Alleweergeven en selecteer vervolgens uw functie-app. Het deelvenster van de-functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functions in het midden van het scherm.
Selecteer maken in de menubalk van Functions. Het deelvenster Functie maken wordt weergegeven.
Voer onder Selecteer een sjabloonin het vak FilterDurable Functions-activiteit in en selecteer die sjabloon in de lijst. Met deze sjabloon maakt u een duurzame functie die wordt uitgevoerd wanneer een activiteit wordt aangeroepen door een orchestratorfunctie.
Voer onder sjabloondetailsvoor het veld Nieuwe functieGoedkeuring in voor de naam van de functie en selecteer vervolgens maken. Het deelvenster Goedkeuring wordt weergegeven voor uw functie-app.
Selecteer in het linkermenuvenster onder Developerde optie Code + Test. Het deelvenster Code + Test wordt weergegeven voor uw functie.
De code voor het index.js-bestand wordt weergegeven in de editor.
Vervang de bestaande code door de volgende code.
module.exports = async function (context) { return `Your project design proposal has been - ${context.bindings.name}!`; };
Met deze functie wordt een bericht geretourneerd dat de status van het voorstel aangeeft. De expressie
context.bindings.name
isAccepted
ofRejected
, afhankelijk van de parameter die is doorgegeven aan de functie van de orchestrator. In een praktijkscenario zou je de logica toevoegen waarmee de bewerkingen accepteren of weigeren in deze functie verwerkt worden.Selecteer in de bovenste menubalk Opslaan om de nieuwe functie op te slaan.
Controleer of de durable functions-werkstroom wordt gestart
Selecteer in het menu van Azure Portal of op de startpagina onder Recente resourcesde optie Alleweergeven en selecteer vervolgens uw functie-app. Het deelvenster van de-functie-app wordt weergegeven.
Selecteer het tabblad Functions in het midden van de pagina.
Selecteer de functie HttpStart. Het deelvenster HttpStart- wordt weergegeven voor uw functie.
Selecteer in de bovenste menubalk Functie-URL ophalen en kopieer vervolgens de URL. Uw URL moet er ongeveer uitzien als in het volgende voorbeeld:
https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
U gebruikt deze URL om uw functies uit te voeren.
Open een nieuw browservenster en ga naar de URL die u hebt gekopieerd. Vervang in de URL de tijdelijke aanduiding {functionName} door OrchFunction, die eruit moet zien als in het volgende voorbeeld:
https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Het antwoordbericht bevat een set URI-eindpunten die u kunt gebruiken om de uitvoering te controleren en te beheren. Dit moet er ongeveer uitzien als in het volgende voorbeeld:
{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "statusQueryGetUri": "https://example.azurewebsites.net/...", "sendEventPostUri": "https://example.azurewebsites.net/...", "terminatePostUri": "https://example.azurewebsites.net/...", "rewindPostUri": "https://example.azurewebsites.net/...", "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..." }
Kopieer de statusQueryGetUri waarde en gebruik uw webbrowser om naar deze URL te gaan. U zou een antwoordbericht moeten zien dat lijkt op het volgende voorbeeld:
{ "name": "OrchFunction", "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "runtimeStatus": "Completed", "input": null, "customStatus": null, "output": [ "Your project design proposal has been - Approved!", "Your project design proposal has been - Rejected!" ], "createdTime": "2019-04-16T15:23:03Z", "lastUpdatedTime": "2019-04-16T15:23:35Z" }
Vergeet niet dat de orchestratiefunctie de activiteitsfunctie twee keer uitvoert. De eerste keer geeft de activiteitsfunctie aan dat het projectvoorstel wordt geaccepteerd. De tweede keer wordt het voorstel afgewezen. De orchestratiefunctie combineert de berichten van beide functieoproepen en retourneert deze aan de clientfunctie.