Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Denna artikel är den primära referensen för hur Azure Functions kopplas till fjärrtjänster. Den ger specifik vägledning baserat på anslutningstyp och autentiseringsmetod.
Important
Använd hanterade identiteter med Microsoft Entra ID när det är möjligt. Denna autentiseringsmetod eliminerar hemligheter och ger högsta säkerhet.
Anslutningskategorier
Azure Functions-anslutningar faller inom dessa grundläggande kategorier:
- Krävs för värden: Anslutningar som Functions-värden behöver för att fungera, till exempel lagring och övervakning.
- Bindningar: Kopplingar som värdprocessen hanterar åt dina utlösare och bindningar.
- Client SDK: Anslutningar du skapar och hanterar i din egen funktionskod.
Tips
Functions stöder också hanterade connectors (i förhandsvisning), vilket låter dig ansluta till tjänster som Office 365, Teams och SharePoint med inbyggd OAuth och webhook-hantering via ett Connector Namespace. För mer information, se Använd anslutningsprogram i Azure Functions.
Functions-värden kräver att din app har dessa specifika namngivna anslutningar, som stödjer både funktionsexekveringar och loggning:
AzureWebJobsStorage: Functions använder det här standardlagringskontot för att möjliggöra grundläggande funktioner, såsom att samordna singleton-körning av timerutlösare och som standardlagring för funktionsåtkomstnycklar. Värden kräver att den här anslutningen är till ett lagringskonto som stöds. Din funktionsapp kan inte starta utan denna anslutningsinställning. Mer information finns i Lagringsöverväganden för Azure Functions.APPLICATIONINSIGHTS_CONNECTION_STRING: Du bör också konfigurera värdprogrammet så att det skriver loggar till en Application Insights-instans.WEBSITE_AZUREFILESCONNECTIONSTRING: Används endast av appar som körs i en konsumtionsplan eller Elastic Premium-plan. Definierar lagringskontot som innehåller Azure Files-delningen som underhåller distributionspaketet för din app.
Autentiseringsmetoder
Important
Använd när det är möjligt med hanterade identiteter för dina anslutningar. Denna metod eliminerar helt hemligheter. När måltjänsten inte stödjer Microsoft Entra ID-autentisering, använd Azure Key Vault för att centralt hantera hemligheter. Använd endast delade hemligheter direkt i appinställningarna som sista utväg.
Functions stöder dessa autentiseringsmetoder vid anslutning till fjärrtjänster:
| Autentiseringsmetod | Security | När det bör användas |
|---|---|---|
| styrda identiteter | Högsta | Target-tjänsten stöder Microsoft Entra ID. Inga hemligheter att hantera. |
| Azure Key Vault | Högt | Tjänsten stödjer inte hanterade identiteter, eller så behöver du centraliserad hemlighetshantering med rotation. |
| Delad hemlighet | Låg | Äldre standardval Migrera till managed identities eller Key Vault så snart som möjligt. |
Välj din föredragna autentiseringsmetod högst upp i artikeln för att se detaljerad konfigurationsguide.
Definiera kopplingar
Vid körning får din funktionsapp tillgång till anslutningsinformation som miljövariabler från dessa platser:
| Miljö | Var inställningar lagras |
|---|---|
| Azure | Applikationsinställningar (krypterade i vila) |
| Lokal utveckling | local.settings.json (valfritt krypterat) |
I båda miljöerna exponeras inställningarna för din kod som miljövariabler. De specifika inställningarna du behöver beror både på anslutningstypen och vilken autentiseringsmetod du väljer.
När du använder Microsoft Entra-autentisering för att ansluta till en Azure-tjänst beror de specifika appinställningarna du använder på den anslutna tjänsten och om du använder en systemtilldelad eller användartilldelad identitet för att autentisera anslutningen.
De identiteter du använder för dina anslutningar måste ha behörigheter för att utföra de avsedda åtgärderna. För de flesta Azure-tjänster innebär detta krav att du måste tilldela en roll i Azure RBAC, med antingen inbyggda eller anpassade roller som ger dessa behörigheter. Mer information finns i Bevilja behörigheter till en identitet.
Ha dessa överväganden i åtanke när du använder identitetsbaserade kopplingar:
I en Functions-hostad app använder identitetsbaserade anslutningar en hanterad identitet. Den systemtilldelade identiteten, som är specifik för din app, används som standard. Användar-tilldelade identiteter, som också kräver
*__credentialoch*__clientIDegenskaper, är dock mer flexibla och rekommenderade.När din app körs i andra sammanhang, som lokal utveckling, används istället din utvecklaridentitet. För mer information, se artikeln om lokal utveckling .
Identitetsbaserade anslutningar stöds endast på version 4.x och senare av Functions-runtime. Om du kör en äldre C#-app på version 1.x av Functions-runtimen måste du först migrera till version 4.x.
Du kan konfigurera din funktionsapp att använda en identitet istället för en reťazec pripojenia när du ansluter till standardlagringskontot (AzureWebJobsStorage) och andra värd-krävda anslutningar.
Stöd för AzureWebJobsStorage hanterad identitet varierar beroende på värdplan:
| Webbhotellspaket | MI för värdlagring | krav för Azure Files | Recommendation |
|---|---|---|---|
| Flexförbrukning | Fullständigt stöd | Inga (inga Azure Files) | Rekommenderas för MI |
| Dedikerad (App Service) | Fullständigt stöd | Inga (ingen dynamisk skalning) | Full MI, ingen lösning behövs |
| Förbrukning | Blobs, köer, tabeller | Key Vault eller ta bort Azure Files | Förvara WEBSITE_AZUREFILESCONNECTIONSTRING i Key Vault |
| Elastisk premie | Blobs, köer, tabeller | Key Vault eller ta bort Azure Files | Förvara WEBSITE_AZUREFILESCONNECTIONSTRING i Key Vault |
Innan du använder hanterade identiteter för värd-krävda anslutningar, överväg dessa begränsningar:
För Consumption- och Premium-planer, implementera en av dessa lösningar för Azure Files:
- Spara endast
WEBSITE_AZUREFILESCONNECTIONSTRINGreťazec pripojenia i Key Vault, vilket är det näst säkraste alternativet. - Skapa en Consumption- eller Premium-app som körs utan Azure Files. Det finns prestandapåverkan när man kör utan Azure Files. Mer information finns i Skapa en app utan Azure Files.
- Spara endast
Dessa triggers är beroende av
AzureWebJobsStorageför att fungera korrekt:- Azure Blob Storage-lagringstjänst
- Azure Event Hubs
- Durable Functions (som standardinställning)
- Timer
Om din app använder någon av dessa tillägg, se till att dess version också stödjer hanterade identiteter.
AzureWebJobsStoragebevarar distributionsartefakter i serverbaserade fjärrbyggen i en Linux Consumption-plan. I detta scenario måste du distribuera och köra din app från ett externt distributionspaket.Andra komponenter i din funktionsapp kan återanvända anslutningen
AzureWebJobsStorage, vilket kan inkludera lagringsbindningstillägg eller lagringsklienter skapade med Azure SDKs. När du använder hanterade identiteter ska du skapa nya appinställningar för dessa komponenter som inte är värdkomponenter, även när de stöder hanterade identiteter.
Dessa specifika appinställningar definierar identitetsbaserade kopplingar till både AzureWebJobsStorage och APPLICATIONINSIGHTS_CONNECTION_STRING:
| Inställning | Description |
|---|---|
AzureWebJobsStorage__blobServiceUri |
URI:n för Blob Storage i standardlagringskontot. Krävs för suveräna moln eller en anpassad lagrings-DNS, såsom: https://mystorageaccount.blob.contoso.com.
HTTPS måste anges. |
AzureWebJobsStorage__queueServiceUri |
URI:n för kölagring i standardlagringskontot. Krävs för suveräna moln eller en anpassad lagrings-DNS, såsom: https://mystorageaccount.queue.contoso.com.
HTTPS måste anges. |
AzureWebJobsStorage__tableServiceUri |
URI:n för Table Storage i standardlagringskontot. Krävs för suveräna moln eller en anpassad lagrings-DNS, såsom: https://mystorageaccount.table.contoso.com.
HTTPS måste anges. |
AzureWebJobsStorage__credential |
Ställ in på managedidentity att använda hanterad identitetsautentisering. En hanterad identitet måste finnas tillgänglig i värdmiljön. |
AzureWebJobsStorage__clientId ellerAzureWebJobsStorage__managedIdentityResourceId |
Returnerar en specifik användartilldelad identitet som används för att erhålla en åtkomsttoken för hanterad identitetsautentisering. När ingen av dem är inställd används applikationens systemtilldelade identitet. |
APPLICATIONINSIGHTS_AUTHENTICATION_STRING |
Möjliggör anslutningar till Application Insights med Microsoft Entra-autentisering. Ställ in till antingen Authorization=AAD (systemtilldelad) eller ClientId=<YOUR_CLIENT_ID>;Authorization=AAD (användartilldelad). |
Eftersom värdet med dubbla understreck (__) vid körning tolkas som ett kolon (:), tolkas serien med inställningar som egenskaper för objektet AzureWebJobsStorage. Till exempel, betrakta dessa AzureWebJobsStorage anslutningsinställningar:
AzureWebJobsStorage__blobServiceUri=https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.netAzureWebJobsStorage__queueServiceUri=https://<STORAGE_ACCOUNT_NAME>.queue.core.windows.netAzureWebJobsStorage__tableServiceUri=https://<STORAGE_ACCOUNT_NAME>.table.core.windows.netAzureWebJobsStorage__credential=managedidentityAzureWebJobsStorage__clientId=<MY_USER_ASSIGNED_IDENTITY_ID>
Vid körning tolkar värden dessa inställningar som en komplex AzureWebJobsStorage-inställning.
"AzureWebJobsStorage":
{
"blobServiceUri": "https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net",
"queueServiceUri": "https://<STORAGE_ACCOUNT_NAME>.queue.core.windows.net",
"tableServiceUri": "https://<STORAGE_ACCOUNT_NAME>.table.core.windows.net",
"credential": "managedidentity",
"clientId": "<MY_USER_ASSIGNED_IDENTITY_ID>"
}
Du måste också ge behörigheter för identiteten i standardlagringskontot så att värden kan ansluta med tillräckliga behörigheter för att utföra de nödvändiga uppgifterna. För att lära dig hur, se Ge behörigheter till en identitet.
Ge behörigheter till en identitet
När du använder hanterade identiteter med Microsoft Entra ID-autentisering måste du specifikt tilldela behörigheter till den identitet din app använder när den ansluter till fjärrtjänsten. Det enklaste sättet att ge minst privilegierat behörigheter till din app är att tilldela inbyggda roller.
Ha dessa rekommendationer i åtanke när du ger RBAC-behörigheter till din apps identiteter:
- När det är möjligt, följ principen om minsta privilegium genom att ge identiteten endast de minsta nödvändiga privilegierna. Till exempel, om appen bara behöver läsa från en datakälla, använd en roll som bara har behörighet att läsa och inte att skriva data.
- Använd inte breda inbyggda roller som ägare, inte ens bara för att få appen att fungera.
- Efter att du skapat eller ändrat en rolltilldelning kan det ta upp till 10 minuter för ändringen att spridas. Under denna tid kan din funktion få auktoriseringsfel (403) även om rollen är korrekt tilldelad. Om du stöter på fel direkt efter att du skapat en rolltilldelning, vänta några minuter och försök igen.
- När flera anslutningar kräver behörigheter till samma tjänst, använd rollen som är minimidelen av behörigheter för alla anslutningar till den tjänsten.
- Flera bindningar kräver bredare behörigheter i ditt lagringskonto än vad som krävs av anslutningen
AzureWebJobsStorage. - För att komma åt nycklar i Key Vault genom att använda hanterade identiteter, tilldela din app rollen Key Vault Secrets User. Du kan också använda en Key Vault-åtkomstpolicy för att tilldela Get secrets-behörigheten till den hanterade identiteten. Mer information finns i ge en identitet i din app åtkomst till ditt nyckelvalv.
- Den här artikeln avser endast inbyggda roller som ger minimala behörigheter. Beroende på appens krav kan du i stället behöva skapa egna anpassade roller.
De behörigheter du behöver beror på vilken typ av anslutning det är:
AzureWebJobsStorage: Rollen Storage Blob Data Owner tillhandahåller minimibehörigheter för lagringskontot för den värd-krävdaAzureWebJobsStorageanslutningen. Denna roll ger den lagringsåtkomstnivå som Functions-värden behöver, samtidigt som principen om minsta privilegium följs.För vissa typer av problem kan Functions trigga diagnostiska händelser för att hjälpa dig felsöka, även när din app inte kan starta. Du måste också lägga till rollen Storage Table Data Contributor , som ger tillgång till Table Storage där dessa diagnostiska händelser bevaras. Utan dessa extra behörigheter kan du se varningar i dina loggar om att dessa händelser inte kan skrivas.
Flera andra bindningar kan kräva att du använder en något bredare roll. Kolumnen lagring som krävs av värden i tabellen på fliken Bindningar visar dessa rollkrav.
APPLICATIONINSIGHTS_AUTHENTICATION_STRING: Rollen Monitoring Metrics Publisher ger de minsta behörigheter som värden behöver för att ansluta till Application Insights för loggning.
Kommentar
När du använder APPLICATIONINSIGHTS_AUTHENTICATION_STRING för att ansluta till Application Insights med Microsoft Entra-autentisering bör du även inaktivera lokal autentisering för Application Insights. Den här konfigurationen kräver Microsoft Entra-autentisering för att telemetri ska matas in på din arbetsyta.
Kommentar
Använd Key Vault endast för anslutningar som för närvarande inte stödjer Microsoft Entra ID med Azure-hanterade identiteter.
Eftersom vissa tjänster ännu inte stödjer Microsoft Entra-autentisering kan din app ändå kräva hemligheter i vissa fall. I dessa fall kan Azure Key Vault hjälpa till att effektivisera hanteringslivscykeln för hemlighetsbaserad autentisering. Din app kan använda Key Vault för att säkrare lagra och komma åt delade hemligheter, inklusive standardkontots reťazec pripojenia. Även om anslutningar fortfarande använder delade hemligheter ger Key Vault en högre säkerhetsnivå för dina hemligheter, inklusive nyckelunderhåll och rotation. Din app kan ansluta till Key Vault genom att använda hanterade identiteter, även när tjänsten ännu inte stödjer hanterade identitetsbaserade anslutningar.
När du använder Key Vault, skapa din applikationsinställning för anslutningen genom att använda en Key Vault-referens istället för den faktiska hemligheten. Mer information finns i Hämta appinställningar från Key Vault.
Ha dessa överväganden i åtanke när du upprätthåller anslutningar i Key Vault:
För att komma åt nycklar i valvet måste du ge en identitet i din app tillgång till ditt nyckelvalv.
Du kan använda Key Vault för att lagra inställningar för dina hanterade identitetsbaserade anslutningar. När din app använder Key Vault måste referenser använda en nyckelseparator av
:eller/, såsomStorage1:blobServiceUri. När du använder den vanliga avgränsaren för programinställningar__matchas referensnamn inte korrekt.
Du kan konfigurera inställningen AzureWebJobsStorage så att den returnerar en Key Vault-referens som innehåller anslutningssträngen i stället för att returnera själva anslutningssträngen. För att lära dig hur, se Använd Key Vault-referenser som appinställningar.
Azure Files stöder för närvarande inte hanterade identitetsanslutningar. På grund av denna begränsning kan du använda Key Vault för att säkra inställningenWEBSITE_AZUREFILESCONNECTIONSTRING, vilket krävs för dynamisk skalning av både Consumption- och Premium-planer.
Flex Consumption-planen är också en dynamisk plan som inte använder Azure Files och fullt ut stödjer hanterade identitetsanslutningar.
Caution
Undvik att arbeta direkt med delade hemligheter. Använd när det är möjligt en säkrare autentiseringsmetod för dina anslutningar.
Minska de potentiella nedåtgående riskerna för förlorade eller komprometterade hemligheter genom att använda hanterade identiteter med Microsoft Entra ID-autentisering. När fjärrtjänsten inte stödjer hanterade identiteter, använd åtminstone Azure Key Vault, som säkrare underhåller delade hemligheter.
Om du av någon anledning inte kan använda en säkrare autentiseringsmetod, krypterar plattformen data i dina applikationsinställningar medan den är i vila. Migrera dina appar från att använda delade hemligheter till en säkrare autentiseringsmetod så snart som möjligt.
Ställ in anslutningssträngen för standardlagringskontot i inställningen AzureWebJobsStorage. Denna inställning är standardanslutningsbeteendet när du skapar din funktionsapp.
Hantera SDK-klientanslutningar
När du skapar dina egna klient-SDK-anslutningar i funktionskod, återanvänd alltid klientinstanser över anrop istället för att skapa nya. Denna bästa praxis för alla hostingplaner minskar latensen, undviker socket-utmattning och förbättrar resurseffektiviteten.
Återanvänd klientinstanser
Följ dessa riktlinjer när du använder en tjänstespecifik klient i en Azure Functions-applikation:
- Skapa inte en ny klient vid varje funktionsanrop.
- Skapa en enda, delad klient som varje funktionsanrop kan återanvända.
- Överväg att skapa en enda, delad klient i en hjälpklass om olika funktioner använder samma tjänst.
Den rekommenderade metoden beror på ditt språk:
Använd beroendeinjektion för att registrera singleton- eller scoped-klienter.
Se exempel på klientkod för kompletta mönster i varje språk.
Anslutningsgränser i en förbrukningsplan
Kommentar
De hårda anslutningsgränser som beskrivs i detta avsnitt gäller endast för den äldre konsumtionsplanen. Flex Consumption-planen körs inte i samma sandlådemiljö och har inga begränsningar. Det rekommenderas dock fortfarande att återanvända klienter för alla abonnemang för optimal prestanda.
I den äldre konsumtionsplanen körs funktionsappar i en sandlådemiljö som begränsar antalet utgående anslutningar till 600 aktiva (totalt 1 200) per instans. När du når denna gräns skriver Functions-värden följande meddelande till loggarna: Host thresholds exceeded: Connections. Mer information finns i Begränsningar för Functions-tjänsten.
Den här gränsen är per instans. När skalningskontrollanten lägger till funktionsappinstanser för att hantera fler begäranden har varje instans en oberoende anslutningsgräns. Det betyder att det inte finns någon global anslutningsgräns, och du kan ha mer än 600 aktiva anslutningar över alla aktiva instanser.
När du felsöker anslutningsproblem, se till att Application Insights är aktiverat för din funktionsapp. Med Application Insights kan du visa mätvärden för dina funktionsappar som körningar. För mer information, se Visa telemetri i Application Insights.
Exempel på klientkod
Det här avsnittet visar metodtips för att skapa och använda klienter från din funktionskod.
HTTP-förfrågningar
Registrera en delad HttpClient genom att använda beroendeinjektion så att alla funktionsanrop återanvänder samma instans. I det här fallet behöver du inte avyttra klienten eftersom körmiljön hanterar dess livslängd.
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace;
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
}
}
Sedan injicerar du IHttpClientFactory eller HttpClient i din funktionsklass:
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace MyNamespace;
public class MyFunction(HttpClient httpClient, ILogger<MyFunction> logger)
{
[Function("MyFunction")]
public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
var response = await httpClient.GetAsync("https://example.com");
logger.LogInformation("Response status: {Status}", response.StatusCode);
}
}
Azure Cosmos DB clients
Registrera en singleton CosmosClient i din startup så att alla funktioner delar en anslutning. Azure Cosmos DB-dokumentationen rekommenderar att du använder en singleton-klient under hela applikationens livslängd.
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace;
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton(_ =>
{
var connectionString = Environment.GetEnvironmentVariable("CosmosDBConnection");
return new CosmosClient(connectionString);
});
}
}
Injicera CosmosClient sedan i din funktionsklass:
using Microsoft.Azure.Cosmos;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace MyNamespace;
public class MyCosmosFunction(CosmosClient cosmosClient, ILogger<MyCosmosFunction> logger)
{
private readonly Container _container = cosmosClient.GetContainer("mydb", "mycontainer");
[Function("MyCosmosFunction")]
public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo timer)
{
var item = new { id = "myId", partitionKey = "myPartitionKey", data = "example" };
await _container.UpsertItemAsync(item, new PartitionKey("myPartitionKey"));
logger.LogInformation("Item upserted");
}
}
SqlClient-anslutningar
Din funktionskod kan använda .NET Framework Data Provider för SQL Server (SqlClient) för att upprätta anslutningar till en SQL-relationsdatabas. Denna leverantör är också den underliggande leverantören av dataramverk som bygger på ADO.NET, såsom Entity Framework. Till skillnad från HttpClient - och DocumentClient-anslutningar implementerar ADO.NET anslutningspooler som standard. Men eftersom anslutningarna fortfarande kan ta slut bör du optimera anslutningarna till databasen. Mer information finns i SQL Server-anslutningspooler (ADO.NET).
Tips
Vissa dataramverk, till exempel Entity Framework, hämtar vanligtvis anslutningssträng från avsnittet ConnectionStrings i en konfigurationsfil. I det här fallet måste du uttryckligen lägga till SQL-databas anslutningssträng i samlingen Anslutningssträngar för dina funktionsappinställningar och i filen local.settings.json i det lokala projektet. Om du skapar en instans av SqlConnection i din funktionskod, lagra värdet reťazec pripojenia i applikationsinställningarna tillsammans med dina andra anslutningar.
Azure App Configuration (programkonfiguration för appar)
Azure App Configuration är en Azure-tjänst som du kan använda för att centralt hantera applikationsinställningar. App Configuration stödjer hierarkiska nyckel-värde-par och versionshantering, och integreras med Azure Key Vault för säkrare hemlighetshantering. Mer information finns i Vad är Azure App Configuration?
För ökad säkerhet använder din funktionsapp hanterade identiteter med Microsoft Entra-autentisering för att komma åt inställningar i en applikationsbutik. För mer information, se Use App Configuration-referenser för Azure Functions.
Kommentar
När man använder Azure App Configuration för att lagra inställningar för hanterade identitetsbaserade anslutningar måste referenser använda en nyckelseparator i : eller / i formatet <CONNECTION_NAME_PREFIX>:fullyQualifiedNamespace. När du använder den vanliga avgränsaren för programinställningar __ matchas referensnamn inte korrekt.
Relaterat innehåll
Använd connectors i Azure Functions — Koppla till tjänster som Office 365, Teams och SharePoint genom att använda managed connectors med inbyggd OAuth och webhook-hantering.
För mer information om varför statiska klienter används, se Improper instansiation antipattern.
Fler prestandatips för Azure Functions finns i Optimera prestanda och tillförlitlighet för Azure Functions.