Kurz: Začínáme s Azure Functions

V tomto cvičení se dozvíte, jak začít s vytvářením Azure Functions pomocí Visual Studio pro Mac. Integrujete se také s tabulkami úložiště Azure, které představují jeden z mnoha druhů vazeb a triggerů dostupných Azure Functions vývojářům.

Cíle

  • Vytvoření a ladění místních Azure Functions
  • Integrace s webovými prostředky a prostředky úložiště Azure
  • Orchestrace pracovního postupu zahrnujícího více Azure Functions

Požadavky

  • Visual Studio pro Mac 7.5 nebo novější.
  • Předplatné Azure (dostupné zdarma z https://azure.com/free webu ).

Cvičení 1: Vytvoření Azure Functions projektu

  1. Spusťte Visual Studio pro Mac.

  2. Vyberte Soubor > Nové řešení.

  3. V kategorii Cloud > Obecné vyberte šablonu Azure Functions cloudu. Pomocí jazyka C# vytvoříte knihovnu tříd .NET, která je hostitelem Azure Functions. Klikněte na Next (Další).

    výběr šablony azure functions

  4. Nastavte Project název na "AzureFunctionsLab" a klikněte na Vytvořit.

    pojmenování a vytvoření projektu azure function

  5. Rozbalte uzly v okně Řešení. Výchozí šablona projektu obsahuje NuGet na celou řadu balíčků Azure WebJobs a také na balíček Newtonsoft.Json.

    Existují také tři soubory: – host.json pro popis možností globální konfigurace hostitele – local.settings.json pro konfiguraci nastavení služby. – Šablona projektu také vytvoří výchozí httptrigger. V rámci tohoto cvičení byste měli z projektu odstranit soubor HttpTrigger.cs.

    Otevřete soubor local.settings.json. Ve výchozím nastavení má dvě prázdná nastavení připojovacího řetězce.

    Okno řešení zobrazující soubor local.settings.json

Cvičení 2: Vytvoření účtu úložiště Azure

  1. Přihlaste se ke svému účtu Azure na adrese https://portal.azure.com .

  2. V části Oblíbené v levé části obrazovky vyberte Přidat Storage účty:

    Část oblíbených položek Azure Portal zobrazující položku účtů úložiště

  3. Vyberte Přidat a vytvořte nový účet úložiště:

    Tlačítko pro přidání nového účtu úložiště

  4. Zadejte globálně jedinečný název pro název a znovu ho použijte pro skupinu prostředků. Všechny ostatní položky můžete ponechat jako výchozí.

    Podrobnosti o novém účtu úložiště

  5. Klikněte na Vytvořit. Vytvoření účtu úložiště může trvat několik minut. Po úspěšném vytvoření se zobrazí oznámení.

    Oznámení o úspěšném nasazení

  6. V oznámení vyberte tlačítko Přejít k prostředku.

  7. Vyberte kartu Přístupové klíče.

    nastavení přístupového klíče

  8. Zkopírujte první připojovací řetězec. Tento řetězec se používá k integraci úložiště Azure s Azure Functions později.

    informace o klíči 1

  9. Vraťte Visual Studio pro Mac a vložte celý připojovací řetězec jako nastavení AzureWebJobsStorage v souboru local.settings.json. Nyní můžete odkazovat na název nastavení v atributech pro funkce, které potřebují přístup k jeho prostředkům.

    Soubor místního nastavení se zadaným klíčem připojení

Příklad 3: Vytvoření a ladění funkce Azure

  1. Teď můžete začít přidávat kód. Při práci s knihovnou tříd .NET se Azure Functions jako statické metody. V okně Řešení klikněte pravým tlačítkem na uzel projektu AzureFunctions a vyberte Přidat > Přidat funkci:

    Přidání možnosti funkce

  2. V dialogovém Azure Functions nový webhook vyberte šablonu Obecný webhook. Nastavte Název na Přidat a kliknutím na OK vytvořte funkci:

    Dialogové okno Nové funkce Azure Functions

  3. Na začátek nového souboru přidejte direktivy using níže:

    using Microsoft.Azure.WebJobs.Extensions.Http;
    using System.Web;
    using Microsoft.WindowsAzure.Storage.Table;
    
  4. Odeberte existující Run metodu a přidejte následující metodu do třídy jako funkci Azure:

    [FunctionName("Add")]
    public static int Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
    HttpRequestMessage req,
    TraceWriter log)
    {
        int x = 1;
        int y = 2;
    
        return x + y;
    }
    
  5. Pojďme si definici metody projít po kousku.

    První věc, kterou uvidíte, je atribut FunctionName, který tuto metodu označuje jako funkci Azure. Atribut určuje veřejný název funkce. Název atributu nemusí odpovídat skutečnému názvu metody.

    Nová metoda spuštění se zvýrazněnou atributem FunctionName

  6. Dále je metoda označena jako veřejná statická metoda, která je povinná. Všimněte si také, že návratovou hodnotou je int. Pokud není pomocí atributů metody uvedeno jinak, vrátí se klientovi jakákoli návratová hodnota funkce Azure, která není void, jako text. Ve výchozím nastavení se vrátí jako XML, ale můžete ho změnit na JSON, což později v testovacím prostředí.

    Nová metoda spuštění se zvýrazněnou inicializací metody

  7. První parametr je označen atributem HttpTrigger, který označuje, že tato metoda je vyvolána požadavkem HTTP. Atribut také určuje úroveň autorizace metody a také příkazy, které podporuje (v tomto případě pouze "GET"). Volitelně můžete také definovat trasu, která přepíše cestu k metodě a nabízí způsob, jak automaticky extrahovat proměnné z cesty. Vzhledem k tomu, že je zde trasa null, cesta k této metodě bude ve výchozím nastavení /api/Add.

    Nová metoda spuštění se zvýrazněnou parametrem

  8. Posledním parametrem metody je TraceWriter, který lze použít k protokolování zpráv pro diagnostiku a chyby.

    Nová metoda spuštění se zvýrazněnou třídy TraceWriter

  9. Nastavte zarážku na návratový řádek metody kliknutím na okraj řádku:

    Zarážka nastavená na návratový řádek

  10. Sestavte a spusťte projekt v ladicí relaci stisknutím klávesy F5 nebo výběrem možnosti > spustit ladění. Případně můžete kliknout na tlačítko Spustit. Všechny tyto možnosti provádějí stejnou úlohu. Zbývající část tohoto cvičení odkazuje na F5, ale můžete použít metodu, která vám bude nejpohodlnější.

    Sestavení a spuštění projektu

  11. Spuštěním projektu se automaticky otevře aplikace Terminal.

  12. Projekt prochází procesem detekce Azure Functions na základě atributů metody a konvence souborů, která je probádá dále v tomto článku. V tomto případě detekuje jednu funkci Azure a "vygeneruje" 1 funkci úlohy.

    Výstup funkce Azure v terminálu

  13. V dolní části zpráv po spuštění vytiskne hostitel Azure Functions adresy URL všech rozhraní API triggeru HTTP. Měl by tam být jenom jeden. Zkopírujte tuto adresu URL a vložte ji na novou kartu prohlížeče.

    Azure Function API URL

  14. Zarážka by se měla aktivovat okamžitě. Webový požadavek byl směrován do funkce a je teď možné ho ladit. Když na proměnnou x nasádáte myší, zobrazí se její hodnota.

    Aktivované zarážky

  15. Odeberte zarážku pomocí stejné metody, jako jste použili dříve (klikněte na okraj nebo vyberte řádek a stiskněte klávesu F9).

  16. Pokračujte stisknutím klávesy F5.

  17. V prohlížeči se vykreslí výsledek XML metody . Podle očekávání vytvoří pevně zakódovaná operace sčítání možné součet. Všimněte si, že pokud v Safari vidíte pouze "3", přejděte na safari > předvolby > Upřesnit a zapište stránku v nabídce Zobrazit vývoj na řádku nabídek a znovu ji načtěte.

  18. v Visual Studio pro Mac kliknutím na tlačítko zastavit ukončete ladicí relaci. Chcete-li zajistit, aby byly nové změny vyzvednuty, nezapomeňte restartovat (zastavit a poté spustit) relaci ladění.

    Zastavit možnost ladění

  19. V metodě Run nahraďte definice x a y následujícím kódem. Tento kód extrahuje hodnoty z řetězce dotazu adresy URL tak, aby operace sčítání mohla být provedena dynamicky na základě zadaných parametrů.

    var query = HttpUtility.ParseQueryString(req.RequestUri.Query);
    
    int x = int.Parse(query["x"]);
    
    int y = int.Parse(query["y"]);
    
    return x + y;
    
  20. Spusťte aplikaci.

  21. Vraťte se do okna prohlížeče a přidejte řetězec /?x=2&y=3 k adrese URL. Celá adresa URL by teď měla být http://localhost:7071/api/Add?x=2&y=3 . Přejděte na novou adresu URL.

  22. Tentokrát by výsledek měl odrážet nové parametry. Bez obav spusťte projekt s různými hodnotami. Počítejte s tím, že není k dispozici žádná kontrola chyb, takže neplatné nebo chybějící parametry způsobí vyvolání chyby.

  23. Zastavte ladicí relaci.

Cvičení 4: práce s funkcí Function. JSON

  1. v dřívějším cvičení bylo zmíněno Visual Studio pro Mac "vygenerované" funkce úlohy pro funkci Azure, která je definována v knihovně. Důvodem je to, že Azure Functions ve skutečnosti nepoužívají atributy metody za běhu, ale místo toho používá konvenci systému souborů při kompilaci ke konfiguraci, kde a jakým způsobem Azure Functions k dispozici. V okně řešení klikněte pravým tlačítkem myši na uzel projektu a vyberte možnost Zobrazit ve Finderu.

    Zobrazit ve Finderu – možnost nabídky

  2. Přejděte dolů do systému souborů, dokud nedosáhnete přihrádky/ladění/netstandard 2.0. Měla by existovat složka s názvem Add. Tato složka byla vytvořena tak, aby odpovídala atributu názvu funkce v kódu jazyka C#. Rozbalte složku přidat a vykryjte jeden soubor Function. JSON . Tento soubor používá modul runtime k hostování a správě funkce Azure Functions. Pro jiné jazykové modely bez podpory při kompilaci (například skript C# nebo JavaScript) je nutné tyto složky ručně vytvořit a spravovat. Pro vývojáře v jazyce C# jsou automaticky generovány z metadat atributu při sestavení. Klikněte pravým tlačítkem na Function. JSON a výběrem ho otevřete v Visual Studio.

    Function. JSON v adresáři souborů

  3. V předchozích krocích tohoto kurzu byste měli mít základní znalosti atributů C#. Tento kód JSON by měl brát v úvahu. Existuje však několik položek, které nebyly pokryty v předchozích cvičeních. Například každá vazba musí mít svou směrovou sadu. Jak je možné odvodit, "in" znamená, že parametr je Input, zatímco "out" označuje, že parametr je buď návratovou hodnotou (prostřednictvím $return), nebo výstupním parametrem metody. Také je nutné zadat scriptFile (vzhledem k tomuto konečnému umístění) a metodu EntryPoint (Public a static) v rámci sestavení. V několika dalších krocích přidáte vlastní cestu funkce pomocí tohoto modelu, takže zkopírujete obsah tohoto souboru do schránky.

    soubor Function. JSON, který je otevřen v aplikaci Visual Studio pro Mac

  4. V okně řešení klikněte pravým tlačítkem myši na uzel projektu AzureFunctionsLab a vyberte Přidat > nová složka. Pojmenujte nové přidávání složek. Ve výchozím nastavení určuje název této složky cestu k rozhraní API, jako je například rozhraní API nebo přidávání.

    Možnost nové složky

  5. Klikněte pravým tlačítkem na složku pro přidávání a vyberte Přidat > nový soubor.

    Možnost Nový soubor

  6. Vyberte kategorii Web a prázdnou šablonu souboru JSON . Nastavte název na funkce a klikněte na Nový.

    Empty – možnost souboru JSON

  7. Vložte obsah druhého souboru Function. JSON (z kroku 3) do a nahraďte výchozí obsah nově vytvořeného souboru.

  8. Z horní části souboru JSON odeberte následující řádky:

    "configurationSource":"attributes",
    "generatedBy":"Microsoft.NET.Sdk.Functions-1.0.13",
    
  9. Na konci první vazby (po řádku "Name": "REQ" ) přidejte níže uvedené vlastnosti. Nezapomeňte na předchozí řádek vložit čárku. Tato vlastnost přepisuje výchozí kořen tak, že bude nyní extrahovat parametry typu int z cesty a umístit je do parametrů metody, které jsou pojmenovány x a y.

    "direction": "in",
    "route": "Adder/{x:int?}/{y:int?}"
    
  10. Přidejte další vazbu pod první. Tato vazba zpracovává vrácenou hodnotu funkce. Nezapomeňte na předchozí řádek vložit čárku:

    {
    "name": "$return",
    "type": "http",
    "direction": "out"
    }
    
  11. Aktualizujte také vlastnost EntryPoint v dolní části souboru tak, aby používala metodu nazvanou "Add2", například níže. To ukazuje, že rozhraní API pro cestu a přizpůsobování ... se může namapovat na odpovídající metodu s libovolným názvem (Add2 ).

    "entryPoint": "<project-name>.<function-class-name>.Add2"
    
  12. Konečný soubor Function. JSON by měl vypadat jako následující JSON:

    {
    "bindings": [
        {
        "type": "httpTrigger",
        "methods": [
            "get"
        ],
        "authLevel": "function",
        "direction": "in",
        "name": "req",
        "route": "Adder/{x:int?}/{y:int?}"
        },
        {
        "name": "$return",
        "type": "http",
        "direction": "out"
        }
    ],
    "disabled": false,
    "scriptFile": "../bin/AzureFunctionsProject.dll",
    "entryPoint": "AzureFunctionsProject.Add.Add2"
    }
    
  13. v posledním kroku, který je potřeba k tomu, aby všechno fungovalo, je dát Visual Studio pro Mac zkopírovat tento soubor do stejné relativní cesty ve výstupním adresáři pokaždé, když se změní. Když je vybraný soubor, zvolte kartu vlastnosti z pravého panelu a pro Kopírovat do výstupního adresáře vyberte Kopírovat, pokud je novější:

    Možnosti vlastností souboru JSON

  14. V direktivě Add. cs nahraďte Run metodu (včetně atributu) následující metodou pro splnění očekávané funkce. Je velmi podobný jako s Run tím rozdílem, že nepoužívá žádné atributy a má explicitní parametry pro x a y.

    public static int Add2(
        HttpRequestMessage req,
        int x,
        int y,
        TraceWriter log)
    {
        return x + y;
    }
    
  15. Stisknutím klávesy F5 Sestavte a spusťte projekt.

  16. Vzhledem k tomu, že sestavení se dokončí a platforma se číselníkem, nyní bude znamenat, že je k dispozici Druhá trasa pro požadavky, které se mapují na nově přidanou metodu:

    Adresa URL pro funkce http

  17. Vraťte okno prohlížeče a přejděte na adresu http://localhost:7071/api/Adder/3/5 .

  18. Tentokrát metoda znovu funguje, načítat parametry z cesty a vyprodukuje součet.

  19. vraťte se do Visual Studio pro Mac a ukončete relaci ladění.

Cvičení 5: práce s tabulkami služby Azure Storage

Služba, kterou sestavíte, může být často mnohem složitější než ta, kterou jsme zatím sestavili, a vyžádat si značné množství času a/nebo infrastruktury, která se má spustit. V takovém případě může být vhodné přijmout žádosti, které jsou zařazeny do fronty ke zpracování, když budou prostředky k dispozici, což Azure Functions poskytuje podporu pro. V jiných případech budete chtít data ukládat centrálně. Azure Storage tabulky vám to umožní rychle.

  1. Přidejte třídu níže a přidejte. cs. Měl by jít dovnitř oboru názvů, ale mimo stávající třídu.

    public class TableRow : TableEntity
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int Sum { get; set; }
    }
    
  2. V rámci Přidat třídu přidejte následující kód, aby bylo možné zavést další funkci. Všimněte si, že toto je jedinečné, zatím v tom, že nezahrnuje odpověď HTTP. Poslední řádek vrátí nové TableRow vyplněné s některými klíčovými informacemi, které usnadňují pozdější načtení (PartitionKey a RowKey) a také jeho parametry a součet. Kód v rámci metody také používá TraceWriter k tomu, aby bylo snazší zjistit, kdy se funkce spouští.

    [FunctionName("Process")]
    [return: Table("Results")]
    public static TableRow Process(
        [HttpTrigger(AuthorizationLevel.Function, "get",
            Route = "Process/{x:int}/{y:int}")]
        HttpRequestMessage req,
        int x,
        int y,
        TraceWriter log)
    {
        log.Info($"Processing {x} + {y}");
    
        return new TableRow()
        {
            PartitionKey = "sums",
            RowKey = $"{x}_{y}",
            X = x,
            Y = y,
            Sum = x + y
        };
    }
    
  3. Stisknutím klávesy F5 Sestavte a spusťte projekt.

  4. Na kartě prohlížeč přejděte na http://localhost:7071/api/Process/4/6 . Tím se do fronty vloží další zpráva, která by nakonec měla vést k přidání dalšího řádku do tabulky.

  5. Vraťte se do terminálu a sledujte příchozí požadavek na 4 + 6.

    Výstup terminálu ukazující žádost o přidání

  6. Vraťte se do prohlížeče, aby se žádost aktualizovala na stejnou adresu URL. Tentokrát se po metodě procesu zobrazí chyba. důvodem je to, že při pokusu o přidání řádku do tabulky Azure Table Storage se používá kombinace klíče oddílu a řádku, která již existuje.

    System.Private.CoreLib: Exception while executing function: Process. Microsoft.Azure.WebJobs.Host: Error while handling parameter $return after function returned:. Microsoft.Azure.WebJobs.Host: The specified entity already exists.
    
  7. Ukončete ladicí relaci.

  8. Chcete-li tuto chybu zmírnit, přidejte následující parametr do definice metody bezprostředně před parametr TraceWriter . Tento parametr instruuje Azure Functions platformu k pokusu o načtení TableRow z tabulky výsledků na PartitionKey , kterou jsme použili k uložení výsledků. Nicméně když si všimnete, že se RowKey dynamicky generuje na základě dalších parametrů x a y pro velmi stejnou metodu, přijdete o reálné rozhraní Magic. Pokud tento řádek již existuje, tableRow ho bude mít, když bude metoda začínat bez další práce, kterou vývojář vyžaduje. Pokud řádek neexistuje, bude mít pouze hodnotu null. Tento druh efektivity umožňuje vývojářům soustředit se na důležitou obchodní logiku a ne na infrastrukturu.

    [Table("Results", "sums", "{x}_{y}")]
    TableRow tableRow,
    
  9. Přidejte následující kód na začátek metody. Pokud tableRow nemá hodnotu null, pak už máme výsledky pro požadovanou operaci a hned ho můžou vrátit. V opačném případě funkce pokračuje stejně jako dřív. I když to nemusí být nejspolehlivější způsob, jak vracet data, ukazuje to, že můžete neuvěřitelně sofistikované operace napříč několika škálovatelnými úrovněmi s velmi malým kódem.

    if (tableRow != null)
    {
        log.Info($"{x} + {y} already exists");
        return null;
    }
    
  10. Stisknutím klávesy F5 Sestavte a spusťte projekt.

  11. Na kartě prohlížeč Aktualizujte adresu URL na adrese http://localhost:7071/api/Process/4/6 . Vzhledem k tomu, že řádek tabulky pro tento záznam existuje, měl by vracet okamžitě a bez chyby. Vzhledem k tomu, že neexistuje žádný výstup HTTP, můžete zobrazit výstup v terminálu.

    Výstup terminálu ukazující, že řádek tabulky již existuje

  12. Aktualizujte adresu URL tak, aby odrážela kombinaci, která ještě není testována, například http://localhost:7071/api/Process/5/7 . Poznamenejte si zprávu v terminálu, která indikuje, že se řádek tabulky nenašel (podle očekávání).

    Výstup terminálu ukazující nový proces

  13. vraťte se do Visual Studio pro Mac a ukončete relaci ladění.

Souhrn

v tomto testovacím prostředí jste se naučili, jak začít sestavovat Azure Functions s využitím Visual Studio pro Mac.