Freigeben über


Verwenden von Azure Functions zum Herstellen einer Verbindung mit einer Azure SQL-Datenbank-Instanz

In diesem Artikel wird erläutert, wie Sie mit Azure Functions einen geplanten Auftrag erstellen, über den eine Verbindung mit einer Azure SQL-Datenbank-Instanz oder einer verwalteten Azure SQL-Instanz hergestellt wird. Der Funktionscode bereinigt die Zeilen in einer Tabelle in der Datenbank. Die neue C#-Funktion wird basierend auf einer vordefinierten Vorlage für einen Zeitgebertrigger in Visual Studio 2019 erstellt. Zur Unterstützung dieses Szenarios müssen Sie auch eine Datenbank-Verbindungszeichenfolge als App-Einstellung in der Funktions-App festlegen. Für eine verwaltete Azure SQL-Instanz müssen Sie den öffentlichen Endpunkt aktivieren, um eine Verbindung über Azure Functions herstellen zu können. In diesem Szenario wird ein Massenvorgang auf die Datenbank angewendet.

Wenn Sie C#-Funktionen zum ersten Mal verwenden, sollten Sie die C#-Entwicklerreferenz zu Azure Functions lesen.

Voraussetzungen

  • Führen Sie die Schritte im Artikel Erstellen Ihrer ersten Funktion mit Visual Studio aus, um eine lokale Funktions-App für Version 2.x oder höher der Runtime zu erstellen. Zudem müssen Sie Ihr Projekt in einer Funktions-App in Azure veröffentlicht haben.

  • In diesem Artikel wird ein Transact-SQL-Befehl veranschaulicht, der einen Massenbereinigungsvorgang in der Tabelle SalesOrderHeader in der Beispieldatenbank „AdventureWorksLT“ ausführt. Führen Sie die Schritte im Artikel Erstellen einer Azure SQL-Datenbank-Instanz im Azure-Portal aus, um die Beispieldatenbank „AdventureWorksLT“ zu erstellen.

  • Sie müssen eine Firewallregel auf Serverebene für die öffentliche IP-Adresse des Computers hinzufügen, den Sie für diesen Schnellstart verwenden. Diese Regel ist erforderlich, damit über den lokalen Computer auf die SQL-Datenbank-Instanz zugegriffen werden kann.

Abrufen von Verbindungsinformationen

Sie müssen die Verbindungszeichenfolge für die Datenbank abrufen, die Sie in Erstellen einer Azure SQL-Datenbank-Instanz im Azure-Portal erstellt haben.

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Menü auf der linken Seite die Option SQL-Datenbanken und anschließend auf der Seite SQL-Datenbanken Ihre Datenbank aus.

  3. Wählen Sie unter Einstellungen die Option Verbindungszeichenfolgen aus, und kopieren Sie die vollständige ADO.NET-Verbindungszeichenfolge. Kopieren Sie für die verwaltete Azure SQL-Instanz die Verbindungszeichenfolge für den öffentlichen Endpunkt.

    Kopieren Sie die ADO.NET-Verbindungszeichenfolge.

Festlegen der Verbindungszeichenfolge

Eine Funktions-App hostet die Ausführung Ihrer Funktionen in Azure. Als bewährte Sicherheitsmethode empfiehlt es sich, Verbindungszeichenfolgen und andere Geheimnisse in den Einstellungen Ihrer Funktions-App zu speichern. Die Verwendung von Anwendungseinstellungen verhindert eine versehentliche Offenlegung der Verbindungszeichenfolge mit dem Code. Auf die App-Einstellungen für Ihre Funktions-App können Sie direkt in Visual Studio zugreifen.

Zuvor müssen Sie Ihre App in Azure veröffentlicht haben. Wenn dies noch nicht erfolgt ist, veröffentlichen Sie die Funktions-App in Azure.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Funktions-App-Projekt, und wählen Sie Veröffentlichen aus.

  2. Wählen Sie auf der Seite Veröffentlichen im Bereich Hosting die Auslassungspunkte (...) und dann Azure App Service-Einstellungen verwalten aus.

    Verwalten Sie App Service-Einstellungen für die Funktions-App.

  3. Wählen Sie in Anwendungseinstellungen die Option Einstellung hinzufügen aus, geben Sie in Name der neuen App-Einstellung den Namen sqldb_connection ein, und wählen Sie OK aus.

    Fügen Sie eine App-Einstellung für die Funktions-App hinzu.

  4. Fügen Sie in der neuen Einstellung sqldb_connection die Verbindungszeichenfolge, die Sie im vorherigen Abschnitt kopiert haben, im Feld Lokal ein, und ersetzen Sie die Platzhalter {your_username} und {your_password} durch die tatsächlichen Werte. Wählen Sie Wert aus lokaler Quelle einfügen aus, um den aktualisierten Wert in das Feld Remote zu kopieren, und wählen Sie dann OK aus.

    Einstellung „SQL-Verbindungszeichenfolge hinzufügen“

    Die Verbindungszeichenfolgen werden verschlüsselt in Azure gespeichert (Remote). Um zu verhindern, dass Geheimnisse offengelegt werden, sollte die Projektdatei „local.settings.json“ (Lokal) von der Quellcodeverwaltung ausgeschlossen werden, z.B. durch Verwendung einer GITIGNORE-Datei.

Hinzufügen des SqlClient-Pakets zum Projekt

Sie müssen das NuGet-Paket hinzufügen, das die SqlClient-Bibliothek enthält. Diese Datenzugriffsbibliothek wird zum Herstellen einer Verbindung mit einer SQL-Datenbank-Instanz benötigt.

  1. Öffnen Sie das lokale Funktions-App-Projekt in Visual Studio 2022.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Funktions-App-Projekt, und wählen Sie NuGet-Pakete verwalten aus.

  3. Suchen Sie auf der Registerkarte Durchsuchen nach Microsoft.Data.SqlClient, und wählen Sie das Element aus.

  4. Wählen Sie auf der Seite Microsoft.Data.SqlClient die Version 5.1.0 aus, und klicken Sie dann auf Installieren.

  5. Überprüfen Sie nach Abschluss der Installation die Änderungen, und klicken Sie anschließend auf OK, um das Vorschaufenster zu schließen.

  6. Sollte das Fenster Zustimmung zur Lizenz angezeigt werden, klicken Sie auf Ich stimme zu.

Nun können Sie den C#-Funktionscode hinzufügen, der eine Verbindung mit Ihrer SQL-Datenbank herstellt.

Hinzufügen einer Funktion mit Auslösung per Timer

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Funktions-App-Projekt, und wählen Sie Hinzufügen>Neue Azure-Funktion aus.

  2. Wählen Sie die Vorlage Azure Functions aus, geben Sie dem neuen Element den Namen DatabaseCleanup.cs, und wählen Sie Hinzufügen aus.

  3. Wählen Sie im Dialogfeld Neue Azure-Funktion die Option Trigger mit Timer und klicken Sie dann auf Hinzufügen. In diesem Dialogfeld wird eine Codedatei für die Funktion mit Auslösung per Zeitgeber erstellt.

  4. Öffnen Sie die neue Codedatei, und fügen Sie am Anfang der Datei die folgenden using-Anweisungen ein:

    using Microsoft.Data.SqlClient;
    using System.Threading.Tasks;
    
  5. Ersetzen Sie die vorhandene Run-Funktion durch den folgenden Code:

    [FunctionName("DatabaseCleanup")]
    public static async Task Run([TimerTrigger("*/15 * * * * *")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("sqldb_connection");
        using (SqlConnection conn = new SqlConnection(str))
        {
            conn.Open();
            var text = "UPDATE SalesLT.SalesOrderHeader " +
                    "SET [Status] = 5  WHERE ShipDate < GetDate();";
    
            using (SqlCommand cmd = new SqlCommand(text, conn))
            {
                // Execute the command and log the # rows affected.
                var rows = await cmd.ExecuteNonQueryAsync();
                log.LogInformation($"{rows} rows were updated");
            }
        }
    }
    

    Diese Funktion wird alle 15 Sekunden ausgeführt, um die Spalte Status basierend auf dem Lieferdatum zu aktualisieren. Weitere Informationen zum Zeitgebertrigger finden Sie unter Trigger mit Timer für Azure Functions.

  6. Drücken Sie F5, um die Funktions-App zu starten. Das Ausführungsfenster Azure Functions Core Tools wird im Hintergrund von Visual Studio geöffnet.

  7. Die Funktion wird 15 Sekunden nach dem Start ausgeführt. Sehen Sie sich die Ausgabe an, und beachten Sie die Anzahl der in der Tabelle SalesOrderHeader aktualisierten Zeilen.

    Zeigen Sie die Funktionsprotokolle an.

    Bei der ersten Ausführung sollten 32 Datenzeilen aktualisiert werden. In nachfolgenden Ausführungen werden keine Datenzeilen aktualisiert, es sei denn, Sie nehmen Änderungen an den Daten der Tabelle „SalesOrderHeader“ vor, sodass mit der UPDATE-Anweisung weitere Zeilen ausgewählt werden.

Wenn Sie die Funktion veröffentlichen möchten, vergessen Sie nicht, das Attribut TimerTrigger in einen geeigneteren CRON-Zeitplan als alle 15 Sekunden zu ändern. Außerdem müssen Sie sicherstellen, dass Ihre Funktions-App auf Azure SQL-Datenbank oder Azure SQL Managed Instance zugreifen kann. Weitere Informationen finden Sie je nach Ihrem Azure SQL-Typ unter einem der folgenden Links:

Nächste Schritte

Als Nächstes erfahren Sie, wie Sie Functions mit Logic Apps für die Integration in andere Dienste verwenden.

Weitere Informationen zu Functions finden Sie in den folgenden Artikeln: