Anropa Azure Functions från arbetsflöden i Azure Logic Apps
Gäller för: Azure Logic Apps (Förbrukning + Standard)
Om du vill köra kod som utför ett visst jobb i logikappens arbetsflöde behöver du inte skapa en fullständig app eller infrastruktur. I stället kan du skapa och anropa en Azure-funktion. Azure Functions tillhandahåller serverlös databehandling i molnet och möjlighet att utföra följande uppgifter:
- Utöka arbetsflödets beteende genom att köra funktioner som skapats med hjälp av Node.js eller C#.
- Utför beräkningar i arbetsflödet.
- Använd avancerade formaterings- eller beräkningsfält i arbetsflödet.
Den här instruktionsguiden visar hur du anropar en befintlig Azure-funktion från ditt förbruknings- eller standardarbetsflöde. Information om hur du kör kod utan att använda Azure Functions finns i följande dokumentation:
Begränsningar
Endast förbrukningsarbetsflöden stöder autentisering av Azure-funktionsanrop med hjälp av en hanterad identitet med Microsoft Entra-autentisering. Standardarbetsflöden stöds för närvarande inte i avsnittet om hur du aktiverar autentisering för funktionsanrop.
Azure Logic Apps stöder inte användning av Azure Functions med distributionsfack aktiverade. Även om det här scenariot ibland kan fungera är det här beteendet oförutsägbart och kan leda till auktoriseringsproblem när arbetsflödet försöker anropa Azure-funktionen.
Förutsättningar
Azure-konto och prenumeration. Om du inte har någon prenumeration kan du registrera ett kostnadsfritt Azure-konto.
En Azure-funktionsappresurs som innehåller en eller flera Azure-funktioner.
Funktionsappens resurs och logikappresurs måste använda samma Azure-prenumeration.
Funktionsappresursen måste använda antingen .NET eller Node.js som körningsstack.
När du lägger till en ny funktion i funktionsappen kan du välja C # eller JavaScript.
Den Azure-funktion som du vill anropa. Du kan skapa den här funktionen med hjälp av följande verktyg:
Funktionen måste använda HTTP-utlösarmallen .
HTTP-utlösarmallen kan acceptera innehåll som har
application/json
typen från logikappens arbetsflöde. När du lägger till en funktion i arbetsflödet visar designern anpassade funktioner som skapas från den här mallen i din Azure-prenumeration.Funktionskoden måste innehålla det svar och den nyttolast som du vill ska returneras till arbetsflödet när funktionen har slutförts. Objektet
context
refererar till meddelandet som arbetsflödet skickar via Azure Functions-åtgärdsparametern med namnet Request Body (Begärandetext ) senare i den här guiden.Den här guiden använder följande exempelfunktion, som heter FabrikamAzureFunction:
module.exports = function (context, data) { var input = data; // Function processing logic // Function response for later use context.res = { body: { content:"Thank you for your feedback: " + input } }; context.done(); }
Använd följande syntax för att komma åt
context
objektets egenskaper inifrån funktionen:context.body.<property-name>
Om du till exempel vill referera
content
till egenskapen icontext
objektet använder du följande syntax:context.body.content
Den här koden innehåller också en
input
variabel som lagrar värdet från parameterndata
så att funktionen kan utföra åtgärder på det värdet. I JavaScript-funktioner är variabelndata
också en genväg förcontext.body
.Kommentar
Egenskapen
body
här gäller förcontext
objektet och är inte samma som brödtexttoken i en åtgärds utdata, som du också kan skicka till din funktion.Funktionen kan inte använda anpassade vägar om du inte har definierat en OpenAPI-definition.
När du har en OpenAPI-definition för din funktion ger arbetsflödesdesignern dig en bättre upplevelse när du arbetar med funktionsparametrar. Innan arbetsflödet kan hitta och komma åt funktioner som har OpenAPI-definitioner konfigurerar du funktionsappen genom att följa dessa steg.
Ett arbetsflöde för förbruknings- eller standardlogikappen som börjar med en utlösare.
Exemplen i den här guiden använder Office 365 Outlook-utlösaren med namnet När ett nytt e-postmeddelande kommer.
Om du vill skapa och anropa en Azure-funktion som anropar ett annat arbetsflöde kontrollerar du att det sekundära arbetsflödet börjar med en utlösare som tillhandahåller en anropsbar slutpunkt.
Du kan till exempel starta arbetsflödet med den allmänna HTTP- eller begärandeutlösaren eller använda en tjänstbaserad utlösare, till exempel Azure Queues eller Event Grid. I funktionen skickar du en HTTP POST-begäran till utlösarens URL och tar med nyttolasten som du vill att det sekundära arbetsflödet ska bearbeta. Mer information finns i Anropa, utlösa eller kapsla logikapparbetsflöden.
Tips för att arbeta med Azure-funktioner
Hitta funktioner med OpenAPI-definitioner
Följ dessa steg för att konfigurera funktionsappen så att arbetsflödet kan hitta och använda funktioner som har OpenAPI-definitioner:
Öppna funktionsappen i Azure Portal. Kontrollera att funktionsappen körs aktivt.
Konfigurera Cors (Cross-Origin Resource Sharing) i funktionsappen så att alla ursprung tillåts genom att följa dessa steg:
Få åtkomst till egenskapsvärden i HTTP-begäranden
Webhook-baserade funktioner kan acceptera HTTP-begäranden som indata och skicka dessa begäranden till andra funktioner. Även om Azure Logic Apps till exempel har funktioner som konverterar DateTime-värden, visar den här grundläggande JavaScript-exempelfunktionen hur du kan komma åt en egenskap i ett HTTP-begärandeobjekt som skickas till funktionen och utföra åtgärder på det egenskapsvärdet. För att komma åt egenskaper inuti objekt använder det här exemplet punktoperatorn (.):
function convertToDateString(request, response){
var data = request.body;
response = {
body: data.date.ToDateString();
}
}
Det här händer i den här funktionen:
Funktionen skapar en
data
variabel och tilldelarbody
sedan objektet, som finns inutirequest
objektet, till variabeln. Funktionen använder punktoperatorn (.) för att refererabody
till objektet inutirequest
objektet:var data = request.body;
Funktionen kan nu komma åt
date
egenskapen via variabelndata
och konvertera egenskapsvärdet från DateTime-typ till DateString-typ genom att anropaToDateString()
funktionen. Funktionen returnerar också resultatet viabody
egenskapen i funktionens svar:body: data.date.ToDateString();
När du har skapat din funktion i Azure följer du stegen för att lägga till en Azure-funktion i arbetsflödet.
Skicka URI-parametrar till en funktion
Om du måste skicka en URI-parameter till din funktion kan du använda frågeparametrar i funktionens slutpunkts-URL.
När arbetsflödesdesignern är öppen för logikappen och funktionsinformationsfönstret är öppet går du till listan Avancerade parametrar och väljer Frågor.
En tabell visas där du kan ange parameterindata som nyckel/värde-par.
Ange nyckel/värde-paret för parametern, till exempel:
Lägga till en funktion i arbetsflödet (Förbrukning + Standardarbetsflöden)
Om du vill anropa en Azure-funktion från arbetsflödet kan du lägga till funktioner som andra åtgärder i designern.
I Azure Portal öppnar du arbetsflödet för förbrukningslogikappen i designern.
I designern följer du de här allmänna stegen för att lägga till Azure Functions-åtgärden Med namnet Välj en Azure-funktion.
Följ dessa steg i fönstret Lägg till en åtgärd :
Välj funktionsappen i listan funktionsappar, välj funktionen och välj sedan Lägg till åtgärd, till exempel:
Följ dessa steg när funktionens informationsruta visas:
För Begärandetext anger du funktionens indata, som måste använda formatet för ett JSON-objekt (JavaScript Object Notation), till exempel:
{"context": <selected-input> }
Den här indatan är nyttolasten för kontextobjektet eller meddelandet som arbetsflödet skickar till din funktion.
Om du vill välja token som representerar utdata från föregående steg väljer du i rutan Begärandetext och väljer sedan alternativet för att öppna listan med dynamiskt innehåll (blixtikonen).
Om du vill skapa ett uttryck väljer du i rutan Begärandetext och väljer sedan alternativet för att öppna uttrycksredigeraren (formelikonen).
I följande exempel anges ett JSON-objekt med
content
attributet och en token som representerar Utdata från e-postutlösaren som värdet Förfrågningstext :Här är kontextobjektet inte gjutet som en sträng, så objektets innehåll läggs till direkt i JSON-nyttolasten. Här är det fullständiga exemplet:
Om du anger ett annat kontextobjekt än en JSON-token som skickar en sträng, ett JSON-objekt eller en JSON-matris får du ett fel. Du kan dock omvandla kontextobjektet som en sträng genom att omsluta token inom citattecken (""), till exempel om du vill använda token för mottagen tid :
Om du vill ange annan information, till exempel vilken metod som ska användas, begärandehuvuden, frågeparametrar eller autentisering, öppnar du listan Avancerade parametrar och väljer de parametrar som du vill använda. För autentisering skiljer sig alternativen åt baserat på den valda funktionen. Mer information finns i Aktivera autentisering för funktioner.
Aktivera autentisering för Azure-funktionsanrop (endast förbrukningsarbetsflöden)
Ditt förbrukningsarbetsflöde kan använda en hanterad identitet för att autentisera ett Azure-funktionsanrop och få åtkomst till resurser som skyddas av Microsoft Entra-ID. Den hanterade identiteten kan autentisera åtkomst utan att du behöver logga in och ange autentiseringsuppgifter eller hemligheter. Azure hanterar den här identiteten åt dig och hjälper till att skydda dina autentiseringsuppgifter eftersom du inte måste ange eller rotera hemligheter. Du kan konfigurera den systemtilldelade identiteten eller en manuellt skapad, användartilldelad identitet på logikappens resursnivå. Den Azure-funktion som anropas från arbetsflödet kan använda samma hanterade identitet för autentisering.
Kommentar
Endast förbrukningsarbetsflöden stöder autentisering för ett Azure-funktionsanrop med hjälp av en hanterad identitet och Microsoft Entra-autentisering. Standardarbetsflöden innehåller för närvarande inte det här stödet när du använder åtgärden för att anropa en Azure-funktion.
Mer information finns i följande dokumentation:
Om du vill konfigurera din funktionsapp och funktion så att de kan använda din förbrukningslogikapps hanterade identitet följer du de här stegen på hög nivå:
Konfigurera din funktion för anonym autentisering (endast förbrukningsarbetsflöden)
För att funktionen ska kunna använda förbrukningslogikappens hanterade identitet måste du ange autentiseringsnivån för funktionen till anonymous
. Annars genererar arbetsflödet ett BadRequest-fel .
I Azure Portal letar du upp och väljer din funktionsapp.
Följande steg använder en exempelfunktionsapp med namnet FabrikamFunctionApp.
På funktionsappens resursmeny går du till Utvecklingsverktyg och väljer Avancerade verktyg>Gå.
När sidan Kudu Plus har öppnats går du till Kudu-webbplatsens namnlist och väljer CMD på menyn Felsökningskonsol.
När nästa sida visas väljer du webbplatsen>wwwroot>your-function i mapplistan.
Följande steg använder en exempelfunktion med namnet FabrikamAzureFunction.
Öppna filen function.json för redigering.
I bindningsobjektet kontrollerar du om egenskapen authLevel finns. Om egenskapen finns anger du egenskapsvärdet till
anonymous
. Annars lägger du till den egenskapen och anger värdet.Spara inställningarna när du är klar. Fortsätt till nästa avsnitt.
Hitta de värden som krävs för att konfigurera Microsoft Entra-autentisering (endast förbrukningsarbetsflöden)
Innan du kan konfigurera funktionsappen för att använda den hanterade identiteten och Microsoft Entra-autentiseringen måste du hitta och spara följande värden genom att följa stegen i det här avsnittet.
Hitta klientorganisations-ID:t för din Microsoft Entra-klientorganisation.
Hitta program-ID:t för enterprise-programmet som är associerat med din hanterade identitet.
Hitta klientorganisations-ID:t för din Microsoft Entra-klientorganisation
Kör antingen PowerShell-kommandot Get-AzureAccount eller i Azure Portal följer du dessa steg:
Öppna din Microsoft Entra-klientorganisation i Azure Portal.
I den här guiden används Fabrikam som exempelklient.
På klientmenyn väljer du Översikt.
Kopiera och spara ditt klient-ID för senare användning, till exempel:
Hitta objekt-ID:t för din hanterade identitet
När du har aktiverat den hanterade identiteten för din förbrukningslogikappresurs letar du reda på objektet för din hanterade identitet. Du använder det här ID:t för att hitta det associerade Enterprise-programmet i din Microsoft Entra-klientorganisation.
På logikappmenyn går du till Inställningar, väljer Identitet och väljer sedan antingen Systemtilldelad eller Användartilldelad.
Hitta program-ID:t för Azure Enterprise-programmet som är associerat med din hanterade identitet
När du aktiverar en hanterad identitet på logikappresursen skapar Azure automatiskt ett associerat Azure Enterprise-program med samma namn. Nu måste du hitta det associerade Enterprise-programmet och kopiera dess program-ID. Senare använder du det här program-ID:t för att lägga till en identitetsprovider för funktionsappen genom att skapa en appregistrering.
I Azure Portal letar du upp och öppnar din Microsoft Entra-klientorganisation.
På klientmenyn går du till Hantera och väljer Företagsprogram.
På sidan Alla program i sökrutan anger du objekt-ID:t för din hanterade identitet. Från resultaten hittar du det matchande företagsprogrammet och kopierar program-ID:t:
Använd nu det kopierade program-ID:t för att lägga till en identitetsprovider i funktionsappen.
Lägg till identitetsprovider för funktionsappen (endast förbrukningsarbetsflöden)
Nu när du har klient-ID:t och program-ID:t kan du konfigurera funktionsappen så att den använder Microsoft Entra-autentisering genom att lägga till en identitetsprovider och skapa en appregistrering.
Öppna funktionsappen i Azure Portal.
På funktionsappmenyn går du till Inställningar, väljer Autentisering och sedan Lägg till identitetsprovider.
I fönstret Lägg till en identitetsprovider går du till Grundläggande i listan Identitetsprovider och väljer Microsoft.
Under Appregistrering för Appregistreringstyp väljer du Ange information om en befintlig appregistrering och anger de värden som du sparade tidigare.
Property Obligatoriskt Värde beskrivning Program-ID (klient)-ID Ja <application-ID> Den unika identifierare som ska användas för den här appregistreringen. I det här exemplet använder du det program-ID som du kopierade för det Enterprise-program som är associerat med din hanterade identitet. Client secret Valfritt, men rekommenderas <klienthemlighet> Det hemliga värde som appen använder för att bevisa sin identitet när en token begärs. Klienthemligheten skapas och lagras i appens konfiguration som en plats-sticky-programinställning med namnet MICROSOFT_PROVIDER_AUTHENTICATION_SECRET.
- Se till att regelbundet rotera hemligheter och lagra dem på ett säkert sätt. Du kan till exempel hantera dina hemligheter i Azure Key Vault där du kan använda en hanterad identitet för att hämta nyckeln utan att exponera värdet för en obehörig användare. Du kan uppdatera den här inställningen för att använda Key Vault-referenser.
– Om du anger ett klienthemlighetsvärde använder inloggningsåtgärder hybridflödet och returnerar både åtkomst- och uppdateringstoken.
– Om du inte anger någon klienthemlighet använder inloggningsåtgärder det implicita beviljandeflödet OAuth 2.0. Den här metoden returnerar bara en ID-token eller åtkomsttoken direkt. Dessa token skickas av providern och lagras i EasyAuth-tokenarkivet.
Viktigt: På grund av säkerhetsrisker är det implicita beviljandeflödet inte längre en lämplig autentiseringsmetod. Använd i stället antingen auktoriseringskodflöde med PKCE(Proof Key for Code Exchange) eller auktoriseringskoder för ensidesprogram (SPA).Utfärdar-URL Nej <authentication-endpoint-URL>/<Microsoft-Entra-tenant-ID>/v2.0 Den här URL:en omdirigerar användare till rätt Microsoft Entra-klientorganisation och laddar ned lämpliga metadata för att fastställa lämpliga tokensigneringsnycklar och anspråksvärde för token utfärdare. För appar som använder Azure AD v1 utelämnar du /v2.0 från URL:en.
I det här scenariot använder du följande URL:https://sts.windows.net/
<Microsoft-Entra-tenant-ID>Tillåtna token-målgrupper Nej <application-ID-URI> Program-ID URI (resurs-ID) för funktionsappen. För ett moln eller en serverapp där du vill tillåta autentiseringstoken från en webbapp lägger du till program-ID-URI:n för webbappen. Det konfigurerade klient-ID:t betraktas alltid implicit som en tillåten målgrupp.
För det här scenariot ärhttps://management.azure.com
värdet . Senare kan du använda samma URI i egenskapen Målgrupp när du konfigurerar funktionsåtgärden i arbetsflödet för att använda den hanterade identiteten.
Viktigt: Program-ID-URI (resurs-ID) måste exakt matcha det värde som Microsoft Entra-ID förväntar sig, inklusive eventuella efterföljande snedstreck.I det här läget ser din version ut ungefär som i det här exemplet:
Om du konfigurerar funktionsappen med en identitetsprovider för första gången visas även avsnittet Inställningar för App Service-autentisering . De här alternativen avgör hur funktionsappen svarar på oautentiserade begäranden. Standardvalet omdirigerar alla begäranden för att logga in med den nya identitetsprovidern. Du kan anpassa det här beteendet nu eller justera de här inställningarna senare från huvudsidan för autentisering genom att välja Redigera bredvid Autentiseringsinställningar. Mer information om de här alternativen finns i Autentiseringsflöde – Autentisering och auktorisering i Azure App Service och Azure Functions.
Annars kan du fortsätta med nästa steg.
Välj Lägg till för att slutföra skapandet av appregistreringen.
När du är klar visar sidan Autentisering nu identitetsprovidern och appregistreringens program-ID (klient). Din funktionsapp kan nu använda den här appregistreringen för autentisering.
Kopiera appregistreringens app-ID (klient)-ID som ska användas senare i Azure Functions-åtgärdens målgruppsegenskap för ditt arbetsflöde.
Gå tillbaka till designern och följ stegen för att autentisera åtkomst med den hanterade identiteten med hjälp av den inbyggda Azure Functions-åtgärden.