Megosztás a következőn keresztül:


Azure Functions csatlakoztatása Azure Cosmos DB-hez Visual Studio Code használatával

Azure Functions lehetővé teszi Azure szolgáltatások és egyéb erőforrások függvényekhez való csatlakoztatását anélkül, hogy saját integrációs kódot kellene írnia. Ezek a kötések, amelyek mind a bemenetet, mind a kimenetet képviselik, a függvénydefinícióban deklarálódnak. A kötések adatai a függvények számára paraméterekként vannak megadva. Az eseményindító egy speciális típusú bemeneti kötés. Bár egy függvénynek csak egy eseményindítója van, több bemeneti és kimeneti kötéssel is rendelkezhet. További információ: Azure Functions triggerek és hozzárendelések fogalmai.

Ez a cikk bemutatja, hogyan csatlakoztathatja a Visual Studio Code-ot Azure Cosmos DB az előző rövid útmutatóban létrehozott függvényhez. A függvényhez hozzáadott kimeneti kötés adatokat ír a HTTP-kérelemből egy Azure Cosmos DB-tárolóban tárolt JSON-dokumentumba.

Mielőtt hozzákezdene, be kell fejeznie a gyors kezdést: C# függvény létrehozása az Azure-ban a Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, ismételje meg a lépéseket a Azure-ban a funkcióalkalmazás és a kapcsolódó erőforrások újra létrehozásához.

A kezdés előtt be kell fejeznie a quickstart: JavaScript-függvény létrehozása Azure Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, ismételje meg a lépéseket a Azure-ban a funkcióalkalmazás és a kapcsolódó erőforrások újra létrehozásához.

Feljegyzés

Ez a cikk támogatja Node.js v4 for Functionst.

Mielőtt hozzákezdene, be kell fejeznie a quickstart: Python-függvény létrehozása Azure Visual Studio Code használatával. Ha a cikk végén már megtisztította az erőforrásokat, ismételje meg a lépéseket a Azure-ban a funkcióalkalmazás és a kapcsolódó erőforrások újra létrehozásához.

A környezet konfigurálása

Mielőtt elkezdené, telepítse a Azure Databases bővítményt a Visual Studio Code-hoz.

A Azure Cosmos DB-fiók létrehozása

Most létrehoz egy Azure Cosmos DB-fiókot kiszolgáló nélküli fióktípusként. Ez a használatalapú mód a Azure Cosmos DB-t erőssé teszi a kiszolgáló nélküli számítási feladatokhoz.

  1. A Visual Studio Code-ban válassza a View>Command Palette... majd a parancskatalógusban keresse meg a Azure Databases: Create Server...

  2. Amikor a rendszer kéri, adja meg az alábbi információkat:

    Felszólítás Kiválasztás
    A Azure adatbázis-kiszolgáló kijelölése Válassza a Core (NoSQL) lehetőséget egy olyan dokumentumadatbázis létrehozásához, amelyet SQL-szintaxis vagy lekérdezési asszisztens (Preview) használatával, amely a természetes nyelvi utasításokat lekérdezésekké alakítja, kérdezhet le. Tudjon meg többet a(z) Azure Cosmos DB-ről.
    Fióknév Adjon meg egy egyedi nevet a Azure Cosmos DB-fiók azonosításához. A fióknév csak kisbetűket, számokat és kötőjeleket (-) használhat, és 3 és 31 karakter közötti hosszúságúnak kell lennie.
    Kapacitásmodell kiválasztása Válassza a Kiszolgáló nélküli lehetőséget a fiók létrehozásához kiszolgáló nélküli módban.
    Erőforráscsoport kiválasztása új erőforrásokhoz Válassza ki azt az erőforráscsoportot, amelyben létrehozta a függvényalkalmazást az előző cikkben.
    Új erőforrások helyének kiválasztása Válasszon ki egy földrajzi helyet a Azure Cosmos DB-fiók üzemeltetéséhez. Használja az Önhöz vagy a felhasználókhoz legközelebbi helyet az adatok leggyorsabb access eléréséhez.

    Az új fiók kiépítése után egy üzenet jelenik meg az értesítési területen.

Azure Cosmos DB-adatbázis és -tároló létrehozása

  1. Válassza a Azure ikont a Tevékenységsávon, bontsa ki a Forrás>Azure Cosmos DB, kattintson a jobb gombbal (Ctrl+select on macOS) a fiókjára, és válassza a Adatbázis létrehozása... .

  2. Amikor a rendszer kéri, adja meg az alábbi információkat:

    Felszólítás Kiválasztás
    Adatbázis neve Gépelje be: my-database.
    Adjon meg egy azonosítót a gyűjteményéhez Gépelje be: my-container.
    Adja meg a gyűjtemény partíciókulcsát Írja be a /idpartíciós kulcs értékét.
  3. Kattintson az OK gombra a tároló és az adatbázis létrehozásához.

A függvényalkalmazás beállításainak frissítése

Az előző gyorsbejegyzésben létrehozott egy függvényalkalmazást az Azure-ban. Ebben a cikkben úgy frissíti az alkalmazást, hogy JSON-dokumentumokat írjon a létrehozott Azure Cosmos DB-tárolóba. Az Azure Cosmos DB-fiókhoz való csatlakozáshoz hozzá kell adnia a kapcsolati karakterláncot az alkalmazásbeállításokhoz. Ezután letölti az új beállítást a local.settings.json fájlba, hogy helyi futtatáskor csatlakozzon a Azure Cosmos DB-fiókjához.

  1. A Visual Studio Code-ban kattintson a jobb egérgombbal (macOS-en használja a Ctrl+select kombinációt) az új Azure Cosmos DB-fiókon, majd válassza a Copy Connection String lehetőséget.

    Az Azure Cosmos DB kapcsolati karakterlánc másolása

  2. Nyomja le a F1 billentyűt a parancspaletta megnyitásához, majd keresse meg és futtassa a parancsot Azure Functions: Add New Setting....

  3. Válassza ki az előző cikkben létrehozott függvényalkalmazást. Amikor a rendszer kéri, adja meg az alábbi információkat:

    Felszólítás Kiválasztás
    Új alkalmazásbeállítás nevének megadása Gépelje be: CosmosDbConnectionString.
    Adja meg a "CosmosDbConnectionString" értékét Illessze be az Azure Cosmos DB-fiókból másolt kapcsolati láncot. A Microsoft Entra-identitást alternatívaként is konfigurálhatja.

    Ezzel létrehoz egy alkalmazásbeállítást kapcsolat CosmosDbConnectionString néven az Azure-ban a függvényalkalmazásban. Most letöltheti ezt a beállítást a local.settings.json fájlba.

  4. Nyomja le ismét a F1 billentyűt a parancspaletta megnyitásához, majd keresse meg és futtassa a Azure Functions: Download Remote Settings... parancsot.

  5. Válassza ki az előző cikkben létrehozott függvényalkalmazást. Az Igen elemet választva felülírhatja a meglévő helyi beállításokat.

Ez letölti az összes beállítást az Azure-ból a helyi projektbe, beleértve az új kapcsolati karakterlánc beállítást is. A letöltött beállítások többsége nem használható helyi futtatáskor.

Kötési bővítmények regisztrálása

Mivel Azure Cosmos DB kimeneti kötést használ, a project futtatása előtt telepítenie kell a megfelelő kötések bővítményét.

A HTTP- és időzítő-eseményindítók kivételével a kötések bővítménycsomagként vannak implementálva. Futtassa a következő dotnet add package parancsot a Terminál ablakban az Azure Cosmos DB bővítménycsomag projektbe való hozzáadásához.

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB

A project extension-csomagok használatára lett konfigurálva, amely automatikusan telepíti az előre definiált bővítménycsomagokat.

A bővítménycsomagok használata engedélyezve van a host.json fájlban a project gyökerénél, amely a következőképpen jelenik meg:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  },
  "concurrency": {
    "dynamicConcurrencyEnabled": true,
    "snapshotPersistenceEnabled": true
  },
  "extensions": {
    "cosmosDB": {
      "connectionMode": "Gateway"
    }
  }
}

A project extension-csomagok használatára lett konfigurálva, amely automatikusan telepíti az előre definiált bővítménycsomagokat.

A bővítménycsomagok használata engedélyezve van a host.json fájlban a project gyökerénél, amely a következőképpen jelenik meg:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)"
  } 
}

Most hozzáadhatja az Azure Cosmos DB kimeneti kötést a projekthez.

Kimeneti kötés hozzáadása

Egy C# osztálykönyvtár projektben a kötéseket a függvény metódus kötési attribútumaiként definiálják.

Nyissa meg a HttpExample.cs project fájlt, és adja hozzá a következő osztályokat:

public class MultiResponse
{
    [CosmosDBOutput("my-database", "my-container",
        Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
    public MyDocument Document { get; set; }
    public IActionResult HttpResponse { get; set; }
}
public class MyDocument {
    public string id { get; set; }
    public string message { get; set; }
}

Az MyDocument osztály definiál egy objektumot, amely az adatbázisba lesz beírva. A tárolási fiók kapcsolat karakterláncát a Connection tulajdonság állítja be. Ebben az esetben kihagyhatja Connection, mert már használja az alapértelmezett storage fiókot.

A MultiResponse osztály lehetővé teszi, hogy a Azure Cosmos DB megadott gyűjteményébe írjon, és http-sikerüzenetet adjon vissza. Mivel vissza kell adnia egy MultiResponse objektumot, frissítenie kell a metódus aláírását is.

Bizonyos attribútumok határozzák meg a tároló nevét és a szülőadatbázis nevét. Az Azure Cosmos DB-fiókhoz tartozó kapcsolati karakterláncot a CosmosDbConnectionString állítja be.

A kötési attribútumok közvetlenül a függvénykódban vannak definiálva. A Azure Cosmos DB kimeneti konfigurációja az Azure Cosmos DB kimeneti kötéséhez szükséges mezőket ismerteti.

Ebben a MultiResponse forgatókönyvben kimeneti kötést extraOutputs kell hozzáadnia a függvényhez.

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  extraOutputs: [sendToCosmosDb],
  handler: async (request, context) => {

Adja hozzá a következő tulajdonságokat a kötéskonfigurációhoz:

const sendToCosmosDb = output.cosmosDB({
  databaseName: 'my-database',
  containerName: 'my-container',
  createIfNotExists: false,
  connection: 'CosmosDBConnectionString',
});

A kötési attribútumok közvetlenül a function_app.py fájlban vannak definiálva. A cosmos_db_output dekoratőr használatával Azure Cosmos DB kimeneti kötést adhat hozzá:

@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", 
    container_name="my-container", connection="CosmosDbConnectionString")

Ebben a kódban arg_name azonosítja a kódban hivatkozott kötési paramétert, database_name és container_name a kötés által írt adatbázis- és gyűjteménynevek, és connection egy olyan alkalmazásbeállítás neve, amely tartalmazza a Azure Cosmos DB-fiók connection string, amely a CosmosDbConnectionString fájl beállításában található.

Kimeneti kötést használó kód hozzáadása

Cserélje le a meglévő Run metódust a következő kódra:

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    var message = "Welcome to Azure Functions!";

    // Return a response to both HTTP trigger and Azure Cosmos DB output binding.
    return new MultiResponse()
    {
        Document = new MyDocument
        {
            id = System.Guid.NewGuid().ToString(),
            message = message
        },
        HttpResponse = new OkObjectResult(message)
    };
}

Adjon hozzá egy kódot, amely a extraInputs kimeneti kötési objektumot context használja, hogy JSON-dokumentumot küldjön a nevesített kimeneti kötési függvénynek. sendToCosmosDb Adja hozzá ezt a kódot az return utasítás előtt.

context.extraOutputs.set(sendToCosmosDb, {
  // create a random ID
  id:
    new Date().toISOString() + Math.random().toString().substring(2, 10),
  name: name,
});

Ezen a ponton a függvénynek a következőképpen kell kinéznie:

const { app, output } = require('@azure/functions');

const sendToCosmosDb = output.cosmosDB({
  databaseName: 'my-database',
  containerName: 'my-container',
  createIfNotExists: false,
  connection: 'CosmosDBConnectionString',
});

app.http('HttpExampleToCosmosDB', {
  methods: ['GET', 'POST'],
  extraOutputs: [sendToCosmosDb],
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());

      if (!name) {
        return { status: 404, body: 'Missing required data' };
      }

      // Output to Database
      context.extraOutputs.set(sendToCosmosDb, {
        // create a random ID
        id:
          new Date().toISOString() + Math.random().toString().substring(2, 10),
        name: name,
      });

      const responseMessage = name
        ? 'Hello, ' +
          name +
          '. This HTTP triggered function executed successfully.'
        : 'This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.';

      // Return to HTTP client
      return { body: responseMessage };
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

Ez a kód most egy MultiResponse olyan objektumot ad vissza, amely dokumentumot és HTTP-választ is tartalmaz.

Frissítse function_app.py az alábbi kódnak megfelelően. Adja hozzá a paramétert outputDocument a függvénydefinícióhoz és outputDocument.set() az if name: utasítás alatt:

import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionString")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
    outputDocument: func.Out[func.Document]) -> func.HttpResponse:
     logging.info('Python HTTP trigger function processed a request.')
     logging.info('Python Cosmos DB trigger function processed a request.')
     name = req.params.get('name')
     if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

     if name:
        outputDocument.set(func.Document.from_dict({"id": name}))
        msg.set(name)
        return func.HttpResponse(f"Hello {name}!")
     else:
        return func.HttpResponse(
                    "Please pass a name on the query string or in the request body",
                    status_code=400
                )

A dokumentum {"id": "name"} a kötésben megadott adatbázis-gyűjteményben jön létre.

Függvény helyi futtatása

Visual Studio Code integrálódik az Azure Functions Core-eszközökkel, hogy még az Azure-ba való közzététel előtt futtathassa a projektet a helyi fejlesztői számítógépén. Ha még nincs telepítve helyileg a Core Tools, a rendszer a project első futtatásakor kéri a telepítést.

  1. A függvény meghívásához nyomja le a F5 billentyűt a függvényalkalmazás project elindításához. A Terminál panelen a Core Tools kimenete látható. Az alkalmazás a Terminál panelen kezdődik. Megtekintheti a helyben futó, HTTP által aktivált függvény URL-végpontját.

     A Helyi függvény képernyőképe Visual Studio Code output.

    Ha még nincs telepítve a Core Tools, válassza az Install lehetőséget a Core Tools telepítéséhez, amikor a rendszer kéri erre.
    Ha problémákat tapasztal a Windows rendszeren való futtatás során, győződjön meg arról, hogy a Visual Studio Code alapértelmezett terminálja nincs beállítva WSL Bash.

  2. A Core Tools futtatásával lépjen a Azure: Függvények területre. A Functions területen bontsa ki a Local Project>Functions elemet. Kattintson a jobb gombbal (Windows) vagy Ctrl billentyűkombinációra – kattintson a függvényre (macOS), és válassza a HttpExample Függvény végrehajtása parancsot....

    A Végrehajtási függvény jelenlegi képernyőképe a Visual Studio Code-ból.

  3. A Kérelem törzse mezőben nyomja meg az Enter billentyűt, hogy egy kérésüzenetet küldjön a függvényhez.

  4. Amikor a függvény helyileg fut, és választ ad vissza, a rendszer értesítést küld Visual Studio Code-ban. A függvény végrehajtásával kapcsolatos információk a Terminál panelen jelennek meg.

  5. Nyomja le a Ctrl + C billentyűkombinációt a Core Tools leállításához és a hibakereső leválasztásához.

Függvény helyi futtatása

  1. Az előző cikkhez hasonlóan nyomja le a F5 billentyűt a függvényalkalmazás project és a Core Tools elindításához.

  2. A Core Tools futtatásával lépjen a Azure: Functions területre. A Functions területen bontsa ki a Local Project>Functions elemet. Kattintson a jobb gombbal a HttpExample függvényre (Macen tartsa lenyomva a Ctrl billentyűt, és kattintson), majd válassza a Függvény végrehajtása most... lehetőséget.

    Most hajtsa végre a függvényt a Visual Studio Code-ban

  3. A Kérelem törzsének megadása részben láthatod a { "name": "Azure" } kérelem törzsértékét. Az Enter billentyűt lenyomva küldje el ezt a kérésüzenetet a függvénynek.

  4. A válasz visszaadása után nyomja le a Ctrl + C billentyűkombinációt a Core Tools leállításához.

JSON-dokumentum létrehozásának ellenőrzése

  1. A Azure portal go back a Azure Cosmos DB-fiókjához, és válassza a Data Explorer lehetőséget.

  2. Bontsa ki az adatbázist és a tárolót, és válassza az Elemek lehetőséget a tárolóban létrehozott dokumentumok listázásához.

  3. Ellenőrizze, hogy a kimeneti kötés létrehozott-e új JSON-dokumentumot.

    Az Azure Cosmos DB-tárolóban ellenőrizzük, hogy létrejött-e egy új dokumentum.

A frissített alkalmazás ismételt üzembe helyezése és ellenőrzése

  1. A Visual Studio Code-ban nyomja le az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a Azure Functions: Deploy to function app....

  2. Válassza ki az első cikkben létrehozott függvényalkalmazást. Mivel újratelepíti a projektet ugyanarra az alkalmazásra, válassza a Deploy lehetőséget a fájlok felülírására vonatkozó figyelmeztetés elvetéséhez.

  3. Az üzembe helyezés befejezése után ismét használhatja a Függvény végrehajtása most... lehetőséget, hogy aktiválja a függvényt az Azure-ban. Ez a parancs automatikusan lekéri a függvényhozzáférési kulcsot, és azt a HTTP-triggerelő végponton történő híváskor használja.

  4. Ismét ellenőrizze az Azure Cosmos DB-tárolóban létrehozott dokumentumokat annak igazolására, hogy a kimeneti kötés ismét létrehoz új JSON-dokumentumot.

Az erőforrások tisztítása

A Azure resources függvényalkalmazásokra, függvényekre, storage fiókokra stb. hivatkozik. Ezek erőforráscsoportokba vannak csoportosítva, és a csoport törlésével törölheti a csoport összes elemét.

Ezeknek a gyors kezdési útmutatóknak az elvégzéséhez erőforrásokat hoztál létre. Előfordulhat, hogy ezekért az erőforrásokért számlázást kap, a fiók állapotától és a szolgáltatás díjszabásától függően. Ha már nincs szüksége ezekre az erőforrásokra, a következőképpen törölheti őket:

  1. A Visual Studio Code-ban nyomja le a F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a Azure: Open in portal.

  2. Válassza ki a függvényalkalmazást, és nyomja le az Enter billentyűt. Megnyílik a függvényalkalmazás lapja az Azure portal.

  3. Az Áttekintés lapon válassza az Erőforráscsoport melletti elnevezett hivatkozást.

    Képernyőkép a függvényalkalmazás oldaláról törölni kívánt erőforráscsoport kiválasztásáról.

  4. Az Erőforráscsoport lapon tekintse át a belefoglalt erőforrások listáját, és ellenőrizze, hogy ezek-e törölni kívánt erőforrások.

  5. Válassza az Erőforráscsoport törlése elemet, majd kövesse az utasításokat.

    A törlés eltarthat néhány percig. Amint a művelet befejeződött, néhány másodpercre egy értesítés jelenik meg. Az értesítést úgy is megtekintheti, ha kiválasztja a harang ikont az oldal tetején.

Következő lépések

Frissítette a HTTP-triggerelt függvényt, hogy JSON dokumentumokat írjon egy Azure Cosmos DB-tárolóba. Most már többet is megtudhat a Functions Visual Studio Code használatával történő fejlesztéséről: