Utvecklarguide för Azure Functions
I Azure Functions delar specifika funktioner några grundläggande tekniska begrepp och komponenter, oavsett vilket språk eller vilken bindning du använder. Innan du går vidare till inlärningsinformation som är specifik för ett visst språk eller en bindning bör du läsa igenom den här översikten som gäller för alla.
Den här artikeln förutsätter att du redan har läst Azure Functions översikt.
Funktionskod
En funktion är det primära begreppet i Azure Functions. En funktion innehåller två viktiga delar – din kod, som kan skrivas på en mängd olika språk, och en del konfiguration, filen function.json. För kompilerade språk genereras den här konfigurationsfilen automatiskt från anteckningar i koden. För skriptspråk måste du ange konfigurationsfilen själv.
Filen function.json definierar funktionens utlösare, bindningar och andra konfigurationsinställningar. Varje funktion har endast en utlösare. Körningen använder den här konfigurationsfilen för att fastställa vilka händelser som ska övervakas och hur data ska skickas till och returneras från en funktionskörning. Följande är ett exempel på en function.json-fil.
{
"disabled":false,
"bindings":[
// ... bindings here
{
"type": "bindingType",
"direction": "in",
"name": "myParamName",
// ... more depending on binding
}
]
}
Mer information finns i Azure Functions utlösare och bindningar.
Egenskapen bindings
är där du konfigurerar både utlösare och bindningar. Varje bindning delar några vanliga inställningar och vissa inställningar som är specifika för en viss typ av bindning. Varje bindning kräver följande inställningar:
Egenskap | Värden | Typ | Kommentarer |
---|---|---|---|
typ | Namnet på bindningen. Till exempel queueTrigger . |
sträng | |
riktning | in , out |
sträng | Anger om bindningen är till för att ta emot data till funktionen eller skicka data från funktionen. |
name | Funktionsidentifierare. Till exempel myQueue . |
sträng | Det namn som används för bundna data i funktionen. För C# är detta ett argumentnamn. För JavaScript är det nyckeln i en nyckel/värde-lista. |
Funktionsapp
En funktionsapp tillhandahåller en körningskontext i Azure där dina funktioner körs. Därför är det distributions- och hanteringsenheten för dina funktioner. En funktionsapp består av en eller flera enskilda funktioner som hanteras, distribueras och skalas tillsammans. Alla funktioner i en funktionsapp delar samma prisplan, distributionsmetod och körningsversion. Tänk på en funktionsapp som ett sätt att organisera och gemensamt hantera dina funktioner. Mer information finns i Hantera en funktionsapp.
Anteckning
Alla funktioner i en funktionsapp måste skrivas på samma språk. Detta krävdes inte i tidigare versioner av Azure Functions-körningen.
Mappstrukturen
Koden för alla funktioner i en specifik funktionsapp finns i en rotprojektmapp som innehåller en värdkonfigurationsfil. Filen host.json innehåller körningsspecifika konfigurationer och finns i funktionsappens rotmapp. En bin-mapp innehåller paket och andra biblioteksfiler som krävs av funktionsappen. Specifika mappstrukturer som krävs av funktionsappen beror på språk:
I version 2.x och senare av Functions-körningen måste alla funktioner i funktionsappen dela samma språkstack.
Ovanstående är standardmappstrukturen (och rekommenderas) för en funktionsapp. Om du vill ändra filplatsen för en funktions kod ändrar du avsnittet i scriptFile
filen function.json . Vi rekommenderar också att du använder paketdistribution för att distribuera projektet till funktionsappen i Azure. Du kan också använda befintliga verktyg som kontinuerlig integrering och distribution och Azure DevOps.
Anteckning
Om du distribuerar ett paket manuellt ska du distribuera host.json-filen och funktionsmapparna wwwroot
direkt till mappen. Ta inte med wwwroot
mappen i dina distributioner. Annars får wwwroot\wwwroot
du mappar.
Använda lokala verktyg och publicering
Funktionsappar kan skapas och publiceras med hjälp av en mängd olika verktyg, inklusive Visual Studio, Visual Studio Code, IntelliJ, Eclipse och Azure Functions Core Tools. Mer information finns i Koda och testa Azure Functions lokalt.
Redigera funktioner i Azure Portal
Med Functions-redigeraren som är inbyggd i Azure Portal kan du uppdatera koden och filen function.json direkt. Detta rekommenderas endast för små ändringar eller konceptbevis – bästa praxis är att använda ett lokalt utvecklingsverktyg som VS Code.
Parallell körning
När flera utlösande händelser inträffar snabbare än en entrådig funktionskörning kan bearbeta dem, kan körningen anropa funktionen flera gånger parallellt. Om en funktionsapp använder värdplanen Förbrukning kan funktionsappen skalas ut automatiskt. Varje instans av funktionsappen, oavsett om appen körs på förbrukningsvärdplanen eller en vanlig App Service värdplan, kan bearbeta samtidiga funktionsanrop parallellt med flera trådar. Det maximala antalet samtidiga funktionsanrop i varje funktionsappinstans varierar beroende på vilken typ av utlösare som används samt de resurser som används av andra funktioner i funktionsappen.
Versionshantering för Functions-körning
Du kan konfigurera versionen av Functions-körningen med hjälp av appinställningen FUNCTIONS_EXTENSION_VERSION
. Till exempel anger värdet "~3" att din funktionsapp använder 3.x som huvudversion. Funktionsappar uppgraderas till varje ny delversion när de släpps. Mer information, inklusive hur du visar den exakta versionen av funktionsappen, finns i Så här riktar du dig mot Azure Functions körningsversioner.
Centrallager
Koden för Azure Functions är öppen källkod och lagras på GitHub-lagringsplatser:
- Azure Functions
- Azure Functions värd
- Azure Functions portalen
- Azure Functions mallar
- Azure WebJobs SDK
- Azure WebJobs SDK-tillägg
Bindningar
Här är en tabell med alla bindningar som stöds.
Den här tabellen visar de bindningar som stöds i huvudversionerna av Azure Functions-körningen:
Typ | 1.x | 2.x och högre1 | Utlösare | Indata | Resultat |
---|---|---|---|---|---|
Blob Storage | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure SQL (förhandsversion)2 | ✔ | ✔ | ✔ | ✔ | |
Dapr3 | ✔ | ✔ | ✔ | ✔ | |
Event Grid | ✔ | ✔ | ✔ | ✔ | |
Event Hubs | ✔ | ✔ | ✔ | ✔ | |
HTTP-webhooks & | ✔ | ✔ | ✔ | ✔ | |
IoT Hub | ✔ | ✔ | ✔ | ||
Kafka2 | ✔ | ✔ | ✔ | ||
Mobile Apps | ✔ | ✔ | ✔ | ||
Notification Hubs | ✔ | ✔ | |||
Queue Storage | ✔ | ✔ | ✔ | ✔ | |
RabbitMQ2 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
Service Bus | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
Table Storage | ✔ | ✔ | ✔ | ✔ | |
Timer | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
1 Från och med version 2.x måste alla bindningar utom HTTP och Timer registreras. Se Registrera bindningstillägg.
2 Utlösare stöds inte i förbrukningsplanen. Kräver körningsdrivna utlösare.
3 Stöds endast i Kubernetes, IoT Edge och andra lägen med egen värd.
Har du problem med fel som kommer från bindningarna? Läs dokumentationen om Azure Functions-bindningsfelkoder.
Anslutningar
Funktionsprojektet refererar till anslutningsinformation efter namn från konfigurationsprovidern. Den accepterar inte anslutningsinformationen direkt, vilket gör att de kan ändras i olika miljöer. En utlösardefinition kan till exempel innehålla en connection
egenskap. Detta kan referera till en anslutningssträng, men du kan inte ange anslutningssträngen direkt i en function.json
. I stället skulle du ange connection
namnet på en miljövariabel som innehåller anslutningssträngen.
Standardkonfigurationsprovidern använder miljövariabler. Dessa kan anges av Programinställningar när de körs i Azure Functions-tjänsten, eller från filen med lokala inställningar när du utvecklar lokalt.
Anslutningsvärden
När anslutningsnamnet matchas till ett enda exakt värde identifierar körningen värdet som en anslutningssträng, vilket vanligtvis innehåller en hemlighet. Information om en anslutningssträng definieras av den tjänst som du vill ansluta till.
Ett anslutningsnamn kan dock även referera till en samling med flera konfigurationsobjekt, vilket är användbart för att konfigurera identitetsbaserade anslutningar. Miljövariabler kan behandlas som en samling med hjälp av ett delat prefix som slutar med dubbla understreck __
. Gruppen kan sedan refereras genom att ange anslutningsnamnet till det här prefixet.
Egenskapen för en Azure Blob-utlösardefinition kan till exempel connection
vara "Storage1". Så länge det inte finns något enskilt strängvärde som konfigurerats av en miljövariabel med namnet "Storage1" kan en miljövariabel med namnet Storage1__blobServiceUri
användas för att informera blobServiceUri
anslutningens egenskap. Anslutningsegenskaperna är olika för varje tjänst. Se dokumentationen för den komponent som använder anslutningen.
Anteckning
När du använder Azure App Configuration eller Key Vault för att ange inställningar för hanterade identitetsanslutningar bör inställningsnamn använda en giltig nyckelavgränsare som :
eller /
i stället __
för att säkerställa att namnen matchas korrekt.
Till exempel Storage1:blobServiceUri
.
Konfigurera en identitetsbaserad anslutning
Vissa anslutningar i Azure Functions kan konfigureras för att använda en identitet i stället för en hemlighet. Supporten beror på vilket tillägg som använder anslutningen. I vissa fall kan en anslutningssträng fortfarande krävas i Functions även om tjänsten som du ansluter till stöder identitetsbaserade anslutningar. En självstudiekurs om hur du konfigurerar dina funktionsappar med hanterade identiteter finns i självstudien Skapa en funktionsapp med identitetsbaserade anslutningar.
Identitetsbaserade anslutningar stöds av följande komponenter:
När identitetsbaserade anslutningar finns i Azure Functions-tjänsten använder de en hanterad identitet. Den systemtilldelade identiteten credential
används som standard, även om en användartilldelad identitet kan anges med egenskaperna och clientID
. Observera att det inte går att konfigurera en användartilldelad identitet med ett resurs-ID. När den körs i andra sammanhang, till exempel lokal utveckling, används utvecklaridentiteten i stället, även om detta kan anpassas. Se Lokal utveckling med identitetsbaserade anslutningar.
Bevilja behörighet till identiteten
Den identitet som används måste ha behörighet att utföra de avsedda åtgärderna. För de flesta Azure-tjänster innebär det att du måste tilldela en roll i Azure RBAC med hjälp av antingen inbyggda eller anpassade roller som ger dessa behörigheter.
Viktigt
Vissa behörigheter kan exponeras av måltjänsten som inte är nödvändiga för alla kontexter. Om möjligt följer du principen om lägsta behörighet och beviljar identiteten endast nödvändiga privilegier. Om appen till exempel bara behöver kunna läsa från en datakälla använder du en roll som bara har behörighet att läsa. Det vore olämpligt att tilldela en roll som också tillåter skrivning till den tjänsten, eftersom det skulle vara överdriven behörighet för en läsåtgärd. På samma sätt vill du se till att rolltilldelningen endast är begränsad till de resurser som behöver läsas.
Välj en flik nedan om du vill veta mer om behörigheter för varje komponent:
- Azure Blobs-tillägg
- Azure Queues-tillägg
- Azure Tables-tillägg
- Event Hubs-tillägg
- Service Bus-tillägg
- Azure Cosmos DB-tillägg
- Azure SignalR-tillägg
- Durable Functions lagringsprovider
- Functions-värdlagring (förhandsversion)
Du måste skapa en rolltilldelning som ger åtkomst till din blobcontainer vid körning. Hanteringsroller som Ägare räcker inte. I följande tabell visas inbyggda roller som rekommenderas när du använder Blob Storage-tillägget i normal drift. Ditt program kan kräva ytterligare behörigheter baserat på den kod du skriver.
Bindningstyp | Exempel på inbyggda roller |
---|---|
Utlösare | Storage Blob Data-ägareochStorage Queue Data Contributor1 Ytterligare behörigheter måste också beviljas till AzureWebJobsStorage-anslutningen. 2 |
Indatabindning | Storage Blob Data-läsare |
Utdatabindning | Storage Blob Data-ägare |
1 Blob-utlösaren hanterar fel i flera återförsök genom att skriva giftblobar till en kö på det lagringskonto som anges av anslutningen.
2 AzureWebJobsStorage-anslutningen används internt för blobar och köer som aktiverar utlösaren. Om den är konfigurerad för att använda en identitetsbaserad anslutning behöver den ytterligare behörigheter utöver standardkravet. Dessa omfattas av rollerna Storage Blob Data-ägare, Storage Queue Data-deltagare och Lagringskontodeltagare . Mer information finns i Ansluta till värdlagring med en identitet.
Vanliga egenskaper för identitetsbaserade anslutningar
En identitetsbaserad anslutning för en Azure-tjänst accepterar följande vanliga egenskaper, där <CONNECTION_NAME_PREFIX>
är värdet för din connection
egenskap i utlösar- eller bindningsdefinitionen:
Egenskap | Mall för miljövariabler | Description |
---|---|---|
Tokenautentiseringsuppgift | <CONNECTION_NAME_PREFIX>__credential |
Definierar hur en token ska hämtas för anslutningen. Rekommenderas endast när du anger en användartilldelad identitet, när den ska anges till "hanterad identitet". Detta är endast giltigt när det finns i Azure Functions-tjänsten. |
Klient-ID | <CONNECTION_NAME_PREFIX>__clientId |
När credential är inställt på "managedidentity" anger den här egenskapen den användartilldelade identitet som ska användas när du hämtar en token. Egenskapen accepterar ett klient-ID som motsvarar en användartilldelad identitet som tilldelats programmet. Om inget anges används den systemtilldelade identiteten. Den här egenskapen används på olika sätt i scenarier för lokal utveckling, när credential bör inte anges. |
Ytterligare alternativ kan stödjas för en viss anslutningstyp. Se dokumentationen för komponenten som upprättar anslutningen.
Lokal utveckling med identitetsbaserade anslutningar
Anteckning
Lokal utveckling med identitetsbaserade anslutningar kräver uppdaterade versioner av Azure Functions Core Tools. Du kan kontrollera den installerade versionen genom att köra func -v
. För Functions v3 använder du version 3.0.3904
eller senare. För Functions v4 använder du version 4.0.3904
eller senare.
När du kör lokalt instruerar ovanstående konfiguration körningen att använda din lokala utvecklaridentitet. Anslutningen försöker hämta en token från följande platser i ordning:
- En lokal cache som delas mellan Microsoft-program
- Den aktuella användarkontexten i Visual Studio
- Den aktuella användarkontexten i Visual Studio Code
- Den aktuella användarkontexten i Azure CLI
Om inget av dessa alternativ lyckas uppstår ett fel.
Din identitet kanske redan har vissa rolltilldelningar mot Azure-resurser som används för utveckling, men dessa roller kanske inte ger nödvändig dataåtkomst. Hanteringsroller som Ägare räcker inte. Dubbelkolla vilka behörigheter som krävs för anslutningar för varje komponent och se till att du har tilldelat dem till dig själv.
I vissa fall kanske du vill ange användning av en annan identitet. Du kan lägga till konfigurationsegenskaper för anslutningen som pekar på den alternativa identiteten baserat på ett klient-ID och en klienthemlighet för ett Azure Active Directory-tjänsthuvudnamn. Det här konfigurationsalternativet stöds inte när det finns i Azure Functions-tjänsten. Om du vill använda ett ID och en hemlighet på den lokala datorn definierar du anslutningen med följande ytterligare egenskaper:
Egenskap | Mall för miljövariabler | Description |
---|---|---|
Klientorganisations-ID | <CONNECTION_NAME_PREFIX>__tenantId |
ID:t för Azure Active Directory-klientorganisationen (katalog). |
Klient-ID | <CONNECTION_NAME_PREFIX>__clientId |
Klient-ID för en appregistrering i klientorganisationen. |
Klienthemlighet | <CONNECTION_NAME_PREFIX>__clientSecret |
En klienthemlighet som genererades för appregistreringen. |
Här är ett exempel på local.settings.json
egenskaper som krävs för identitetsbaserad anslutning till Azure Blobs:
{
"IsEncrypted": false,
"Values": {
"<CONNECTION_NAME_PREFIX>__blobServiceUri": "<blobServiceUri>",
"<CONNECTION_NAME_PREFIX>__queueServiceUri": "<queueServiceUri>",
"<CONNECTION_NAME_PREFIX>__tenantId": "<tenantId>",
"<CONNECTION_NAME_PREFIX>__clientId": "<clientId>",
"<CONNECTION_NAME_PREFIX>__clientSecret": "<clientSecret>"
}
}
Ansluta till värdlagring med en identitet (förhandsversion)
Den Azure Functions värden använder "AzureWebJobsStorage"-anslutningen för kärnbeteenden, till exempel samordning av singleton-körning av timerutlösare och standardlagring av appnycklar. Detta kan även konfigureras för att utnyttja en identitet.
Varning
Andra komponenter i Functions förlitar sig på "AzureWebJobsStorage" för standardbeteenden. Du bör inte flytta den till en identitetsbaserad anslutning om du använder äldre versioner av tillägg som inte stöder den här typen av anslutning, inklusive utlösare och bindningar för Azure Blobs, Event Hubs och Durable Functions. På samma sätt används för distributionsartefakter när du använder version på serversidan i Linux-förbrukning, och om du aktiverar detta måste du distribuera via ett externt AzureWebJobsStorage
distributionspaket.
Dessutom återanvänder vissa appar "AzureWebJobsStorage" för andra lagringsanslutningar i sina utlösare, bindningar och/eller funktionskod. Kontrollera att alla användningsområden för "AzureWebJobsStorage" kan använda det identitetsbaserade anslutningsformatet innan du ändrar anslutningen från en anslutningssträng.
Om du vill använda en identitetsbaserad anslutning för "AzureWebJobsStorage" konfigurerar du följande appinställningar:
Inställningen | Beskrivning | Exempelvärde |
---|---|---|
AzureWebJobsStorage__blobServiceUri |
URI:n för dataplanet för lagringskontots blobtjänst med hjälp av HTTPS-schemat. | <https:// storage_account_name.blob.core.windows.net> |
AzureWebJobsStorage__queueServiceUri |
Dataplanets URI för kötjänsten för lagringskontot med hjälp av HTTPS-schemat. | <https:// storage_account_name.queue.core.windows.net> |
AzureWebJobsStorage__tableServiceUri |
Dataplanets URI för en tabelltjänst för lagringskontot med hjälp av HTTPS-schemat. | <https:// storage_account_name.table.core.windows.net> |
Vanliga egenskaper för identitetsbaserade anslutningar kan också anges.
Om du konfigurerar "AzureWebJobsStorage" med ett lagringskonto som använder standard-DNS-suffixet och tjänstnamnet för globala Azure kan du i https://<accountName>.blob/queue/file/table.core.windows.net
stället ange AzureWebJobsStorage__accountName
namnet på ditt lagringskonto enligt formatet. Slutpunkterna för varje lagringstjänst härleds för det här kontot. Detta fungerar inte om lagringskontot finns i ett nationellt moln eller har en anpassad DNS.
Inställningen | Beskrivning | Exempelvärde |
---|---|---|
AzureWebJobsStorage__accountName |
Kontonamnet för ett lagringskonto, endast giltigt om kontot inte finns i ett nationellt moln och inte har en anpassad DNS. Den här syntaxen är unik för "AzureWebJobsStorage" och kan inte användas för andra identitetsbaserade anslutningar. | <storage_account_name> |
Du måste skapa en rolltilldelning som ger åtkomst till lagringskontot för "AzureWebJobsStorage" vid körning. Hanteringsroller som Ägare räcker inte. Rollen Storage Blob Data-ägare omfattar de grundläggande behoven för Functions-värdlagring – körningen behöver både läs- och skrivåtkomst till blobar och möjligheten att skapa containrar. Flera tillägg använder den här anslutningen som standardplats för blobar, köer och tabeller, och dessa användningsområden kan lägga till krav som anges i tabellen nedan. for Du kan behöva ytterligare behörigheter om du använder "AzureWebJobsStorage" för andra ändamål.
Anknytning | Roller som krävs | Förklaring |
---|---|---|
Inget tillägg (endast värd) | Storage Blob Data-ägare | Används för allmän samordning, standardnyckelarkiv |
Azure Blobs (endast utlösare) | Alla från: Lagringskontodeltagare, Storage Blob Data-ägare, Lagringsködatadeltagare |
Blobutlösaren använder azure-köer internt och skriver blobkvitton. Den använder AzureWebJobsStorage för dessa, oavsett vilken anslutning som konfigurerats för utlösaren. |
Azure Event Hubs (endast utlösare) | (ingen ändring från standardkrav) Storage Blob Data-ägare |
Kontrollpunkter sparas i blobar med hjälp av AzureWebJobsStorage-anslutningen. |
Timerutlösare | (ingen ändring från standardkrav) Storage Blob Data-ägare |
För att säkerställa en körning per händelse tas lås med blobar med hjälp av AzureWebJobsStorage-anslutningen. |
Bestående funktioner | Alla från: Storage Blob Data-deltagare, Storage Queue Data Contributor, Storage Table Data-deltagare |
Durable Functions använder blobar, köer och tabeller för att samordna aktivitetsfunktioner och upprätthålla orkestreringstillstånd. Den använder AzureWebJobsStorage-anslutningen för alla dessa som standard, men du kan ange en annan anslutning i Durable Functions-tilläggskonfigurationen. |
Rapporteringsproblem
Objekt | Beskrivning | Länk |
---|---|---|
Körning | Script Host, Triggers & Bindings, Language Support | Skapa ett problem |
Mallar | Kodproblem med att skapa mall | Skapa ett problem |
Portalen | Problem med användargränssnitt eller upplevelse | Skapa ett problem |
Nästa steg
Mer information finns i följande resurser: