Ontwikkelaarshandleiding voor Azure Functions
In Azure Functions delen specifieke functies enkele belangrijke technische concepten en onderdelen, ongeacht de taal of binding die u gebruikt. Lees dit overzicht dat van toepassing is op al deze informatie voordat u meer leert over specifieke taal of binding.
In dit artikel wordt ervan uitgenomen dat u het overzicht Azure Functions gelezen.
Functiecode
Een functie is het primaire concept in Azure Functions. Een functie bevat twee belangrijke onderdelen: uw code, die in verschillende talen kan worden geschreven, en een configuratie, het bestand function.json. Voor gecompileerde talen wordt dit configuratiebestand automatisch gegenereerd op basis van aantekeningen in uw code. Voor scripttalen moet u het configuratiebestand zelf verstrekken.
Het bestand function.json definieert de trigger, bindingen en andere configuratie-instellingen van de functie. Elke functie kan slechts één trigger hebben. De runtime maakt gebruik van dit configuratiebestand om te bepalen welke gebeurtenissen moeten worden bewaakt en hoe gegevens moeten worden doorgeven aan en worden retourneert na de uitvoering van een functie. Hier volgt een voorbeeld van een function.json-bestand.
{
"disabled":false,
"bindings":[
// ... bindings here
{
"type": "bindingType",
"direction": "in",
"name": "myParamName",
// ... more depending on binding
}
]
}
Zie triggers en bindingsconcepten Azure Functionsmeer informatie.
De bindings eigenschap is waar u zowel triggers als bindingen configureert. Elke binding deelt enkele algemene instellingen en enkele instellingen die specifiek zijn voor een bepaald type binding. Voor elke binding zijn de volgende instellingen vereist:
| Eigenschap | Waarden | Type | Opmerkingen |
|---|---|---|---|
| type | Naam van binding. Bijvoorbeeld queueTrigger. |
tekenreeks | |
| richting | in, out |
tekenreeks | Geeft aan of de binding is voor het ontvangen van gegevens in de functie of het verzenden van gegevens van de functie. |
| naam | Functie-id. Bijvoorbeeld myQueue. |
tekenreeks | De naam die wordt gebruikt voor de gebonden gegevens in de functie. Voor C# is dit een argumentnaam; voor JavaScript is dit de sleutel in een sleutel/waarde-lijst. |
Functie-app
Een functie-app biedt een uitvoeringscontext in Azure waarin uw functies worden uitgevoerd. Dit is dus de eenheid van implementatie en beheer voor uw functies. Een functie-app bestaat uit een of meer afzonderlijke functies die samen worden beheerd, geïmplementeerd en geschaald. Alle functies in een functie-app delen hetzelfde prijsplan, dezelfde implementatiemethode en dezelfde runtimeversie. U kunt een functie-app zien als een manier om uw functies te organiseren en gezamenlijk te beheren. Zie Een functie-app beheren voor meer informatie.
Notitie
Alle functies in een functie-app moeten in dezelfde taal zijn geschreven. In eerdere versies van de Azure Functions runtime was dit niet vereist.
Mapstructuur
De code voor alle functies in een specifieke functie-app bevindt zich in een hoofdprojectmap die een hostconfiguratiebestand bevat. Het bestand host.json bevat runtimespecifieke configuraties en bevindt zich in de hoofdmap van de functie-app. Een bin-map bevat pakketten en andere bibliotheekbestanden die de functie-app nodig heeft. Specifieke mapstructuren die vereist zijn voor de functie-app, zijn afhankelijk van de taal:
In versie 2.x en hoger van de Functions-runtime moeten alle functies in de functie-app dezelfde taalstack delen.
Het bovenstaande is de standaardmapstructuur (en aanbevolen) voor een functie-app. Als u de bestandslocatie van de code van een functie wilt wijzigen, wijzigt u de scriptFile sectie van het bestand function.json. We raden u ook aan pakketimplementatie te gebruiken om uw project te implementeren in uw functie-app in Azure. U kunt ook bestaande hulpprogramma's gebruiken, zoals continue integratie en implementatie en Azure DevOps.
Notitie
Als u een pakket handmatig implementeert, moet u ervoor zorgen dat u uw host.json-bestand en functiemappen rechtstreeks in de map wwwroot implementeert. Neem de map wwwroot niet op in uw implementaties. Anders hebt u uiteindelijk wwwroot\wwwroot mappen.
Lokale hulpprogramma's en publiceren gebruiken
Functie-apps kunnen worden geschreven en gepubliceerd met behulp van verschillende hulpprogramma's, waaronder Visual Studio, Visual Studio Code, IntelliJ, Eclipseen Azure Functions Core Tools. Zie Code and test Azure Functions locally voor meer informatie.
Functies bewerken in de Azure Portal
Met de Functions-editor die is ingebouwd Azure Portal kunt u uw code en het bestand function.json rechtstreeks inline bijwerken. Dit wordt alleen aanbevolen voor kleine wijzigingen of proofs of concept- best practice is om een lokaal ontwikkelprogramma zoals VS Code te gebruiken.
Parallelle uitvoering
Wanneer meerdere triggergebeurtenissen sneller optreden dan een functieruntime met één thread kan verwerken, kan de runtime de functie meerdere keren parallel aanroepen. Als een functie-app gebruik maakt van het hostingplan Consumption,kan de functie-app automatisch worden uitschalen. Elk exemplaar van de functie-app, ongeacht of de app wordt uitgevoerd op het hostingplan Consumption of een normaal App Service hostingplan,kan gelijktijdige functie-aanroepen parallel verwerken met behulp van meerdere threads. Het maximum aantal gelijktijdige functie-aanroepen in elk exemplaar van de functie-app varieert op basis van het type trigger dat wordt gebruikt en de resources die worden gebruikt door andere functies in de functie-app.
Versieversies van Functions-runtime
U kunt de versie van de Functions-runtime configureren met behulp van FUNCTIONS_EXTENSION_VERSION de app-instelling. De waarde ~3 geeft bijvoorbeeld aan dat uw functie-app 3.x gebruikt als de belangrijkste versie. Functie-apps worden bijgewerkt naar elke nieuwe secundaire versie wanneer ze worden uitgebracht. Zie How to target Azure Functions runtime versions (Het doel van runtimeversies)voor meer informatie, Azure Functions hoe u de exacte versie van uw functie-app kunt weergeven.
Opslagplaatsen
De code voor Azure Functions wordt open source en opgeslagen in GitHub opslagplaatsen:
- Azure Functions
- Azure Functions host
- Azure Functions portal
- Azure Functions sjablonen
- Azure WebJobs SDK
- Azure WebJobs SDK-extensies
Bindingen
Hier is een tabel met alle ondersteunde bindingen.
Dit tabel geeft de bindingen weer die worden ondersteund in de belangrijkste versies van de Azure Functions-runtime:
| Type | 1.x | 2.x en hoger1 | Trigger | Invoer | Uitvoer |
|---|---|---|---|---|---|
| Blob Storage | ✔ | ✔ | ✔ | ✔ | ✔ |
| Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
| Azure SQL (preview) | ✔ | ✔ | ✔ | ||
| Dapr3 | ✔ | ✔ | ✔ | ✔ | |
| Event Grid | ✔ | ✔ | ✔ | ✔ | |
| Event Hubs | ✔ | ✔ | ✔ | ✔ | |
| HTTP en webhooks | ✔ | ✔ | ✔ | ✔ | |
| IoT Hub | ✔ | ✔ | ✔ | ✔ | |
| Kafka2 | ✔ | ✔ | ✔ | ||
| Mobile Apps | ✔ | ✔ | ✔ | ||
| Notification Hubs | ✔ | ✔ | |||
| Queue Storage | ✔ | ✔ | ✔ | ✔ | |
| RabbitMQ2 | ✔ | ✔ | ✔ | ||
| SendGrid | ✔ | ✔ | ✔ | ||
| Service Bus | ✔ | ✔ | ✔ | ✔ | |
| SignalR | ✔ | ✔ | ✔ | ||
| Table Storage | ✔ | ✔ | ✔ | ✔ | |
| Timer | ✔ | ✔ | ✔ | ||
| Twilio | ✔ | ✔ | ✔ |
1 Vanaf de rumtime 2.x moeten alle bindingen, behalve HTTP en Timer, worden geregistreerd. Raadpleeg Bindingextensies registreren.
2 Triggers worden niet ondersteund in het Consumption-abonnement. Vereist runtime-gestuurde triggers.
3 Alleen ondersteund in Kubernetes, IoT Edge en andere zelf-gehoste modi.
Hebt u problemen met fouten die afkomstig zijn van de bindingen? Bekijk de documentatie Azure Functions bindingsfoutcodes.
Verbindingen
Uw functieproject verwijst naar verbindingsgegevens op naam van de configuratieprovider. De verbindingsgegevens worden niet rechtstreeks geaccepteerd, waardoor ze in verschillende omgevingen kunnen worden gewijzigd. Een triggerdefinitie kan bijvoorbeeld een eigenschap connection bevatten. Dit kan verwijzen naar een connection string, maar u kunt de connection string rechtstreeks in een function.json instellen. In plaats daarvan stelt u in connection op de naam van een omgevingsvariabele die de connection string.
De standaardconfiguratieprovider maakt gebruik van omgevingsvariabelen. Deze kunnen worden ingesteld door Application Instellingen wanneer deze wordt uitgevoerd in de Azure Functions-service of vanuit het lokale instellingenbestand bij het lokaal ontwikkelen.
Verbindingswaarden
Wanneer de verbindingsnaam wordt opgelost naar één exacte waarde, identificeert de runtime de waarde als een connection string, die doorgaans een geheim bevat. De details van een connection string worden gedefinieerd door de service waarmee u verbinding wilt maken.
Een verbindingsnaam kan echter ook verwijzen naar een verzameling van meerdere configuratie-items,handig voor het configureren van op identiteit gebaseerde verbindingen. Omgevingsvariabelen kunnen worden behandeld als een verzameling met behulp van een gedeeld voorvoegsel dat eindigt op dubbele onderstrepingstekens. __ Er kan vervolgens naar de groep worden verwezen door de naam van de verbinding in te stellen op dit voorvoegsel.
De eigenschap voor connection een Azure Blob-triggerdefinitie kan bijvoorbeeld 'Storage1' zijn. Zolang er geen enkele tekenreekswaarde is geconfigureerd door een omgevingsvariabele met de naam 'Storage1', kan een omgevingsvariabele met de naam worden gebruikt om de eigenschap van de verbinding Storage1__blobServiceUri blobServiceUri te informeren. De verbindingseigenschappen verschillen voor elke service. Raadpleeg de documentatie voor het onderdeel dat gebruikmaakt van de verbinding.
Een op identiteit gebaseerde verbinding configureren
Sommige verbindingen in Azure Functions kunnen worden geconfigureerd voor het gebruik van een identiteit in plaats van een geheim. Ondersteuning is afhankelijk van de extensie die de verbinding gebruikt. In sommige gevallen is een connection string vereist in Functions, zelfs als de service waarmee u verbinding maakt op basis van identiteiten ondersteunt. Zie de zelfstudie Een functie-app maken met op identiteit gebaseerde verbindingen voor een zelfstudie over het configureren van uw functie-apps met beheerde identiteiten.
Op identiteit gebaseerde verbindingen worden ondersteund door de volgende onderdelen:
| Verbindingsbron | Ondersteunde abonnementen | Lees meer |
|---|---|---|
| Azure Blob-triggers en -bindingen | Alles | Extensieversie 5.0.0 of hoger |
| Azure Queue-triggers en -bindingen | Alles | Extensieversie 5.0.0 of hoger |
| Azure Event Hubs triggers en bindingen | Alles | Extensieversie 5.0.0 of hoger |
| Azure Service Bus triggers en bindingen | Alles | Extensieversie 5.0.0 of hoger |
| Azure Cosmos DB en bindingen - Preview | Elastische Premium | Extensieversie 4.0.0-preview1 of hoger |
| Host-required storage ('AzureWebJobsStorage') - preview | Alles | Verbinding maken met hostopslag met een identiteit |
Notitie
Identiteitsverbindingen worden niet ondersteund met Durable Functions.
Wanneer deze worden gehost in Azure Functions-service, gebruiken identiteitsgebaseerde verbindingen een beheerde identiteit. De door het systeem toegewezen identiteit wordt standaard gebruikt, hoewel een door de gebruiker toegewezen identiteit kan worden opgegeven met de credential eigenschappen clientID en . Wanneer deze wordt uitgevoerd in andere contexten, zoals lokale ontwikkeling, wordt in plaats daarvan uw identiteit van de ontwikkelaar gebruikt, hoewel dit kan worden aangepast. Zie Local development with identity-based connections(Lokale ontwikkeling met op identiteit gebaseerde verbindingen).
Machtiging verlenen aan de identiteit
Elke identiteit die wordt gebruikt, moet machtigingen hebben om de beoogde acties uit te voeren. U moet een rol toewijzen in Azure RBACmet behulp van ingebouwde of aangepaste rollen die deze machtigingen bieden.
Belangrijk
Sommige machtigingen kunnen worden blootgesteld door de doelservice die niet nodig zijn voor alle contexten. Waar mogelijk moet u zich houden aan het principe van de minste bevoegdheden en de identiteit alleen bevoegdheden verlenen. Als de app bijvoorbeeld alleen gegevens uit een gegevensbron hoeft te kunnen lezen, gebruikt u een rol die alleen machtigingen heeft om te lezen. Het zou ongepast zijn om een rol toe te wijzen waarmee ook naar die service kan worden geschreven, omdat dit overmatige machtigingen zou zijn voor een leesbewerking. Op dezelfde manier wilt u er zeker van zijn dat de roltoewijzing alleen wordt beperkt tot de resources die moeten worden gelezen.
Kies een tabblad hieronder voor meer informatie over machtigingen voor elk onderdeel:
- Azure Blobs-extensie
- Azure Queues-extensie
- Event Hubs-extensie
- Service Bus extensie
- Azure Cosmos DB extensie (preview)
- Functions-hostopslag (preview)
U moet een roltoewijzing maken die tijdens runtime toegang biedt tot uw blobcontainer. Beheerrollen zoals Eigenaar zijn niet voldoende. In de volgende tabel ziet u ingebouwde rollen die worden aanbevolen wanneer u de Blob Storage-extensie in normale werking gebruikt. Uw toepassing heeft mogelijk extra machtigingen nodig op basis van de code die u schrijft.
| Bindingstype | Voorbeeld van ingebouwde rollen |
|---|---|
| Trigger | [Storage eigenaar van blobgegevens en] Storage [Inzender voor wachtrijgegevens]1 |
| Invoerbinding | Lezer voor opslagblobgegevens |
| Uitvoerbinding | Eigenaar van opslagblobgegevens |
1 De blobtrigger maakt standaard intern gebruik van Azure Queues. Daarom zijn ook [machtigingen Storage Queue Data Contributor] nodig om berichten te maken en te ontvangen.
Algemene eigenschappen voor op identiteit gebaseerde verbindingen
Een op identiteit gebaseerde verbinding voor een Azure-service accepteert de volgende algemene eigenschappen, waarbij de waarde is van uw eigenschap in de <CONNECTION_NAME_PREFIX> trigger- of connection bindingsdefinitie:
| Eigenschap | Sjabloon voor omgevingsvariabelen | Description |
|---|---|---|
| Tokenreferenties | <CONNECTION_NAME_PREFIX>__credential |
Definieert hoe een token moet worden verkregen voor de verbinding. Alleen aanbevolen wanneer u een door de gebruiker toegewezen identiteit opgeeft, wanneer deze moet worden ingesteld op 'managedidentity'. Dit is alleen geldig wanneer deze wordt gehost in de Azure Functions service. |
| Client-id | <CONNECTION_NAME_PREFIX>__clientId |
Wanneer credential is ingesteld op 'managedidentity', geeft deze eigenschap de door de gebruiker toegewezen identiteit op die moet worden gebruikt bij het verkrijgen van een token. De eigenschap accepteert een client-id die overeenkomt met een door de gebruiker toegewezen identiteit die is toegewezen aan de toepassing. Als dit niet wordt opgegeven, wordt de door het systeem toegewezen identiteit gebruikt. Deze eigenschap wordt anders gebruikt in lokale ontwikkelscenario's, wanneer credential niet moet worden ingesteld. |
Aanvullende opties kunnen worden ondersteund voor een bepaald verbindingstype. Raadpleeg de documentatie voor het onderdeel dat de verbinding maakt.
Lokale ontwikkeling met op identiteit gebaseerde verbindingen
Notitie
Voor lokale ontwikkeling met op identiteit gebaseerde verbindingen zijn bijgewerkte versies van de Azure Functions Core Tools. U kunt de momenteel geïnstalleerde versie controleren door uit te func -v werken. Gebruik voor Functions v3 versie 3.0.3904 of hoger. Gebruik voor Functions v4 versie 4.0.3904 of hoger.
Wanneer de app lokaal wordt uitgevoerd, geeft de bovenstaande configuratie aan dat de runtime uw lokale ontwikkelaarsidentiteit moet gebruiken. De verbinding probeert een token op te halen van de volgende locaties, in volgorde:
- Een lokale cache die wordt gedeeld tussen Microsoft-toepassingen
- De huidige gebruikerscontext in Visual Studio
- De huidige gebruikerscontext in Visual Studio Code
- De huidige gebruikerscontext in de Azure CLI
Als geen van deze opties lukt, treedt er een fout op.
Omdat hiervoor de identiteit van uw ontwikkelaar wordt gebruikt, hebt u mogelijk al een aantal rollen voor ontwikkelingsbronnen, maar bieden ze mogelijk geen toegang tot gegevens. Beheerrollen zoals Eigenaar zijn niet voldoende. Controleer welke machtigingen vereist zijn voor verbindingen voor elk onderdeel en zorg ervoor dat u ze aan uzelf hebt toegewezen.
In sommige gevallen wilt u mogelijk het gebruik van een andere identiteit opgeven. U kunt configuratie-eigenschappen toevoegen voor de verbinding die naar de alternatieve identiteit wijzen op basis van een client-id en clientgeheim voor een Azure Active Directory service-principal. Deze configuratieoptie wordt niet ondersteund wanneer deze wordt gehost in de Azure Functions service. Als u een id en geheim op uw lokale computer wilt gebruiken, definieert u de verbinding met de volgende aanvullende eigenschappen:
| Eigenschap | Sjabloon voor omgevingsvariabelen | Description |
|---|---|---|
| Tenant-id | <CONNECTION_NAME_PREFIX>__tenantId |
De Azure Active Directory tenant-id (map). |
| Client-id | <CONNECTION_NAME_PREFIX>__clientId |
De client-id (toepassings-id) van een app-registratie in de tenant. |
| Clientgeheim | <CONNECTION_NAME_PREFIX>__clientSecret |
Een clientgeheim dat is gegenereerd voor de app-registratie. |
Hier is een voorbeeld van eigenschappen local.settings.json die vereist zijn voor een identiteitsgebaseerde verbinding met 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>"
}
}
Verbinding maken met hostopslag met een identiteit (preview)
Azure Functions maakt standaard gebruik van de verbinding 'AzureWebJobsStorage' voor kerngedrag, zoals het coördineren van de singleton-uitvoering van timertriggers en de standaardopslag van app-sleutels. Dit kan ook worden geconfigureerd om gebruik te maken van een identiteit.
Waarschuwing
Andere onderdelen in Functions zijn afhankelijk van 'AzureWebJobsStorage' voor standaardgedrag. U moet deze niet verplaatsen naar een verbinding op basis van identiteit als u oudere versies van extensies gebruikt die dit type verbinding niet ondersteunen, inclusief triggers en bindingen voor Azure Blobs en Event Hubs. Op dezelfde manier wordt gebruikt voor implementatieartefacten bij het gebruik van build aan serverzijde in Linux-verbruik. Als u dit inschakelen, moet u implementeren via een extern AzureWebJobsStorage implementatiepakket.
Bovendien gebruiken sommige apps 'AzureWebJobsStorage' voor andere opslagverbindingen in hun triggers, bindingen en/of functiecode. Zorg ervoor dat alle toepassingen van 'AzureWebJobsStorage' de verbindingsindeling op basis van identiteit kunnen gebruiken voordat u deze verbinding vanuit een connection string.
Als u een op identiteit gebaseerde verbinding wilt gebruiken voor AzureWebJobsStorage, configureert u de volgende app-instellingen:
| Instelling | Beschrijving | Voorbeeldwaarde |
|---|---|---|
AzureWebJobsStorage__blobServiceUri |
De gegevensvlak-URI van de blobservice van het opslagaccount, met behulp van het HTTPS-schema. | https://<storage_account_name>.blob.core.windows.net |
AzureWebJobsStorage__queueServiceUri |
De gegevensvlak-URI van de wachtrijservice van het opslagaccount, met behulp van het HTTPS-schema. | https://<storage_account_name>.queue.core.windows.net |
Algemene eigenschappen voor op identiteit gebaseerde verbindingen kunnen ook worden ingesteld.
Als u een opslagaccount gebruikt dat gebruikmaakt van het standaard-DNS-achtervoegsel en de servicenaam voor Globale Azure, volgens de indeling, kunt u in plaats daarvan instellen op de naam van https://<accountName>.blob/queue/file/table.core.windows.net AzureWebJobsStorage__accountName uw opslagaccount. De blob- en wachtrij-eindpunten worden afgeleid voor dit account. Dit werkt niet als het opslagaccount zich in een onafhankelijke cloud of een aangepaste DNS heeft.
| Instelling | Beschrijving | Voorbeeldwaarde |
|---|---|---|
AzureWebJobsStorage__accountName |
De accountnaam van een opslagaccount, alleen geldig als het account zich niet in een onafhankelijke cloud en geen aangepaste DNS heeft. | <storage_account_name> |
U moet een roltoewijzing maken die tijdens runtime toegang biedt tot het opslagaccount voor 'AzureWebJobsStorage'. Beheerrollen zoals Eigenaar zijn niet voldoende. De [rol Storage blobgegevenseigenaar] dekt de basisbehoeften van Functions-hostopslag: de runtime heeft zowel lees- als schrijftoegang nodig tot blobs en de mogelijkheid om containers te maken. Er zijn enkele situaties, zoals bij het gebruik van de blobtrigger, Storage [mogelijk] ook een inzender voor wachtrijgegevens nodig zijn. Mogelijk hebt u aanvullende machtigingen nodig als u 'AzureWebJobsStorage' gebruikt voor andere doeleinden.
Problemen met rapportage
| Item | Beschrijving | Koppeling |
|---|---|---|
| Runtime | Scripthost, triggers en bindingen, taalondersteuning | Een probleem melden |
| Sjablonen | Codeprobleem met aanmaaksjabloon | Een probleem melden |
| Portal | Probleem met de gebruikersinterface of -ervaring | Een probleem melden |
Volgende stappen
Zie de volgende resources voor meer informatie: