Sdílet prostřednictvím


Připojení Azure Functions k Azure Cosmos DB pomocí Visual Studio Code

Azure Functions umožňuje připojit Azure služby a další prostředky k funkcím, aniž byste museli psát vlastní integrační kód. Tyto vazby, které představují vstup i výstup, jsou deklarovány v rámci definice funkce. Data z vazeb má funkce k dispozici jako parametry. Trigger je speciální typ vstupní vazby. I když má funkce pouze jeden trigger, může mít více vstupních a výstupních vazeb. Další informace najdete v tématu Azure Functions koncepty triggerů a vazeb.

V tomto článku se dozvíte, jak pomocí kódu Visual Studio připojit Azure Cosmos DB k funkci, kterou jste vytvořili v předchozím článku rychlého startu. Výstupní vazba, kterou do této funkce přidáte, zapisuje data z požadavku HTTP do dokumentu JSON uloženého v kontejneru Azure Cosmos DB.

Než začnete, musíte dokončit funkci quickstart: Vytvoření funkce jazyka C# v Azure pomocí Visual Studio Code. Pokud jste už na konci toho článku vyčistili prostředky, zopakujte kroky a znovu vytvořte funkční aplikaci a s ní související prostředky v Azure.

Než začnete, musíte dokončit quickstart: Vytvoření funkce JavaScriptu v Azure pomocí Visual Studio Code. Pokud jste už vyčistili prostředky uvedené na konci tohoto článku, projděte si kroky znovu, abyste znovu vytvořili aplikační funkce a související prostředky v Azure.

Poznámka:

Tento článek podporuje Node.js v4 pro funkce.

Než začnete, musíte dokončit quickstart: Vytvoření funkce Pythonu v Azure pomocí Visual Studio Code. Pokud jste už na konci tohoto článku vyčistili prostředky, projděte si kroky znovu a vytvořte aplikaci Function a související prostředky v Azure.

Konfigurujte své prostředí

Než get started, nezapomeňte nainstalovat rozšíření Azure Databases pro Visual Studio Code.

Vytvoření účtu Azure Cosmos DB

Nyní vytvoříte účet Azure Cosmos DB jako bezserverový typ účtu . Díky tomuto režimu založenému na spotřebě je Azure Cosmos DB silnou možností pro bezserverové úlohy.

  1. V Visual Studio Code vyberte View>Command Palette... pak na paletě příkazů vyhledejte Azure Databases: Create Server...

  2. Podle pokynů na obrazovce zadejte tyto informace:

    Podnět Výběr
    Vyberte databázový server Azure Zvolte Core (NoSQL) a vytvořte databázi dokumentů, kterou můžete dotazovat pomocí syntaxe SQL nebo nástroje Query Copilot (Preview), který převádí výzvy v přirozeném jazyce na dotazy. Vyučte další informace o Azure Cosmos DB.
    Název účtu Zadejte jedinečný název pro identifikaci Azure účtu služby Cosmos DB. Název účtu může používat jenom malá písmena, číslice a pomlčky (-) a musí mít délku 3 až 31 znaků.
    Výběr modelu kapacity Vyberte Serverless a vytvořte účet v režimu serverless.
    Výběr skupiny prostředků pro nové prostředky Zvolte skupinu prostředků, ve které jste vytvořili aplikaci funkcí v předchozím článku.
    Výběr umístění pro nové prostředky Vyberte geografické umístění pro váš účet Azure Cosmos DB. Použijte umístění, které je vám nebo vašim uživatelům nejblíže, abyste získali nejrychlejší access k vašim datům.

    Po zřízení nového účtu se v oznamovací oblasti zobrazí zpráva.

Vytvoření databáze a kontejneru Azure Cosmos DB

  1. Na panelu aktivit vyberte ikonu Azure, rozbalte Zdroje>Azure Cosmos DB, klikněte pravým tlačítkem (Ctrl+vyberte v macOS) svůj účet a vyberte Vytvořit databázi... .

  2. Podle pokynů na obrazovce zadejte tyto informace:

    Podnět Výběr
    Název databáze Zadejte my-database.
    Zadejte ID vaší kolekce. Zadejte my-container.
    Zadejte klíč oddílu pro kolekci. Zadejte /id jako klíč partition.
  3. Vyberte OK a vytvořte kontejner a databázi.

Aktualizace nastavení aplikace funkcí

V článku previous quickstart jste vytvořili aplikaci funkcí v Azure. V tomto článku aktualizujete aplikaci tak, aby zapisuje dokumenty JSON do kontejneru Azure Cosmos DB, který jste vytvořili. Pokud se chcete připojit ke svému účtu Azure Cosmos DB, musíte do nastavení aplikace přidat jeho connection string. Potom si nové nastavení stáhnete do souboru local.settings.json, abyste se mohli připojit ke svému účtu Azure Cosmos DB při místním spuštění.

  1. Ve Visual Studio Code klikněte pravým tlačítkem (Ctrl+kliknutím na macOS) na váš nový účet Azure Cosmos DB a vyberte Zkopírovat připojovací řetězec.

    Kopírování připojovacího řetězce Azure Cosmos DB

  2. Stisknutím klávesy F1 otevřete paletu příkazů a pak vyhledejte a spusťte příkaz Azure Functions: Add New Setting....

  3. Zvolte aplikaci funkcí, kterou jste vytvořili v předchozím článku. Podle pokynů na obrazovce zadejte tyto informace:

    Podnět Výběr
    Zadejte název nového nastavení aplikace. Zadejte CosmosDbConnectionString.
    Zadejte hodnotu pro CosmosDbConnectionString. Vložte připojovací řetězec účtu služby Azure Cosmos DB, který jste zkopírovali. Identitu Microsoft Entra můžete také nakonfigurovat jako alternativu.

    Tím se vytvoří nastavení aplikace s názvem připojení CosmosDbConnectionString ve funkční aplikaci v Azure. Teď si toto nastavení můžete stáhnout do souboru local.settings.json.

  4. Znovu stiskněte F1 otevřete paletu příkazů a pak vyhledejte a spusťte příkaz Azure Functions: Download Remote Settings....

  5. Zvolte aplikaci funkcí, kterou jste vytvořili v předchozím článku. Chcete-li přepsat stávající místní nastavení, vyberte Ano na vše.

Tím se stáhnou všechna nastavení z Azure do místního projektu, včetně nového nastavení připojovacího řetězce. Většina stažených nastavení se při místním spuštění nepoužívá.

Registrace rozšíření propojení

Vzhledem k tomu, že používáte výstupní vazbu Azure Cosmos DB, musíte mít před spuštěním project nainstalované odpovídající rozšíření vazeb.

Kromě triggerů HTTP a časovačů se vazby implementují jako rozšiřující balíčky. Spuštěním následujícího příkazu dotnet add package v okně terminálu přidejte balíček rozšíření Azure Cosmos DB do project.

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

Vaše project je nakonfigurovaná tak, aby používala extension bundles, která automaticky nainstaluje předdefinovanou sadu balíčků rozšíření.

Využití sad rozšíření je povolené v souboru host.json v kořenovém adresáři project, který se zobrazí takto:

{
  "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"
    }
  }
}

Vaše project je nakonfigurovaná tak, aby používala extension bundles, která automaticky nainstaluje předdefinovanou sadu balíčků rozšíření.

Využití sad rozšíření je povolené v souboru host.json v kořenovém adresáři project, který se zobrazí takto:

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

Teď můžete do project přidat výstupní vazbu Azure Cosmos DB.

Přidejte výstupní vazbu

V knihovně tříd jazyka C# project jsou vazby definovány jako atributy vazby v metodě funkce.

Otevřete soubor HttpExample.cs project a přidejte následující třídy:

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

Třída MyDocument definuje objekt, který se zapíše do databáze. Connection string pro účet Storage je nastavena vlastností Connection. V tomto případě byste mohli vynechat Connection, protože už používáte výchozí účet storage.

Třída MultiResponse umožňuje zapisovat do zadané kolekce v Azure Cosmos DB a vrátit zprávu o úspěchu protokolu HTTP. Protože potřebujete vrátit MultiResponse objekt, musíte také aktualizovat podpis metody.

Konkrétní atributy určují název kontejneru a název nadřazené databáze. Připojovací řetězec pro váš účet Azure Cosmos DB nastaví CosmosDbConnectionString.

Atributy vazby jsou definovány přímo v kódu funkce. Konfigurace výstupu Azure Cosmos DB popisuje pole požadovaná pro vazbu na výstup Azure Cosmos DB.

V tomto MultiResponse scénáři je potřeba do funkce přidat extraOutputs výstupní vazbu.

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

Do konfigurace vazby přidejte následující vlastnosti:

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

Atributy vazby jsou definovány přímo v souboru function_app.py . Pomocí dekorátoru cosmos_db_output přidáte výstupní vazbu Azure Cosmos DB:

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

V tomto kódu arg_name identifikuje parametr vazby odkazovaný v kódu. database_name a container_name jsou názvy databází a kolekcí, do kterých se vazba zapisuje, a connection je název nastavení aplikace, které obsahuje connection string pro účet Azure Cosmos DB, který je v nastavení CosmosDbConnectionString v souboru local.settings.json.

Přidání kódu, který používá výstupní vazbu

Nahraďte existující Run metodu následujícím kódem:

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

Přidejte kód, který používá objekt výstupní vazby extraInputs na context k odeslání dokumentu JSON do pojmenované funkce výstupní vazby sendToCosmosDb. Přidejte tento kód před return příkaz.

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

V tomto okamžiku by vaše funkce měla vypadat takto:

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' };
    }
  },
});

Tento kód teď vrátí MultiResponse objekt, který obsahuje dokument i odpověď HTTP.

Aktualizujte function_app.py tak, aby odpovídaly následujícímu kódu. outputDocument Přidejte parametr do definice funkce a outputDocument.set() pod if name: příkaz:

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
                )

Dokument {"id": "name"} se vytvoří v kolekci databáze zadané v vazbě.

Místní spuštění funkce

Visual Studio Code se integruje s nástroji Azure Functions Core Tools, které vám umožní spustit tento project na místním vývojovém počítači před publikováním do Azure. Pokud ještě nemáte nástroje Core Tools nainstalované místně, zobrazí se výzva k jeho instalaci při prvním spuštění project.

  1. Pokud chcete volat funkci, stiskněte F5 a spusťte projekt aplikace Function App. Na panelu Terminálu se zobrazí výstup nástrojů Core Tools. Aplikace se spustí na panelu Terminálu . Můžete vidět koncový bod URL vaší funkce aktivované protokolem HTTP spuštěné místně.

    Screenshot výstupu lokální funkce ve Visual Studio Code.

    Pokud ještě nemáte nainstalované Core Tools, vyberte Install a při zobrazení výzvy k tomu, tyto nástroje nainstalujte.
    Pokud máte potíže se spuštěním ve Windows, ujistěte se, že výchozí terminál pro Visual Studio Code není nastavený na WSL Bash.

  2. Se spuštěnými nástroji Core Tools přejděte do oblasti Azure: Functions. V části Functions rozbalte Local Project>Functions. Klikněte pravým tlačítkem myši (Windows) nebo Ctrl – klikněte na funkci (macOS) a zvolte HttpExample.

    Screenshot funkce spuštění z Visual Studio Code.

  3. V části Zadání těla požadavku stiskněte Enter, abyste odeslali zprávu požadavku do své funkce.

  4. Když se funkce spustí místně a vrátí odpověď, v Visual Studio Code se vyvolá oznámení. Informace o provádění funkce se zobrazují na panelu Terminálu .

  5. Stisknutím kombinace kláves Ctrl+C zastavte nástroje Core Tools a odpojte ladicí program.

Místní spuštění funkce

  1. Stejně jako v předchozím článku stiskněte F5, abyste spustili projekt aplikace funkcí a Core Tools.

  2. Se spuštěnými nástroji Core Tools přejděte do oblasti Azure: Functions. V části Functions rozbalte Local Project>Functions. Klikněte pravým tlačítkem myši (ctrl klikněte na Mac) HttpExample funkci a zvolte Spustit funkci nyní....

    Spustit funkci teď z Visual Studio Code

  3. V Zadejte text těla požadavku se zobrazí hodnota těla zprávy požadavku { "name": "Azure" }. Stisknutím klávesy Enter odešlete tento požadavek do své funkce.

  4. Po vrácení odpovědi stiskněte Ctrl+C a zastavte nástroje Core Tools.

Ověření vytvoření dokumentu JSON

  1. Na Azure portálu se vraťte do svého účtu Azure Cosmos DB a vyberte Data Explorer.

  2. Rozbalte databázi a kontejner a vyberte Položky , které zobrazí seznam dokumentů vytvořených v kontejneru.

  3. Ověřte, že výstupní vazba vytvořila nový dokument JSON.

    Ověřte, že byl vytvořen nový dokument v kontejneru Azure Cosmos DB

Opětovné nasazení a ověření aktualizované aplikace

  1. V Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Azure Functions: Deploy to function app....

  2. Zvolte aplikaci funkcí, kterou jste vytvořili v prvním článku. Vzhledem k tomu, že znovu nasazujete project do stejné aplikace, vyberte Deploy a zavřete upozornění na přepsání souborů.

  3. Po dokončení nasazení můžete znovu použít funkci Execute Function Now... pro spuštění funkce v Azure. Tento příkaz automaticky načte přístupový klíč funkce a použije ho při volání koncového bodu HTTP triggeru.

  4. Znovu zkontrolujte dokumenty vytvořené v kontejneru Azure Cosmos DB a ověřte, že výstupní vazba znovu vygeneruje nový dokument JSON.

Uvolnit zdroje

V Azure zdroje odkazují na aplikace funkcí, funkce, účty storage atd. Jsou seskupeny do skupin prostředků, a můžete odstranit všechno ve skupině tím, že odstraníte skupinu.

Vytvořili jste prostředky k dokončení těchto rychlých startů. Tyto prostředky se vám můžou účtovat v závislosti na stavu účtu a cenách služeb . Pokud prostředky už nepotřebujete, můžete k jejich odstranění použít tento postup:

  1. V Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte Azure: Open in portal.

  2. Zvolte aplikaci funkcí a stiskněte Enter. Otevře se stránka aplikace funkcí v Azure portálu.

  3. Na kartě Přehled vyberte pojmenovaný odkaz vedle skupiny prostředků.

    Snímek obrazovky s výběrem skupiny prostředků, která se má odstranit ze stránky aplikace funkcí

  4. Na stránce Skupina prostředků zkontrolujte seznam zahrnutých prostředků a ověřte, že se jedná o prostředky, které chcete odstranit.

  5. Vyberte Odstranit skupinu prostředků a postupujte podle pokynů.

    Odstranění může trvat několik minut. Po jeho dokončení se na několik sekund zobrazí oznámení. K zobrazení tohoto oznámení můžete také vybrat ikonu zvonku v horní části stránky.

Další kroky

Aktualizovali jste funkci aktivovanou protokolem HTTP tak, aby zapisovala dokumenty JSON do kontejneru Azure Cosmos DB. Teď se můžete dozvědět více o vývoji funkcí pomocí Visual Studio Code: