Oefening: Een werkstroom maken met behulp van 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 Azure Portal met het account waarmee u de sandbox hebt geactiveerd.
Selecteer in het menu van Azure Portal of op de startpagina onder Azure-services de optie Een resource maken. Het deelvenster Een resource maken wordt weergegeven.
Zoek en selecteer Functie-app. Selecteer Verbruik en selecteer vervolgens de knop Selecteren . Het deelvenster Functie-app maken wordt weergegeven.
Voer op het tabblad Basisinformatie de volgende waarden in voor elke instelling.
Instelling Weergegeven als Beschrijving Projectgegevens Abonnement Concierge-abonnement Hiermee geeft u aan met welk abonnement deze nieuwe functie-app is gemaakt. Resourcegroep Selecteer in de vervolgkeuzelijst [naam sandbox-resourcegroep] Hier geeft u de naam op van de resourcegroep waarin uw functie-app moet worden gemaakt. We maken de functie-app in de sandbox-resourcegroep die is toegewezen toen we de sandbox hebben geactiveerd, namelijk [naam sandbox-resourcegroep] . Exemplaardetails Functions App-naam [Wereldwijd unieke naam] Dit is de naam waarmee uw nieuwe functie-app wordt aangeduid. Geldige tekens zijn a-z
,0-9
en-
.Publiceren Code Hiermee geeft u op dat de functie code gebruikt in plaats van een container. Runtimestack Node.js Geeft aan dat de voorbeeldcode in deze module is geschreven in JavaScript. Versie 20 LTS Hiermee wordt de versie van de runtimestack aangegeven. Regio [Selecteer 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 die volgen. Besturingssysteem Besturingssysteem Windows Hiermee wordt het besturingssysteem aangeduid dat als host fungeert voor de functie-app. Plannen Met de gratis sandbox kunt u resources maken in een subset met wereldwijde Azure-regio's. Selecteer een regio in de volgende lijst wanneer u resources maakt:
- VS - west 2
- VS - zuid-centraal
- Central US
- VS - oost
- Europa -west
- Azië - zuidoost
- Japan East
- Brazilië - zuid
- Australië - zuidoost
- India - centraal
Selecteer Volgende: Opslag.
Voer op het tabblad Opslag de volgende waarden in voor elke instelling.
Instelling Weergegeven als Beschrijving Storage Opslagaccount [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 dialoog venster wordt het veld automatisch ingevuld met een dynamisch gegenereerde unieke naam. 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 Weergegeven als Beschrijving Application Insights Application Insights inschakelen Nee 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 tot de implementatie is voltooid voordat u doorgaat. De implementatie kan enkele minuten duren.
Het npm-pakket installeren voor Durable-Functions
Omdat we JavaScript Durable Functions maken, moeten we het durable-functions
npm-pakket installeren. We voeren hiervoor de volgende stappen uit.
Selecteer Ga naar de resource om uw functie-app te selecteren. Het deelvenster Functie-app wordt weergegeven.
Selecteer in het linkermenuvenster onder Ontwikkelhulpprogramma's De App Service-editor (preview) en selecteer vervolgens Open editor. Het snelstartvenster van de App Service-editor wordt weergegeven in een nieuw browservenster.
Markeer in het linkermenuvenster de map WWWROOT .
Selecteer in het linkerwerkbalkmenu het pictogram Console openen.
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 door
example
de naam van uw pakket. U kunt bijvoorbeeld de wereldwijd unieke naam gebruiken die u eerder voor uw functie hebt opgegeven.
Gebruik Ctrl+S om het bestand op te slaan en Ctrl+Q om het document te sluiten.
Ga terug naar de Azure-portal.
Selecteer Console in de linkermenubalk onder Ontwikkelhulpprogramma's. Het consolevenster 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 Overzicht, selecteer in de bovenste menubalk opnieuw opstarten en selecteer vervolgens Ja wanneer u wordt gevraagd opnieuw op te starten.
Wacht tot opnieuw opstarten is voltooid voordat u doorgaat.
De client-functie maken voor het indienen van een ontwerpvoorstel
Selecteer alles weergeven in het menu van Azure Portal of op de startpagina onder Recente resources en selecteer vervolgens uw functie-app. Het deelvenster Functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functies in het midden van het scherm.
Selecteer de knop Maken in Azure Portal . Het deelvenster Functie maken wordt weergegeven.
Voer onder Selecteer een sjabloon in het vak Filter de HTTP-starter van Durable Functions in en selecteer die sjabloon in de lijst. Met deze sjabloon maakt u een duurzame functie die wordt uitgevoerd in reactie op een HTTP-aanvraag.
Voer onder Sjabloondetails voor het veld Nieuwe functie HttpStart in voor de naam van de functie en selecteer in het veld Autorisatieniveau functie en selecteer vervolgens Maken. Het deelvenster HttpStart wordt weergegeven voor uw functie.
Selecteer code + test in het linkermenuvenster onder Ontwikkelaars. Het deelvenster Code en test wordt weergegeven voor uw functie.
De code voor het index.js-bestand wordt weergegeven in de editor. Uw bestand zou er moeten uitzien zoals 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 specificeert u eventuele verificatievereisten, samen met de HTTP-methoden waarmee de functie kan worden geactiveerd. In dit bestand wordt ook aangegeven dat de functie een client is waarmee het indelingsproces wordt gestart. Uw bestand zou er moeten uitzien zoals 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
Via een binding worden resources en andere items gekoppeld aan een trigger. Het is een declaratief mechanisme dat de noodzaak om codeverwijzingen naar andere services en functies in uw code te verwijderen.
De orchestrator-functie maken
Selecteer alles weergeven in het menu van Azure Portal of op de startpagina onder Recente resources en selecteer vervolgens uw functie-app. Het deelvenster Functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functies in het midden van het scherm.
Selecteer Maken in de menubalk van Functions. Het deelvenster Functie maken wordt weergegeven.
Voer onder Selecteer een sjabloon in het vak Filter de Durable Functions-orchestrator in en selecteer die sjabloon in de lijst. Met deze sjabloon maakt u een duurzame functie die de uitvoering van functies indeelt.
Voer onder Sjabloondetails voor het veld Nieuwe functie OrchFunction in voor de naam van de functie en selecteer Vervolgens Maken. Het functievenster OrchFunction wordt weergegeven.
Selecteer code + test in het linkermenuvenster onder Ontwikkelaars. Het deelvenster Code en 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 Goedkeuring, die u binnenkort maakt. Door de code in de orchestrator-functie wordt de functie Goedkeuring twee keer aangeroepen. 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 zou uw indeling-functie een serie activiteit-functies aanroepen waarin de beslissing accepteren/weigeren wordt genomen en het resultaat van deze activiteiten wordt geretourneerd.
Selecteer Opslaan in de bovenste menubalk om de nieuwe functie op te slaan.
De activiteit-functie maken
Selecteer alles weergeven in het menu van Azure Portal of op de startpagina onder Recente resources en selecteer vervolgens uw functie-app. Het deelvenster Functie-app wordt weergegeven.
Selecteer op de pagina Overzicht het tabblad Functies in het midden van het scherm.
Selecteer Maken in de menubalk van Functions. Het deelvenster Functie maken wordt weergegeven.
Voer onder Selecteer een sjabloon in het vak Filter de activiteit Durable Functions 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 Sjabloondetails voor het veld Nieuwe functie goedkeuring in voor de naam van de functie en selecteer Vervolgens Maken. Het deelvenster Goedkeuring wordt weergegeven voor uw functie-app.
Selecteer code + test in het linkermenuvenster onder Ontwikkelaars. Het deelvenster Code en 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}!`; };
Deze functie retourneert een bericht waarin de status van het voorstel is aangegeven. De expressie
context.bindings.name
is ofAccepted
Rejected
, afhankelijk van de parameter die is doorgegeven aan de functie van de orchestrator. In een praktijkscenario voegt u de logica toe waarmee de bewerkingen accepteren of weigeren in deze functie worden verwerkt.Selecteer Opslaan in de bovenste menubalk om de nieuwe functie op te slaan.
Controleer of de Durable Functions-werkstroom wordt gestart
Selecteer alles weergeven in het menu van Azure Portal of op de startpagina onder Recente resources en selecteer vervolgens uw functie-app. Het deelvenster Functie-app wordt weergegeven.
Selecteer het tabblad Functies 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 de URL. Uw URL moet eruit zien zoals 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 de tijdelijke aanduiding {functionName} in de URL door OrchFunction, zodat uw functie er ongeveer als volgt uitziet:
https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Het antwoordbericht bevat een serie URI-eindpunten die u kunt gebruiken om de uitvoering te controleren en beheren. De uitvoering zou er moeten uitzien zoals 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 waarde van statusQueryGetUri en gebruik uw webbrowser om naar deze URL te gaan. U ziet een antwoordbericht dat er uitziet zoals in 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" }
Onthoud dat de indeling-functie de activiteit-functie tweemaal uitvoert. De eerste keer geeft de activiteitsfunctie aan dat het projectvoorstel wordt geaccepteerd. Bij de tweede keer wordt het voorstel geweigerd. De indelingsfunctie combineert de berichten van beide functieoproepen en retourneert deze naar de clientfunctie.