Sdílet prostřednictvím


Připojení Azure Functions do Azure SQL Database pomocí editoru Visual Studio Code

Azure Functions umožňuje připojit služby Azure 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 Koncepty triggerů a vazeb Azure Functions.

V tomto článku se dozvíte, jak pomocí editoru Visual Studio Code připojit Azure SQL Database 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 tabulky ve službě Azure SQL Database.

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

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

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

Další podrobnosti o nastavení vazeb Azure SQL a triggerech pro Azure Functions najdete v dokumentaci ke službě Azure Functions.

Vytvoření služby Azure SQL Database

  1. Pokud chcete vytvořit bezserverovou službu Azure SQL Database, postupujte podle rychlého startu vytvoření bezserverové služby Azure SQL Database. Databáze může být prázdná nebo vytvořená z ukázkové datové sady AdventureWorksLT.

  2. Podle pokynů na obrazovce zadejte tyto informace:

    Instrukce Výběr
    Skupina prostředků Zvolte skupinu prostředků, ve které jste vytvořili aplikaci funkcí v předchozím článku.
    Název databáze Zadejte mySampleDatabase.
    Název serveru Zadejte jedinečný název serveru. Nemůžeme zadat přesný název serveru, který se má použít, protože názvy serverů musí být globálně jedinečné pro všechny servery v Azure, ne jenom jedinečné v rámci předplatného.
    Metoda ověřování Vyberte Ověřování SQL Serveru.
    Přihlašovací jméno správce serveru Zadejte azureuser.
    Heslo Zadejte heslo, které splňuje požadavky na složitost.
    Povolit službám a prostředkům Azure přístup k tomuto serveru Vyberte Ano.
  3. Po dokončení vytváření přejděte do okna databáze na webu Azure Portal a v části Nastavení vyberte Připojení ionové řetězce. Zkopírujte ADO.NET připojovací řetězec pro ověřování SQL. Vložte připojovací řetězec do dočasného dokumentu pro pozdější použití.

    Snímek obrazovky s kopírováním připojovací řetězec Azure SQL Database na webu Azure Portal

  4. Vytvořte tabulku pro uložení dat z požadavku HTTP. Na webu Azure Portal přejděte do okna databáze a vyberte Editor dotazů. Zadáním následujícího dotazu vytvořte tabulku s názvem dbo.ToDo:

    CREATE TABLE dbo.ToDo (
        [Id] UNIQUEIDENTIFIER PRIMARY KEY,
        [order] INT NULL,
        [title] NVARCHAR(200) NOT NULL,
        [url] NVARCHAR(200) NOT NULL,
        [completed] BIT NOT NULL
    );
    
  5. Zkontrolujte nastavení brány firewall serveru a ověřte, že vaše funkce Azure Functions bude mít přístup ke službě Azure SQL Database. Přejděte do okna serveru na webu Azure Portal a v části Zabezpečení vyberte Sítě. Je potřeba zkontrolovat výjimku Pro povolení přístupu k tomuto serveru službám a prostředkům Azure.

    Snímek obrazovky s kontrolou nastavení brány firewall služby Azure SQL Database na webu Azure Portal

Aktualizace nastavení aplikace funkcí

V předchozím článku rychlého startu jste vytvořili aplikaci funkcí v Azure. V tomto článku aktualizujete aplikaci tak, aby zapisuje data do služby Azure SQL Database, kterou jste právě vytvořili. Pokud se chcete připojit ke službě Azure SQL Database, musíte do nastavení aplikace přidat její připojovací řetězec. Pak si do souboru local.settings.json stáhnete nové nastavení, abyste se mohli připojit ke službě Azure SQL Database při místním spuštění.

  1. Upravte připojovací řetězec v dočasném dokumentu, který jste vytvořili dříve. Nahraďte hodnotu Password heslem, které jste použili při vytváření služby Azure SQL Database. Zkopírujte aktualizovaný připojovací řetězec.

  2. Stisknutím kombinace kláves Ctrl/Cmd+shift+P 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:

    Instrukce Výběr
    Zadejte název nového nastavení aplikace. Zadejte SqlConnectionString.
    Zadejte hodnotu "Sql Připojení ionString" Vložte připojovací řetězec služby Azure SQL Database, kterou jste právě zkopírovali.

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

  4. Stisknutím kombinace kláves Ctrl/Cmd+shift+P znovu 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 možnost Ano.

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

Registrace rozšíření vazeb

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

S výjimkou triggerů HTTP a časovače se vazby implementují jako balíčky rozšíření. Spuštěním následujícího příkazu dotnet add package v okně terminálu přidejte do projektu balíček rozšíření Azure SQL.

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

Váš projekt je nakonfigurovaný tak, aby používal sady rozšíření, 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 projektu, 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
  }
}

:::

Teď můžete do projektu přidat výstupní vazbu Azure SQL.

Přidání výstupní vazby

Ve službě Functions každý typ vazby vyžaduje , directiontypea jedinečnýname, aby byl definován v souboru function.json. Způsob, jakým definujete tyto atributy, závisí na jazyce vaší aplikace funkcí.

Otevřete soubor projektu HttpExample.cs a přidejte následující ToDoItem třídu, která definuje objekt, který je zapsán do databáze:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}

V projektu knihovny tříd jazyka C# jsou vazby definovány jako atributy vazby v metodě funkce. Soubor function.json vyžadovaný funkcí se pak automaticky vygeneruje na základě těchto atributů.

Otevřete soubor projektu HttpExample.cs a přidejte následující třídu typu výstupu, která definuje kombinované objekty, které budou výstupem z naší funkce pro odpověď HTTP i výstup SQL:

public static class OutputType
{
    [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
    public ToDoItem ToDoItem { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

Do knihovny na začátek souboru přidejte příkaz Microsoft.Azure.Functions.Worker.Extensions.Sql using:

using Microsoft.Azure.Functions.Worker.Extensions.Sql;

Atributy vazby jsou definovány přímo v kódu. Konfigurace výstupu Azure SQL popisuje pole požadovaná pro výstupní vazbu Azure SQL.

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

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

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

const sendToSql = output.sql({
  commandText: 'dbo.ToDo',
  connectionStringSetting: 'SqlConnectionString',
});

Atributy vazby jsou definovány přímo v souboru function_app.py . Dekorátor použijete generic_output_binding k přidání výstupní vazby Azure SQL:

@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString"
    data_type=DataType.STRING)

V tomto kódu arg_name identifikuje parametr vazby, na který odkazuje váš kód, type označuje výstupní vazbu SQL, je tabulka, CommandText do které se vazba zapisuje, a ConnectionStringSetting je název nastavení aplikace, které obsahuje azure SQL připojovací řetězec. Připojovací řetězec je v nastavení Sql Připojení ionString v souboru local.settings.json.

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

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

[Function("HttpExample")]
public static OutputType 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 SQL output binding.
    return new OutputType()
    {
         ToDoItem = new ToDoItem
        {
            id = System.Guid.NewGuid().ToString(),
            title = message,
            completed = false,
            url = ""
        },
        HttpResponse = response
    };
}

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

const data = JSON.stringify([
  {
    // create a random ID
    Id: crypto.randomUUID(),
    title: name,
    completed: false,
    url: '',
  },
]);

// Output to Database
context.extraOutputs.set(sendToSql, data);

Pokud chcete modul využít crypto , přidejte do horní části souboru následující řádek:

const crypto = require("crypto");

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

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

const sendToSql = output.sql({
  commandText: 'dbo.ToDo',
  connectionStringSetting: 'SqlConnectionString',
});

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  extraOutputs: [sendToSql],
  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' };
      }

      // Stringified array of objects to be inserted into the database
      const data = JSON.stringify([
        {
          // create a random ID
          Id: crypto.randomUUID(),
          title: name,
          completed: false,
          url: '',
        },
      ]);

      // Output to Database
      context.extraOutputs.set(sendToSql, data);

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

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

import azure.functions as func
import logging
from azure.functions.decorators.core import DataType
import uuid

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
@app.generic_output_binding(arg_name="toDoItems", type="sql", CommandText="dbo.ToDo", ConnectionStringSetting="SqlConnectionString",data_type=DataType.STRING)
def test_function(req: func.HttpRequest, toDoItems: func.Out[func.SqlRow]) -> func.HttpResponse:
     logging.info('Python HTTP trigger function processed a request.')
     name = req.get_json().get('name')
     if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

     if name:
        toDoItems.set(func.SqlRow({"Id": str(uuid.uuid4()), "title": name, "completed": False, "url": ""}))
        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
                )

Místní spuštění funkce

Visual Studio Code se integruje s nástroji Azure Functions Core, které vám umožní spustit tento projekt 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í projektu.

  1. Pokud chcete volat funkci, stisknutím klávesy F5 spusťte projekt aplikace funkcí. Na panelu Terminálu se zobrazí výstup nástrojů Core Tools. Aplikace se spustí na panelu Terminálu . Zobrazí se koncový bod adresy URL funkce aktivované protokolem HTTP spuštěné místně.

    Snímek obrazovky s výstupem editoru Visual Studio Code místní funkce

    Pokud ještě nemáte nainstalované Nástroje Core Tools, po zobrazení výzvy k instalaci nástrojů Core Tools vyberte Nainstalovat .
    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 Funkce rozbalte položku Místní projektové>funkce. Klikněte pravým tlačítkem myši (Windows) nebo Ctrl – klikněte na funkci (macOS) HttpExample a zvolte Spustit funkci nyní....

    Snímek obrazovky s funkcí execute now from Visual Studio Code

  3. V textu požadavku Enter stiskněte Enter a odešlete do funkce zprávu požadavku.

  4. Když se funkce spustí místně a vrátí odpověď, v editoru 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 spusťte stisknutím klávesy F5 projekt aplikace funkcí a nástroje Core Tools.

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

    Snímek obrazovky s položkou nabídky Spustit funkci z editoru Visual Studio Code

  3. V části Zadejte text požadavku uvidíte textovou hodnotu { "name": "Azure" }zprávy požadavku . Stisknutím klávesy Enter odešlete tuto zprávu požadavku do funkce.

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

Ověření zápisu informací do databáze

  1. Na webu Azure Portal se vraťte do služby Azure SQL Database a vyberte Editor dotazů.

    Snímek obrazovky s přihlášením k editoru dotazů na webu Azure Portal

  2. Připojení do databáze a rozbalte Uzel Tabulky v Průzkumníku objektů na levé straně Klikněte pravým tlačítkem myši na dbo.ToDo tabulku a vyberte Vybrat prvních 1000 řádků.

  3. Ověřte, že výstupní vazba zapisuje nové informace do databáze.

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

  1. V editoru 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 projekt znovu nasazujete do stejné aplikace, zavřete upozornění na přepsání souborů výběrem možnosti Deploy (Nasadit ).

  3. Po dokončení nasazení můžete znovu použít funkci Execute Function Now... k aktivaci funkce v Azure.

  4. Znovu zkontrolujte data zapsaná do služby Azure SQL Database a ověřte, že výstupní vazba znovu vygeneruje nový dokument JSON.

Vyčištění prostředků

Prostředky v Azure odkazují na aplikace funkcí, funkce, účty úložiště atd. Jsou seskupené do skupin prostředků a můžete odstranit všechno ve skupině odstraněním skupiny.

Vytvořili jste prostředky k dokončení těchto rychlých startů. Tyto prostředky se vám můžou fakturovat, a to 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 editoru 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í na webu Azure Portal.

  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 data do služby Azure SQL Database. Teď se můžete dozvědět více o vývoji funkcí pomocí editoru Visual Studio Code: