Egyszerű Azure-függvény helyi létrehozása és tesztelése a Visual Studióval

Befejeződött

A felhasználók az Azure Portalról írhatnak, hibakeresést és üzembe helyezhetnek egy Azure-függvényt. Előfordulhat azonban, hogy a függvények közvetlenül éles, előkészítési vagy tesztelési környezetben való írása nem megfelelő. Például automatizált egységteszteket írhat az Azure Functionshez, vagy az Azure Functions igény szerinti üzembe helyezését használhatja az Azure Functions-alkalmazásokban az Azure-ban. A fejlesztők általában az Azure Portal által biztosított környezet helyett inkább kódszerkesztőt és fejlesztőeszközöket használnak. A Visual Studio lehetővé teszi az Azure Functions-kód fejlesztését és kezelését más kódokkal és szolgáltatásokkal egyetlen projektben.

Az online luxusóra forgatókönyvében a fejlesztők már ismerik a Visual Studio 2022-t. Ezért dönt úgy, hogy az Azure-függvények létrehozásához a Visual Studiót használja elsődleges fejlesztőkörnyezetként. A Visual Studio ezen felül a függvények Azure-beli üzembe helyezése előtt végzett helyi teszteléshez is kitűnő környezetet biztosít.

Ebben a leckében megtanulhatja, hogyan használhatja a Visual Studióban elérhető eszközöket az Azure-függvények helyi számítógépen való létrehozásához és teszteléséhez.

Fontos

Ez a cikk támogatja a futtatókörnyezettel folyamatban futó .NET-osztálytárfüggvényeket. A C#-függvények folyamaton kívül is elfogyhatnak, és elkülöníthetők a Functions-futtatókörnyezettől. Az izolált feldolgozói folyamatmodell az egyetlen mód a .NET nem LTS-verzióinak futtatására, és .NET-keretrendszer alkalmazások futtatására a Functions-futtatókörnyezet aktuális verzióiban. További információ: .NET izolált feldolgozói folyamatfüggvények.

A Visual Studio telepítésének módosítása

Először állítsuk be a Visual Studiót a fejlesztési környezethez szükséges webes és felhőalapú eszközökkel.

  1. Ha a Visual Studio 2022 helyileg van telepítve, nyissa meg a Visual Studio Installert, és a Visual Studio Community 2022-ben válassza a Módosítás lehetőséget.

    Képernyőkép a Visual Studio Installerről, kiemelt Módosítás paranccsal.

  2. Megnyílik a Módosítás – Visual Studio oldal.

    Képernyőkép a Visual Studio Community 2022 számítási feladatainak módosításáról, kiemelt ASP.NET, webfejlesztéssel és Azure-fejlesztéssel.

  3. A Számítási feladatok lapon jelölje be a ASP.NET és a webfejlesztés, valamint az Azure-fejlesztési jelölőnégyzeteket, majd válassza a Módosítás lehetőséget.

  4. Az ellenőrzési párbeszédpanelen válassza az Igen lehetőséget. Megjelenik a Visual Studio Installer oldala, amely megjeleníti a telepített csomagok állapotát.

Azure Functions Tools-bővítmény a Visual Studióhoz

Az Azure Functions Tools egy Visual Studio-bővítmény, amely lehetővé teszi az Azure Functions helyi fejlesztési környezetben való létrehozását, tesztelését és üzembe helyezését. Az új Azure-függvényalkalmazás gyors létrehozásához ez a bővítmény egy sablont biztosít, amellyel közvetlenül a Visual Studióból hozhat létre és helyezhet üzembe egy függvényt az Azure-ban.

Az Azure Functions és a Web Jobs Tools bővítmény a Visual Studio 2022 része.

Azure-függvényalkalmazás

Egy függvényalkalmazás egy vagy több függvényt üzemeltet. Ez biztosítja a függvénykód környezetét és futtatókörnyezetét.

A függvényeket egy esemény aktiválja, nem pedig közvetlenül egy alkalmazásból. Megadhatja, hogy milyen típusú esemény aktiválja az egyes függvényeket az Azure-függvényalkalmazásban. A rendelkezésre álló események többek között a következők:

  • Blobalapú eseményindító. Ez a függvénytípus akkor fut, amikor fájlt töltenek fel vagy módosítanak egy Azure-blobtárolóban.
  • Eseményközpont-eseményindító. Az Event Hubs-eseményindítók akkor futtatják a függvényt, amikor egy eseményközpont üzenetet kap.
  • Azure Cosmos DB-eseményindító. Ez az eseményindító akkor fut, amikor egy dokumentumot hozzáadnak vagy módosítanak egy Azure Cosmos DB-adatbázisban. Ez az eseményindító használható az Azure Cosmos DB más szolgáltatásokkal való integrálására. Ha például egy ügyfél megrendeléséhez tartozó dokumentumot adnak az adatbázishoz, az eseményindító használatával egy feldolgozási sorba küldheti a megrendelés egy másolatát.
  • HTTP-eseményindító. A HTTP-eseményindítók akkor futtatják a függvényt, amikor HTTP-kérés keletkezik egy webalkalmazásban. Ez az eseményindító a webhookra való reagáláshoz is felhasználható. A webhookok visszahívások, amelyek akkor keletkeznek, ha egy webhelyen üzemeltetett elemet módosítanak. Létrehozhat például egy webhook által aktivált függvényt egy GitHub-adattárból, amikor az adattár egy eleme megváltozik.
  • Üzenetsor-eseményindító. Ez az eseményindító elindítja a függvényt, amikor új elemet ad hozzá egy Azure Storage-üzenetsorhoz.
  • Service Bus-üzenetsor eseményindító. Ez az eseményindító futtatja a függvényt, amikor új elemet ad hozzá egy Azure Service Bus-üzenetsorhoz.
  • Service Bus-témakör eseményindító. Ez az eseményindító egy Service Bus-témakörbe érkező új üzenetre reagálva futtatja a függvényt.
  • Időzítő-eseményindító. Ez az esemény rendszeres időközönként futtatja a függvényt egy ön által meghatározott ütemezés szerint.

Képernyőkép az elérhető Azure Functions-eseményindítókról, a HTTP-eseményindító kiemelésével.

Az alábbi táblázat a .NET Core vagy .NET-keretrendszer legmagasabb szintjét mutatja be, amelyet a Functions adott verziójával használhat.

Functions futtatókörnyezet verziója Folyamatban Izolált feldolgozói folyamat
Functions 4.x .NET 6.0 .NET 6.0
.NET 7.0
.NET 8.0
.NET-keretrendszer 4.8
Functions 1.x .NET-keretrendszer 4.8 n.a.

Az Azure-függvényalkalmazások felügyeleti információkat, kódot és naplókat tárolnak az Azure Storage-ban. Az adatok tárolásához létre kell hoznia egy tárfiókot. A tárfióknak támogatnia kell az Azure-blobok, üzenetsorok, fájlok és táblák tárolását; erre a célra használjon általános Azure Storage-fiókot. A függvényhez használandó tárfiókot a fenti párbeszédpanel használatával adhatja meg.

A függvények jogosultsági vagy bizalmas műveleteket hajthatnak végre. Egy HTTP-kérés által aktivált függvény nyilvánosan is közzétehető. Egy ilyen függvény futtatásának lehetőségét érdemes a kijelölt csoportokra vagy felhasználókra korlátozni. A függvények védelméhez meg kell adnia a függvény aktiválásához szükséges hozzáférési jogosultságokat. A HTTP-kérések által aktivált függvények három hozzáférési jogosultsági szintet támogatnak:

  • Névtelen. Hitelesítés nem szükséges, a függvényt bármelyik felhasználó aktiválhatja.
  • Function. A HTTP-kérésnek meg kell adnia egy kulcsot, amellyel az Azure-függvény futtatókörnyezete hitelesíteni tudja a kérést. Ezt a kulcsot külön hozhatja létre, és az Azure Portal használatával tudja kezelni.
  • Rendszergazda. Hasonló a függvényhez. A felhasználónak meg kell adnia egy kulcsot a függvényt aktiváló HTTP-kéréssel. A különbség az, hogy ez egy rendszergazdai kulcs. Ez a kulcs a függvényalkalmazás bármelyik függvényének eléréséhez felhasználható. A függvénykulcsokhoz hasonlóan ezt a kulcsot is külön hozhatja létre.

Ha a HTTP-kéréseken kívül más eseménnyel aktivált függvényt hoz létre, akkor meg kell adnia egy kapcsolati sztringet és minden más információt, amelyek birtokában a függvényalkalmazás hozzáférhet az eseményt aktiváló erőforráshoz. Ha például egy Blob Storage-esemény által aktivált függvényt ír, meg kell adnia a megfelelő Blob Storage-fiók kapcsolati sztring.

Egy Azure-függvény struktúrája

Az Azure-függvények statikus osztályként vannak implementálva. Az osztály biztosít egy Run nevű statikus, aszinkron metódust, amely az osztály belépési pontjakét szolgál.

Az eseményindító értelmezési környezetét a Run metódusnak átadott paraméterek határozzák meg. Http-eseményindító esetén a függvény egy HttpRequest objektumot kap. Ez az objektum tartalmazza a kérés fejlécét és törzsét. A kérés adataihoz a bármely HTTP-alkalmazásban rendelkezésre álló technikákkal férhet hozzá. A függvényre alkalmazott attribútumok meghatározzák az engedélyezési követelményeket (ebben az esetben névtelen ), valamint azokat a HTTP-műveleteket, amelyekre a függvény válaszol (GET és POST).

A Visual Studio által létrehozott alábbi kód példája megvizsgálja a kérés URL-címének részeként megadott lekérdezési sztringet, és egy név nevű paramétert keres. A kód egy StreamReaderrel is deszerializálja a kérés törzsét, és megpróbálja beolvasni a kérelemből a névnek is nevezett tulajdonság értékét. Ha a név a lekérdezési sztringben vagy a kérelem törzsében található, a rendszer a válaszban adja vissza a névértéket . Ellenkező esetben a függvény hibaüzenetet hoz létre a következő üzenettel: Adjon nevet a lekérdezési sztringnek vagy a kérelem törzsének.

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");
    }
}

A függvény egy IActionResult objektumba csomagolt kimeneti adatokat és eredményeket tartalmazó értéket ad vissza. Az érték a kérésre adott HTTP-válasz törzsében lesz visszaadva.

A különböző típusú eseményindítók különböző bemeneti paramétereket és visszatérési típusokat kapnak. A következő példa egy blob-eseményindítóhoz generált kódot mutat be. Ebben a példában a blob tartalma egy Stream-objektumon keresztül lesz visszaadva, és a blob neve is meg van adva. Az eseményindító nem ad vissza adatokat; célja az adatok olvasása és feldolgozása a nevesített blobban.

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");
    }
}

A függvények minden esetben átadnak egy ILogger-paramétert. A függvény ezt a paramétert használhatja naplóüzenetek írására, amelyeket a függvényalkalmazás a tárolóba ír későbbi elemzés céljából.

A függvények metaadatokat is tartalmaznak, amelyek meghatározzák az eseményindító típusát, a biztonsági követelményeket és az egyéb konkrét információkövetelményeket. A metaadatokat a HttpTrigger, a BlobTrigger vagy más triggerattribútumok használatával módosíthatja, ahogyan az a példákban is látható. A függvényt megelőző FunctionName attribútum a függvényalkalmazás által használt függvény azonosítója. Ennek a névnek nem kell megegyeznie a függvény nevével, de a félreértések elkerülése érdekében ajánlott szinkronban kezelni őket.

Azure-függvényalkalmazás helyi tesztelése

A Visual Debugger használatával helyileg hozhat létre és tesztelhet Egy Azure-függvényalkalmazást. A hibakereső elindításához nyomja le az F5 billentyűt, vagy a Hibakeresés menüben válassza a Hibakeresés indítása lehetőséget. Elindul a függvény futtatókörnyezetének helyi verziója. A függvények teszteléshez érhetők el. A példa a Függvény1 futtatókörnyezetet mutatja be, amely egy HTTP-esemény által aktivált függvény. Az URL-cím adja meg azt a végpontot, amelyhez a függvény éppen csatlakozik.

Képernyőkép az Azure Function Runtime-ról – 1. példa.

Ha megnyit egy webböngészőt, és megnyitja ezt az URL-címet, aktiválja a függvényt. Az alábbi ábrán egy törzs nélküli HTTP GET-kérésre generált válasz látható. A BadRequestObjectResult objektumot a függvényből visszaadó kód által létrehozott üzenet jelenik meg.

Az Azure-függvény futtatókörnyezetének képernyőképe.

Ha megad egy névparamétert tartalmazó lekérdezési sztringet, a függvény beolvassa és feldolgozza az értéket.

Képernyőkép az Azure Function Runtime-ról – 2. példa.

Amíg a kód fut, a függvény futtatókörnyezet ablakában nyomkövetési üzenetek jelennek meg. A Visual Studio szokásos hibakeresési funkcióinak használatával töréspontokat állíthat be, és figyelemmel kísérheti a függvény folyamatvezérlését.