Vytvoření a otestování jednoduché funkce Azure Functions místně pomocí sady Visual Studio

Dokončeno

Uživatelé můžou psát, ladit a nasazovat funkci Azure Functions z webu Azure Portal. Zápis funkcí přímo v produkčním, přípravném nebo testovacím prostředí však nemusí být vhodný. Například psaní automatizovaných testů jednotek pro Azure Functions nebo použití nasazení Azure Functions na vyžádání do aplikací function v Azure. Vývojáři obvykle raději používají editor kódu a vývojové nástroje než prostředí poskytované webem Azure Portal. Visual Studio umožňuje vyvíjet a spravovat kód Azure Functions pomocí jiného kódu a služeb v jednom projektu.

Ve scénáři online luxusních hodinek už vývojáři znají Visual Studio 2022. Rozhodnete se tedy použít Visual Studio jako primární vývojové prostředí pro vytváření funkcí Azure Functions. Sada Visual Studio také nabízí skvělé prostředí pro místní testování funkcí před jejich nasazením do Azure.

V této lekci se naučíte používat nástroje dostupné v sadě Visual Studio pro sestavování a testování funkce Azure Functions na místním počítači.

Důležité

Tento článek podporuje funkce knihovny tříd .NET, které běží v procesu s modulem runtime. Funkce jazyka C# můžou také běžet mimo proces a izolovat od modulu runtime Služby Functions. Model izolovaného pracovního procesu je jediným způsobem, jak v aktuálních verzích modulu runtime Functions spouštět jiné verze než LTS aplikací .NET a .NET Framework. Další informace najdete v tématu Funkce izolovaného pracovního procesu .NET.

Změna instalace sady Visual Studio

Nejprve nastavíme Visual Studio s webovými a cloudovými nástroji, které potřebujete pro vaše vývojové prostředí.

  1. V místně nainstalovaném sadě Visual Studio 2022 otevřete Instalační program pro Visual Studio a v sadě Visual Studio Community 2022 vyberte Upravit.

    Snímek obrazovky Instalační program pro Visual Studio se zvýrazněnou možností Upravit

  2. Zobrazí se stránka Upravuje se – Visual Studio.

    Snímek obrazovky s kartou Úpravy úloh Visual Studio Community 2022 se zvýrazněnou ASP.NET a vývojem pro web a vývojem pro Azure

  3. Na kartě Úlohy zaškrtněte políčka ASP.NET a vývoj pro web a vývoj pro Azure a pak vyberte Upravit.

  4. V dialogovém okně ověření vyberte Ano. Zobrazí se stránka Instalační program pro Visual Studio a zobrazí průběh instalace balíčků.

Rozšíření Azure Functions Tools pro Visual Studio

Azure Functions Tools je rozšíření sady Visual Studio, které umožňuje vytvářet, testovat a nasazovat azure Functions ve vašem místním vývojovém prostředí. Pokud chcete rychle vytvořit novou aplikaci Funkcí Azure, poskytuje toto rozšíření šablonu pro sestavení a nasazení funkce přímo do Azure ze sady Visual Studio.

Rozšíření Azure Functions a Web Jobs Tools je součástí sady Visual Studio 2022.

Aplikace funkcí Azure

Aplikace funkcí hostuje jednu nebo více funkcí. Poskytuje prostředí a modul runtime pro kód funkce.

Funkce se aktivuje událostí, a nevolá se přímo z aplikace. Zadáte typ události, která aktivuje každou funkci v aplikaci Funkcí Azure. Máte k dispozici tyto události:

  • Trigger objektu blob: Tento typ funkce se spustí, když se v Azure Blob Storage nahraje nebo změní soubor.
  • Trigger Centra událostí: Trigger služby Event Hubs spustí funkci, když centrum událostí obdrží zprávu.
  • Trigger služby Azure Cosmos DB: Tento trigger se spustí při přidání dokumentu do databáze Azure Cosmos DB nebo jeho úpravě. Pomocí tohoto triggeru můžete službu Azure Cosmos DB integrovat s jinými službami. Pokud se například dokument představující objednávku zákazníka přidá do databáze, můžete použít trigger k odeslání kopie objednávky do fronty ke zpracování.
  • Trigger HTTP: Trigger HTTP spustí funkci, když ve webové aplikaci dojde k požadavku HTTP. Tento trigger můžete využít také k poskytování odpovědí webhookům. Webhook je zpětné volání, k němuž dojde, když se změní položka hostovaná webem. Funkci aktivovanou webhookem můžete například vytvořit z úložiště GitHub, když se změní položka v úložišti.
  • Trigger fronty: Tato aktivační událost spustí funkci při přidání nové položky do fronty služby Azure Storage.
  • Trigger fronty služby Service Bus: Tato aktivační událost spustí funkci při přidání nové položky do fronty služby Azure Service Bus.
  • Trigger tématu služby Service Bus: Tento trigger spouští funkci v odpovědi na novou zprávu přijatou k tématu služby Service Bus.
  • Trigger časovače: Tato událost spouští funkci v pravidelných intervalech podle plánu, který definujete.

Snímek obrazovky s dostupnými triggery služby Azure Functions se zvýrazněným triggerem HTTP

Následující tabulka ukazuje nejvyšší úroveň rozhraní .NET Core nebo .NET Framework, kterou můžete použít s konkrétní verzí funkcí.

Verze modulu runtime služby Functions Vnitroprocesové Izolovaný pracovní proces
Funkce 4.x .NET 6.0 .NET 6.0
.NET 7.0
.NET 8.0
.NET Framework 4.8
Functions 1.x .NET Framework 4.8 Není k dispozici

Aplikace funkcí Azure ukládá informace o správě, kód a protokoly v úložišti Azure. Pokud chcete tato data uchovávat, vytvoříte účet úložiště. Účet úložiště musí podporovat Azure Blob, Queue, Files a Table Storage; pro tento účel použijte obecný účet služby Azure Storage. V dříve zobrazeném dialogovém okně zadáte účet úložiště, který chcete pro funkci použít.

Funkce může provádět privilegované nebo citlivé operace. Funkci aktivovanou požadavkem HTTP může být veřejně zpřístupněna. Možná budete muset omezit možnost spouštění této funkce na vybrané skupiny nebo uživatele. Funkci chráníte zadáním přístupových práv potřebných k aktivaci funkce. Funkce aktivovaná požadavkem HTTP podporuje tři úrovně přístupových práv:

  • Anonymní. Nevyžaduje se žádné ověřování a funkci může spustit kdokoli.
  • Funkce. Požadavek HTTP musí poskytnout klíč, který modulu runtime funkce Azure Functions umožní požadavek autorizovat. Tento klíč vytvoříte samostatně a můžete ho udržovat na webu Azure Portal.
  • Správa. Podobá se funkci. Uživatel musí zadat klíč s požadavkem HTTP, který funkci aktivuje. Rozdíl spočívá v tom, že tento klíč je klíčem správce. Pomocí tohoto klíče je možné přistupovat k jakékoli funkci v aplikaci funkcí. Stejně jako u klíče Funkce vytvoříte i tento klíč samostatně.

Pokud vytváříte funkci aktivovanou jinými událostmi, než jsou požadavky HTTP, musíte zadat připojovací řetězec a další podrobnosti, aby aplikace funkcí mohla použít prostředek, který událost aktivuje. Pokud například píšete funkci aktivovanou událostí Blob Storage, musíte zadat připojovací řetězec pro odpovídající účet Blob Storage.

Struktura funkce Azure Functions

Funkce Azure Functions se implementuje jako statická třída. Třída poskytuje statickou asynchronní metodu s názvem Run, která slouží jako vstupní bod dané třídy.

Parametry předávané do metody Run poskytují kontext pro trigger. Pokud se jedná o trigger HTTP, funkce obdrží objekt HttpRequest . Tento objekt obsahuje hlavičku a tělo požadavku. K datům v požadavku máte přístup pomocí stejných metod, které jsou dostupné v libovolné aplikaci HTTP. Atributy použité u této funkce určují požadavky na autorizaci (v tomto případě anonymní ) a operace HTTP, na které funkce reaguje (GET a POST).

Následující příklad kódu vygenerovaný sadou Visual Studio prozkoumá řetězec dotazu zadaný jako součást adresy URL požadavku a vyhledá parametr s názvem name. Kód také používá StreamReader deserializovat tělo požadavku a pokusí se přečíst hodnotu vlastnosti také volaný název z požadavku. Pokud se název nachází v řetězci dotazu nebo textu požadavku, vrátí se v odpovědi hodnota názvu . V opačném případě funkce vygeneruje chybovou odpověď se zprávou: Předejte název v řetězci dotazu nebo v textu požadavku.

public static class Function1
{
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}

Funkce vrátí hodnotu obsahující výstupní data a výsledky zabalené do objektu IActionResult . Hodnota se vrátí v těle odpovědi požadavku HTTP.

Různé typy triggerů přijímají různé vstupní parametry a návratové typy. Další příklad ukazuje kód vygenerovaný pro trigger objektu blob. V tomto příkladu se obsah objektu blob vrátí prostřednictvím objektu Stream a zobrazí se také název objektu blob. Trigger nevrací žádná data; jejím účelem je číst a zpracovávat data v pojmenovaném objektu blob.

public static class Function2
{
    [FunctionName("Function2")]
    public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "xxxxxxxxxxxxxxxxxxxxxxx")]Stream myBlob, string name, ILogger log)
    {
        log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    }
}

Ve všech případech se funkci předá parametr ILogger . Tato funkce může tento parametr použít k zápisu zpráv protokolu, které aplikace funkcí zapisuje do úložiště pro pozdější analýzu.

Funkce obsahuje také metadata, která určují typ triggeru, požadavky na zabezpečení a všechny další specifické požadavky na informace. Metadata můžete upravit pomocí atributu HttpTrigger, BlobTrigger nebo jiných atributů triggeru, jak je znázorněno v příkladech. Atribut FunctionName , který předchází funkci, je identifikátor funkce používané aplikací funkcí. Tento název nemusí být stejný jako název funkce, ale je vhodné mít názvy synchronizované, abyste se vyhnuli nejasnostem.

Místní testování aplikace Funkcí Azure

Visual Debugger můžete použít k místnímu sestavení a otestování aplikace Funkcí Azure. Ladicí program spustíte stisknutím klávesy F5 nebo v nabídce Ladění vyberte Spustit ladění. Spustí se místní verze modulu runtime funkce. Vaše funkce jsou k dispozici pro testování. Příklad ukazuje modul runtime hostující funkci Function1, což je funkce aktivovaná událostí HTTP. Adresa URL označuje koncový bod, ke kterému je funkce momentálně připojena.

Snímek obrazovky znázorňující modul runtime služby Azure Functions – příklad 1

Pokud otevřete webový prohlížeč a navštívíte tuto adresu URL, aktivujete funkci. Na následujícím obrázku je znázorněna odpověď vygenerovaná požadavkem HTTP GET, který nezahrnuje tělo. Můžete vidět zprávu vygenerovanou kódem, který vrací BadRequestObjectResult objekt z funkce.

Snímek obrazovky s modulem runtime služby Azure Functions

Pokud zadáte řetězec dotazu, který obsahuje parametr názvu , funkce přečte a zpracuje hodnotu.

Snímek obrazovky znázorňující modul runtime funkce Azure – příklad 2

V době, kdy je kód spuštěný, se v okně modulu runtime funkce zobrazí zprávy trasování. Pokud chcete nastavit zarážky a prozkoumat tok ovládacího prvku ve funkci, můžete použít standardní ladicí funkce v sadě Visual Studio.