Příručka pro vývojáře v Azure Functions
V Azure Functions konkrétní funkce sdílejí několik základních technických konceptů a komponent bez ohledu na jazyk nebo vazbu, které používáte. Než se pustíte do podrobností o výuce specifických pro daný jazyk nebo vazbu, nezapomeňte si přečíst tento přehled, který se vztahuje na všechny z nich.
Tento článek předpokládá, že jste si už přečetli přehled Azure Functions.
Kód funkce
Funkce je primárním konceptem v Azure Functions. Funkce obsahuje dvě důležité části – váš kód, který může být napsán v různých jazycích, a určitou konfiguraci, soubor function.json. U zkompilovaných jazyků se tento konfigurační soubor automaticky vygeneruje z poznámek v kódu. Pro skriptovací jazyky musíte konfigurační soubor zadat sami.
Soubor function.json definuje trigger funkce, vazby a další nastavení konfigurace. Každá funkce má jednu a jenom jednu aktivační událost. Modul runtime používá tento konfigurační soubor k určení událostí, které se mají monitorovat, a k tomu, jak předávat data a vracet data z provádění funkce. Následuje příklad souboru function.json.
{
"disabled":false,
"bindings":[
// ... bindings here
{
"type": "bindingType",
"direction": "in",
"name": "myParamName",
// ... more depending on binding
}
]
}
Další informace najdete v tématu Azure Functions konceptů triggerů a vazeb.
Vlastnost bindings
je místo, kde konfigurujete triggery i vazby. Každá vazba sdílí několik běžných nastavení a některá nastavení, která jsou specifická pro konkrétní typ vazby. Každá vazba vyžaduje následující nastavení:
Vlastnost | Hodnoty | Typ | Komentáře |
---|---|---|---|
typ | Název vazby. Například, queueTrigger . |
řetězec | |
směr | in , out |
řetězec | Určuje, jestli je vazba určena pro příjem dat do funkce nebo pro odesílání dat z funkce. |
name | Identifikátor funkce. Například, myQueue . |
řetězec | Název, který se používá pro svázaná data ve funkci. Pro jazyk C# se jedná o název argumentu; Pro JavaScript je to klíč v seznamu klíč/hodnota. |
Aplikace funkcí
Aplikace funkcí poskytuje kontext spuštění v Azure, ve kterém běží vaše funkce. Proto se jedná o jednotku nasazení a správy vašich funkcí. Aplikace funkcí se skládá z jedné nebo několika jednotlivých funkcí, které se spravují, nasazují a škálují společně. Všechny funkce v aplikaci funkcí sdílejí stejný cenový plán, metodu nasazení a verzi modulu runtime. Aplikaci funkcí si můžete představit jako způsob, jak uspořádat a souhrnně spravovat funkce. Další informace najdete v tématu Správa aplikace funkcí.
Poznámka
Všechny funkce v aplikaci funkcí musí být vytvořené ve stejném jazyce. V předchozích verzích modulu runtime Azure Functions to nebylo povinné.
Struktura složek
Kód pro všechny funkce v konkrétní aplikaci funkcí se nachází v kořenové složce projektu, která obsahuje konfigurační soubor hostitele. Soubor host.json obsahuje konfigurace specifické pro modul runtime a je v kořenové složce aplikace funkcí. Složka bin obsahuje balíčky a další soubory knihovny, které aplikace funkcí vyžaduje. Konkrétní struktury složek vyžadované aplikací funkcí závisí na jazyce:
- Zkompilovaný jazyk C# (.csproj)
- Skript jazyka C# (.csx)
- Skript jazyka F#
- Java
- JavaScript
- PowerShell
- Python
Ve verzi 2.x a vyšší modulu runtime Functions musí všechny funkce v aplikaci funkcí sdílet stejný jazykový zásobník.
Výše uvedené je výchozí (a doporučená) struktura složek pro aplikaci funkcí. Pokud chcete změnit umístění souboru kódu funkce, upravte scriptFile
oddíl souboru function.json . K nasazení projektu do aplikace funkcí v Azure doporučujeme také použít nasazení balíčku . Můžete také použít existující nástroje, jako je kontinuální integrace a nasazování a Azure DevOps.
Poznámka
Pokud balíček nasazujete ručně, nezapomeňte nasadit soubor host.json a složky funkcí přímo do složky wwwroot
. Nezahrnujte wwwroot
složku do nasazení. V opačném případě skončíte se složkami wwwroot\wwwroot
.
Použití místních nástrojů a publikování
Aplikace funkcí je možné vytvářet a publikovat pomocí různých nástrojů, včetně sady Visual Studio, Visual Studio Code, IntelliJ, Eclipse a Azure Functions Core Tools. Další informace najdete v tématu Kód a testování Azure Functions místně.
Jak upravit funkce v Azure Portal
Editor funkcí integrovaný do Azure Portal umožňuje aktualizovat kód a soubor function.json přímo v textu. To se doporučuje pouze pro malé změny nebo testování konceptu – osvědčeným postupem je použít místní vývojový nástroj, jako je VS Code.
Paralelní spouštění
Pokud dojde k více aktivačním událostem rychleji, než je může zpracovat modul runtime funkce s jedním vláknem, může modul runtime vyvolat funkci několikrát paralelně. Pokud aplikace funkcí používá plán hostování Consumption, může se automaticky škálovat na více instancí. Každá instance aplikace funkcí, ať už běží v plánu hostování Consumption nebo v plánu běžného hostování App Service, může paralelně zpracovávat souběžné vyvolání funkcí pomocí více vláken. Maximální počet souběžných volání funkcí v každé instanci aplikace funkcí se liší v závislosti na typu použitého triggeru a také na prostředcích používaných jinými funkcemi v rámci aplikace funkcí.
Správa verzí modulu runtime služby Functions
Verzi modulu runtime functions můžete nakonfigurovat pomocí FUNCTIONS_EXTENSION_VERSION
nastavení aplikace. Například hodnota ~3 označuje, že vaše aplikace funkcí bude jako hlavní verzi používat 3.x. Aplikace funkcí se po vydání upgradují na každou novou podverzi. Další informace, včetně toho, jak zobrazit přesnou verzi aplikace funkcí, najdete v tématu Jak cílit na Azure Functions verze modulu runtime.
Úložiště
Kód pro Azure Functions je open source a uložený v úložištích GitHubu:
- Azure Functions
- Azure Functions hostitel
- portál Azure Functions
- Azure Functions šablony
- Sada Azure WebJobs SDK
- Rozšíření sady Azure WebJobs SDK
Vazby
Tady je tabulka všech podporovaných vazeb.
Tato tabulka ukazuje vazby podporované v hlavních verzích modulu runtime Azure Functions:
Typ | 1.x | 2.x a vyšší1 | Trigger | Vstup | Výstup |
---|---|---|---|---|---|
Blob Storage | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure SQL (Preview)2 | ✔ | ✔ | ✔ | ✔ | |
Dapr3 | ✔ | ✔ | ✔ | ✔ | |
Event Grid | ✔ | ✔ | ✔ | ✔ | |
Event Hubs | ✔ | ✔ | ✔ | ✔ | |
Webhooky HTTP & | ✔ | ✔ | ✔ | ✔ | |
IoT Hub | ✔ | ✔ | ✔ | ||
Kafka2 | ✔ | ✔ | ✔ | ||
Mobile Apps | ✔ | ✔ | ✔ | ||
Notification Hubs | ✔ | ✔ | |||
Queue Storage | ✔ | ✔ | ✔ | ✔ | |
RabbitMQ2 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
Service Bus | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
Table Storage | ✔ | ✔ | ✔ | ✔ | |
Časovač | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
1 Počínaje modulem runtime verze 2.x musí být zaregistrované všechny vazby kromě HTTP a Časovače. Viz Registrace rozšíření vazeb.
2 Aktivační události nejsou v plánu Consumption podporované. Vyžaduje triggery řízené modulem runtime.
3 Podporováno pouze v Kubernetes, IoT Edge a dalších režimech v místním prostředí.
Máte problémy s chybami pocházejícími z vazeb? Projděte si dokumentaci ke kódům chyb Azure Functions vazeb.
Připojení
Projekt funkce odkazuje na informace o připojení podle názvu od svého zprostředkovatele konfigurace. Nepřijímá přímo podrobnosti o připojení, což umožňuje jejich změnu v různých prostředích. Definice triggeru může například obsahovat connection
vlastnost . Může to odkazovat na připojovací řetězec, ale nemůžete ho nastavit přímo v objektu function.json
. Místo toho nastavíte connection
název proměnné prostředí, která obsahuje připojovací řetězec.
Výchozí zprostředkovatel konfigurace používá proměnné prostředí. Při spuštění ve službě Azure Functions se můžou nastavit pomocí nastavení aplikace nebo ze souboru místního nastavení při místním vývoji.
Hodnoty připojení
Když se název připojení přeloží na jednu přesnou hodnotu, modul runtime tuto hodnotu identifikuje jako připojovací řetězec, který obvykle obsahuje tajný kód. Podrobnosti připojovacího řetězce definuje služba, ke které se chcete připojit.
Název připojení ale může také odkazovat na kolekci více položek konfigurace, které jsou užitečné pro konfiguraci připojení založených na identitě. Proměnné prostředí lze považovat za kolekci pomocí sdílené předpony, která končí dvojitými podtržítky __
. Na skupinu pak můžete odkazovat nastavením názvu připojení na tuto předponu.
Například connection
vlastnost pro definici triggeru objektu blob Azure může být Storage1. Pokud proměnná prostředí s názvem Storage1 nenakonfiguruje žádnou hodnotu s jedním řetězcem, proměnná prostředí s názvem Storage1__blobServiceUri
by mohla být použita k informování blobServiceUri
vlastnosti připojení. Vlastnosti připojení se pro každou službu liší. Projděte si dokumentaci ke komponentě, která používá připojení.
Poznámka
Pokud používáte Azure App Configuration nebo Key Vault k poskytování nastavení pro připojení spravované identity, měly by se v __
názvech nastavení používat platný oddělovač klíčů, například :
nebo /
, aby se zajistilo, že se názvy přeloží správně.
Například, Storage1:blobServiceUri
.
Konfigurace připojení založeného na identitě
Některá připojení v Azure Functions je možné nakonfigurovat tak, aby místo tajného klíče používala identitu. Podpora závisí na rozšíření, které připojení používá. V některých případech může být připojovací řetězec stále vyžadován ve functions, i když služba, ke které se připojujete, podporuje připojení založená na identitách. Kurz konfigurace aplikací funkcí se spravovanými identitami najdete v kurzu Vytvoření aplikace funkcí s připojeními založenými na identitách.
Připojení založená na identitě jsou podporována následujícími komponentami:
Při hostování ve službě Azure Functions používají připojení založená na identitách spravovanou identitu. Ve výchozím nastavení se používá identita přiřazená systémem, i když identitu přiřazenou uživatelem je možné zadat pomocí credential
vlastností a clientID
. Mějte na paměti, že konfigurace identity přiřazené uživatelem s ID prostředku se nepodporuje . Při spuštění v jiných kontextech, jako je místní vývoj, se místo toho použije identita vývojáře, i když ji můžete přizpůsobit. Viz Místní vývoj s využitím připojení založených na identitách.
Udělení oprávnění identitě
Jakákoli identita, která se používá, musí mít oprávnění k provedení zamýšlených akcí. U většiny služeb Azure to znamená, že musíte přiřadit roli v Azure RBAC pomocí předdefinovaných nebo vlastních rolí, které tato oprávnění poskytují.
Důležité
Cílová služba může zpřístupnit některá oprávnění, která nejsou nutná pro všechny kontexty. Pokud je to možné, dodržujte zásadu nejnižších oprávnění a udělujte identitě pouze požadovaná oprávnění. Pokud například aplikace potřebuje jenom číst ze zdroje dat, použijte roli, která má oprávnění jenom ke čtení. Přiřazování role, která také umožňuje zápis do této služby, by nebylo vhodné, protože by to bylo nadměrné oprávnění pro operaci čtení. Podobně byste chtěli zajistit, aby přiřazení role mělo obor pouze na prostředky, které je potřeba číst.
Výběrem karty níže získáte informace o oprávněních pro jednotlivé komponenty:
- Rozšíření Azure Blobs
- Rozšíření Azure Queues
- Rozšíření Azure Tables
- Rozšíření Event Hubs
- Rozšíření služby Service Bus
- Rozšíření Azure Cosmos DB
- Rozšíření Azure SignalR
- Durable Functions poskytovatele úložiště
- Úložiště hostitele služby Functions (Preview)
Budete muset vytvořit přiřazení role, které zajistí přístup ke kontejneru objektů blob za běhu. Role správy, jako je vlastník , nejsou dostatečné. Následující tabulka uvádí předdefinované role, které se doporučují při normálním používání rozšíření Blob Storage. Vaše aplikace může vyžadovat další oprávnění na základě kódu, který napíšete.
Typ vazby | Příklad předdefinovaných rolí |
---|---|
Trigger | Vlastník dat v objektech blob služby StorageaPřispěvatel dat fronty úložiště1 Připojení AzureWebJobsStorage musí mít také udělená další oprávnění. 2. |
Vstupní vazba | Čtenář dat v objektech blob služby Storage |
Výstupní vazba | Vlastník dat v objektech blob služby Storage |
1 Trigger objektu blob zpracovává selhání při několika opakovaných pokusech tím, že zapisuje otravné objekty blob do fronty v účtu úložiště určeném připojením.
2 Připojení AzureWebJobsStorage se interně používá pro objekty blob a fronty, které trigger povolují. Pokud je nakonfigurované tak, aby používalo připojení založené na identitě, bude potřebovat další oprávnění nad rámec výchozího požadavku. Ty jsou kryté rolemi Vlastník dat v objektech blob služby Storage, Přispěvatel dat fronty úložiště a Přispěvatel účtu úložiště . Další informace najdete v tématu Připojení k hostitelskému úložišti pomocí identity.
Běžné vlastnosti pro připojení založená na identitách
Připojení založené na identitě pro službu Azure přijímá následující společné vlastnosti, kde <CONNECTION_NAME_PREFIX>
je hodnota vaší connection
vlastnosti v definici triggeru nebo vazby:
Vlastnost | Šablona proměnné prostředí | Description |
---|---|---|
Přihlašovací údaje tokenu | <CONNECTION_NAME_PREFIX>__credential |
Definuje způsob získání tokenu pro připojení. Doporučuje se pouze při zadávání identity přiřazené uživatelem, pokud by měla být nastavená na spravovanou identitu. Platí jenom v případě, že je hostovaný ve službě Azure Functions. |
ID klienta | <CONNECTION_NAME_PREFIX>__clientId |
Pokud credential je nastavená na managedidentity, tato vlastnost určuje identitu přiřazenou uživatelem, která se má použít při získávání tokenu. Vlastnost přijímá ID klienta odpovídající identitě přiřazené uživatelem přiřazené aplikaci. Pokud není zadána, použije se identita přiřazená systémem. Tato vlastnost se používá odlišně ve scénářích místního vývoje, kdy credential by neměla být nastavena. |
Pro daný typ připojení můžou být podporovány další možnosti. Projděte si dokumentaci k komponentě, která vytváří připojení.
Místní vývoj s využitím připojení založených na identitách
Poznámka
Místní vývoj s připojením založenými na identitách vyžaduje aktualizované verze Azure Functions Core Tools. Aktuálně nainstalovanou verzi můžete zkontrolovat spuštěním příkazu func -v
. Pro Functions v3 použijte verzi 3.0.3904
nebo novější. Pro Functions v4 použijte verzi 4.0.3904
nebo novější.
Při místním spuštění výše uvedená konfigurace říká modulu runtime, aby použil vaši místní identitu vývojáře. Připojení se pokusí získat token z následujících umístění v pořadí:
- Místní mezipaměť sdílená mezi aplikacemi Microsoftu
- Aktuální kontext uživatele v sadě Visual Studio
- Aktuální kontext uživatele v editoru Visual Studio Code
- Aktuální kontext uživatele v Azure CLI
Pokud žádná z těchto možností není úspěšná, dojde k chybě.
Vaše identita už může mít některá přiřazení rolí k prostředkům Azure používaným pro vývoj, ale tyto role nemusí poskytovat potřebný přístup k datům. Role pro správu, jako je vlastník, nejsou dostatečné. Pečlivě zkontrolujte, jaká oprávnění se vyžadují pro připojení pro jednotlivé komponenty, a ujistěte se, že je máte přiřazená sami sobě.
V některých případech můžete chtít zadat použití jiné identity. Můžete přidat vlastnosti konfigurace pro připojení, které odkazují na alternativní identitu na základě ID klienta a tajného klíče klienta pro instanční objekt Azure Active Directory. Tato možnost konfigurace není podporována, pokud je hostovaná ve službě Azure Functions. Pokud chcete použít ID a tajný kód na místním počítači, definujte připojení s následujícími dalšími vlastnostmi:
Vlastnost | Šablona proměnné prostředí | Description |
---|---|---|
ID tenanta | <CONNECTION_NAME_PREFIX>__tenantId |
ID tenanta (adresáře) Azure Active Directory. |
ID klienta | <CONNECTION_NAME_PREFIX>__clientId |
ID klienta (aplikace) registrace aplikace v tenantovi |
Tajný klíč klienta | <CONNECTION_NAME_PREFIX>__clientSecret |
Tajný klíč klienta, který se vygeneroval pro registraci aplikace. |
Tady je příklad vlastností požadovaných local.settings.json
pro připojení na základě identity k objektům blob Azure:
{
"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>"
}
}
Připojení k úložišti hostitele pomocí identity (Preview)
Hostitel Azure Functions používá připojení AzureWebJobsStorage pro základní chování, jako je koordinace jednorázového spouštění triggerů časovače a výchozího úložiště klíčů aplikace. To se dá nakonfigurovat tak, aby využívalo i identitu.
Upozornění
Ostatní komponenty ve Functions spoléhají pro výchozí chování na AzureWebJobsStorage. Pokud používáte starší verze rozšíření, která tento typ připojení nepodporují, včetně triggerů a vazeb pro objekty blob Azure, Event Hubs a Durable Functions, neměli byste ho přesunout do připojení založeného na identitě. Podobně se používá pro artefakty nasazení při použití sestavení na straně serveru ve spotřebě AzureWebJobsStorage
Linuxu. Pokud to povolíte, budete muset provést nasazení prostřednictvím externího balíčku pro nasazení.
Kromě toho některé aplikace znovu používají AzureWebJobsStorage pro jiná připojení k úložišti ve svých triggerech, vazbách nebo kódu funkce. Před změnou tohoto připojení z připojovacího řetězce se ujistěte, že všechna použití služby AzureWebJobsStorage můžou používat formát připojení založený na identitě.
Pokud chcete pro AzureWebJobsStorage použít připojení založené na identitě, nakonfigurujte následující nastavení aplikace:
Nastavení | Popis | Příklad hodnoty |
---|---|---|
AzureWebJobsStorage__blobServiceUri |
Identifikátor URI roviny dat služby Blob Service účtu úložiště pomocí schématu HTTPS | <https:// storage_account_name.blob.core.windows.net> |
AzureWebJobsStorage__queueServiceUri |
Identifikátor URI roviny dat služby fronty účtu úložiště pomocí schématu HTTPS | <https:// storage_account_name.queue.core.windows.net> |
AzureWebJobsStorage__tableServiceUri |
Identifikátor URI roviny dat table služby účtu úložiště pomocí schématu HTTPS | <https:// storage_account_name.table.core.windows.net> |
Je také možné nastavit společné vlastnosti pro připojení založená na identitě.
Pokud konfigurujete AzureWebJobsStorage pomocí účtu úložiště, který používá výchozí příponu DNS a název služby pro globální Azure, můžete místo https://<accountName>.blob/queue/file/table.core.windows.net
toho nastavit AzureWebJobsStorage__accountName
název vašeho účtu úložiště. Koncové body pro každou službu úložiště se odvozují pro tento účet. To nebude fungovat, pokud je účet úložiště v suverénním cloudu nebo má vlastní DNS.
Nastavení | Popis | Příklad hodnoty |
---|---|---|
AzureWebJobsStorage__accountName |
Název účtu úložiště platný jenom v případě, že účet není v suverénním cloudu a nemá vlastní DNS. Tato syntaxe je jedinečná pro AzureWebJobsStorage a nedá se použít pro jiná připojení založená na identitách. | <storage_account_name> |
Budete muset vytvořit přiřazení role, které za běhu poskytne přístup k účtu úložiště pro AzureWebJobsStorage. Role pro správu, jako je vlastník, nejsou dostatečné. Role Vlastník dat v objektech blob služby Storage pokrývá základní potřeby úložiště hostitele služby Functions – modul runtime potřebuje přístup ke čtení i zápisu do objektů blob a také schopnost vytvářet kontejnery. Několik rozšíření používá toto připojení jako výchozí umístění pro objekty blob, fronty a tabulky a tato použití můžou přidávat požadavky, jak je uvedeno v následující tabulce. Pokud používáte AzureWebJobsStorage pro jakékoli jiné účely, možná budete potřebovat další oprávnění.
Extension | Požadované role | Vysvětlení |
---|---|---|
Žádné rozšíření (jenom hostitel) | Vlastník dat v objektech blob služby Storage | Používá se pro obecnou koordinaci, výchozí úložiště klíčů |
Objekty blob Azure (jenom trigger) | Všechny položky z: Přispěvatel účtu úložiště Vlastník dat v objektech blob služby Storage Přispěvatel dat fronty služby Storage |
Trigger objektu blob interně používá fronty Azure a zapisuje potvrzení o objektu blob. Používá k tomu AzureWebJobsStorage bez ohledu na připojení nakonfigurované pro trigger. |
Azure Event Hubs (jenom aktivační událost) | (žádná změna oproti výchozímu požadavku) Vlastník dat v objektech blob služby Storage |
Kontrolní body se uchovávají v objektech blob pomocí připojení AzureWebJobsStorage. |
Trigger časovače | (žádná změna oproti výchozímu požadavku) Vlastník dat v objektech blob služby Storage |
Aby se zajistilo jedno spuštění pro každou událost, provádí se zámky společně s objekty blob pomocí připojení AzureWebJobsStorage. |
Odolná služba Functions | Všechny položky z: Přispěvatel dat v objektech blob služby Storage Přispěvatel dat fronty služby Storage Přispěvatel dat tabulky úložiště |
Durable Functions používá objekty blob, fronty a tabulky ke koordinaci funkcí aktivity a udržování stavu orchestrace. Ve výchozím nastavení používá připojení AzureWebJobsStorage, ale v konfiguraci rozšíření Durable Functions můžete zadat jiné připojení. |
Hlášení problémů
Položka | Popis | Odkaz |
---|---|---|
Runtime (Modul runtime) | Hostitel skriptů, vazby triggerů & , podpora jazyků | Vytvoření problému |
Šablony | Problémy s kódem při vytváření šablony | Vytvoření problému |
Portál | Problém s uživatelským rozhraním nebo prostředím | Vytvoření problému |
Další kroky
Další informace naleznete v následujících zdrojích: