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


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

Az Azure Functions segítségével anélkül csatlakoztathatja az Azure-szolgáltatásokat és más erőforrásokat a függvényekhez, 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-eseményindítók és kötések fogalmai.

Ez a cikk bemutatja, hogyan csatlakoztathatja az Azure Cosmos DB-t az előző rövid útmutatóban létrehozott függvényhez a Visual Studio Code használatával. 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, el kell végeznie a következő rövid útmutatót: 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, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.

Mielőtt hozzákezdene, el kell végeznie a következő rövid útmutatót: JavaScript-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, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.

Feljegyzés

Ez a cikk jelenleg csak a Functions Node.js v3-at támogatja.

Mielőtt hozzákezdene, el kell végeznie a rövid útmutatót: Python-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, végezze el újra a lépéseket a függvényalkalmazás és a kapcsolódó erőforrások Azure-beli újbóli létrehozásához.

A környezet konfigurálása

Mielőtt hozzákezd, telepítse a Visual Studio Code Azure Databases bővítményét .

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 erős lehetőséget biztosít az Azure Cosmos DB-nek a kiszolgáló nélküli számítási feladatokhoz.

  1. A Visual Studio Code-ban válassza a Parancskatalógus megtekintése>lehetőséget, majd a parancskatalógusban keresse meg a következőt: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
    Azure Database Server kiválasztása Válassza a Core (NoSQL) lehetőséget egy olyan dokumentumadatbázis létrehozásához, amelyet egy SQL-szintaxis vagy egy lekérdezési másodpilóta (előzetes verzió) használatával kérdezhet le, és a természetes nyelvi kéréseket lekérdezésekké konvertálja. További információ az Azure Cosmos DB-ről.
    Fióknév Adjon meg egy egyedi nevet az 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 A Kiszolgáló nélküli lehetőséget választva kiszolgáló nélküli módban hozhat létre fiókot.
    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álassza ki az Azure Cosmos DB-fiókot üzemeltetéséhez használni kívánt földrajzi helyet. Használja az Önhöz vagy a felhasználókhoz legközelebbi helyet az adatokhoz való leggyorsabb hozzáféréshez.

    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 ki az Azure ikont a Tevékenységsávon, bontsa ki az Erőforrások Azure>Cosmos DB-t, kattintson a jobb gombbal (Ctrl+select on macOS) a fiókjára, és válassza az Adatbázis létrehozása...lehetőséget.

  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 /id a partíciókulcsot.
  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ő rövid útmutatóban 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 annak kapcsolati karakterláncát az alkalmazásbeállításokhoz. Ezután töltse le az új beállítást a local.settings.json fájlba, hogy helyi futtatáskor csatlakozzon az Azure Cosmos DB-fiókjához.

  1. A Visual Studio Code-ban kattintson a jobb gombbal (a Ctrl és a választás billentyűk egyidejű lenyomásával macOS-en) az új Azure Cosmos DB-fiókon, és válassza a Kapcsolati lánc másolása opciót.

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

  2. Nyomja le az F1 billentyűt a parancskatalógus megnyitásához, majd keresse meg és futtassa a parancsotAzure 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 a másolt Azure Cosmos DB-fiók kapcsolati sztring. A Microsoft Entra-identitást alternatívaként is konfigurálhatja.

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

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

  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 sztring 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 projekt futtatása előtt telepítenie kell a megfelelő kötési bővítményt.

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álablakban az Azure Cosmos DB bővítménycsomag projekthez való hozzáadásához.

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

A projekt bővítménykötegek használatára lett konfigurálva, amely automatikusan telepíti az előre meghatározott bővítménycsomagokat.

A bővítménycsomagok használata engedélyezve van a projekt gyökerénél található host.json fájlban, amely az alábbiak szerint 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 projekt bővítménykötegek használatára lett konfigurálva, amely automatikusan telepíti az előre meghatározott bővítménycsomagokat.

A bővítménycsomagok használata engedélyezve van a projekt gyökerénél található host.json fájlban, amely az alábbiak szerint 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ését a projekthez.

Kimeneti kötés hozzáadása

Egy C#-osztálytárprojektben a kötések a függvénymetódus kötési attribútumaiként vannak definiálva.

Nyissa meg a HttpExample.cs projektfá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 HttpResponseData 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ófiók kapcsolati sztringjét a Connection tulajdonság állítja be. Ebben az esetben kihagyhatja Connection , mert már használja az alapértelmezett tárfiókot.

Az MultiResponse osztály lehetővé teszi, hogy írjon az Azure Cosmos DB megadott gyűjteményébe, és egy 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ók kapcsolati sztringjét a(z) CosmosDbConnectionString állítja be.

A kötési attribútumok közvetlenül a függvénykódban vannak definiálva. Az 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 dekorátor használatával hozzáadhat egy Azure Cosmos DB kimeneti kötést:

@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, valamint database_name azokat az adatbázis- és gyűjteményneveket, container_name amelyekre a kötés ír, valamint connection egy olyan alkalmazásbeállítás neve, amely tartalmazza az Azure Cosmos DB-fiók kapcsolati sztring, amely a CosmosDbConnectionStringlocal.settings.json fájlban található beállításban található.

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

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

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
    FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("HttpExample");
    logger.LogInformation("C# HTTP trigger function processed a request.");

    var message = "Welcome to Azure Functions!";

    var response = req.CreateResponse(HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    response.WriteString(message);

    // 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 = response
    };
}

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 a HttpExample\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.ANONYMOUS)
@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

A Visual Studio Code az Azure Functions Core-eszközökkel integrálva lehetővé teszi a projekt helyi fejlesztői számítógépen való futtatását, mielőtt közzétennénk az Azure-ban. Ha még nincs telepítve helyileg a Core Tools, a rendszer a projekt első futtatásakor kéri a telepítést.

  1. A függvény meghívásához nyomja le az F5 billentyűt a függvényalkalmazás-projekt 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.

    Képernyőkép a Visual Studio Code Helyi függvény kimenetéről.

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

  2. A Core Tools futtatásával lépjen az Azure: Functions területre. A Függvények területen bontsa ki a Helyi projekt>Függvényeket. 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....

    Képernyőkép a Visual Studio Code most végrehajtott függvényérő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 a 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 az F5 billentyűt a függvényalkalmazás-projekt és a Core Tools elindításához.

  2. A Core Tools futtatásával lépjen az Azure: Functions területre. A Függvények területen bontsa ki a Helyi projekt>Függvényeket. 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 hajtsd végre a függvényt a Visual Studio Code használatával.

  3. A kérési törzs megadásánál láthatja a kérelemüzenet törzsértékét{ "name": "Azure" }. 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. Az Azure Portalon lépjen vissza az Azure Cosmos DB-fiókjához, és válassza az Adatkezelőt.

  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.

    Annak ellenőrzése, hogy létrejött-e új dokumentum az Azure Cosmos DB-tárolóban

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 kívánt parancsot Azure Functions: Deploy to function app....

  2. Válassza ki az első cikkben létrehozott függvényalkalmazást. Mivel újra üzembe helyezi a projektet ugyanabba az alkalmazásba, válassza az Üzembe helyezés 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 az Execute Function Now... funkciót a függvény azure-beli aktiválásához.

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

Az erőforrások tisztítása

Az Azure-ban az erőforrások függvényalkalmazásokra, függvényekre, tárfiókokra és így tovább. 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 a fiók állapotától és a szolgáltatás díjszabásától függően kell fizetnie. 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 az F1 billentyűt a parancskatalógus megnyitásához. A parancskatalógusban keresse meg és válassza ki a kívánt parancsot 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 Portalon.

  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

HTTP-alapú függvényét frissítette, hogy JSON-dokumentumok írására alkalmas legyen egy Azure Cosmos DB-tárolóban. Most már többet tudhat meg a Functions Visual Studio Code-tal történő fejlesztéséről: