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:

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:

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:

Zdroj připojení Podporované plány Další informace
Triggery a vazby objektů blob Azure Vše Rozšíření Azure Blobs verze 5.0.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Triggery a vazby front Azure Vše Rozšíření Azure Queues verze 5.0.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Tabulky Azure (při použití služby Azure Storage) Vše Rozšíření Azure Tables verze 1.0.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Azure Event Hubs triggerů a vazeb Vše Azure Event Hubs rozšíření verze 5.0.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Azure Service Bus triggerů a vazeb Vše Azure Service Bus verze rozšíření 5.0.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Triggery a vazby služby Azure Cosmos DB Vše Rozšíření Azure Cosmos DB verze 4.0.0 nebo novější
Sada rozšíření 4.0.2 nebo novější
Triggery a vazby Azure SignalR Vše Rozšíření Azure SignalR verze 1.7.0 nebo novější
Sada rozšíření 3.6.1 nebo novější
Durable Functions poskytovatel úložiště (Azure Storage) Vše Durable Functions verze rozšíření 2.7.0 nebo novější
Rozšiřující sada 3.3.0 nebo novější
Úložiště požadované hostitelem (AzureWebJobsStorage) – Preview Vše Připojení k hostitelskému úložišti pomocí identity

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:

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: