Schritt 1: Remotedienst (Azure-Funktion) über Portal erstellen

Unter diesem Thema finden Sie eine Anleitung zum Erstellen einer Azure-Funktion zur Verwendung als Remotedienst für Ihre externe Funktion.

Unter diesem Thema:

Azure-Funktionen-App erstellen

Es gibt mehrere Möglichkeiten, einen Remotedienst zu erstellen. In diesem Abschnitt wird gezeigt, wie Sie einen Remotedienst erstellen, der als JavaScript-Funktion implementiert ist.

Diese externe Funktion ist synchron. Weitere Informationen zum Erstellen einer asynchronen externen Funktion finden Sie unter Erstellen einer asynchronen Funktion auf Azure.

Der erste Schritt besteht darin, eine Azure-Funktionen-App zu erstellen, die als Container für die Funktionen dient, die Sie später erstellen.

  1. Melden Sie sich beim Azure-Portal an.

  2. Erstellen Sie die Azure-Funktionen-App, indem Sie die Anweisungen in der Microsoft-Dokumentation unter Azure-Funktionen-App befolgen.

    Wenn Sie die Anleitung verwenden, denken Sie an Folgendes:

    • Wenn Sie einen Namen in das Feld Function App Name eingeben, notieren Sie sich den Namen auch auf dem Arbeitsblatt unter Azure Function app name.

    • Wenn Sie aufgefordert werden, einen Wert für Publish anzugeben, wählen Sie Code.

    • Für das Erstellen mehrerer Apps in derselben Ressourcengruppe gelten einige Einschränkungen. Weitere Informationen dazu finden Sie in der Microsoft-Dokumentation unter Azure-App-Dienst.

    Snowflake stellt eine „Echo“-Beispielfunktion in Node.js bereit. Wenn Sie diese Beispielfunktion zum Einstieg verwenden möchten, dann gehen Sie wie folgt vor:

    • Wählen Sie als Runtime stack die Option „Node.js“ aus.

    • Wählen Sie als Node.js-Version die Version 12 aus.

    • Wählen Sie als Betriebssystem, unter dem die Funktion ausgeführt werden soll, „Windows“ oder „Linux“ aus.

      • Wenn Sie nur eine Demofunktion erstellen, empfiehlt Snowflake die Auswahl von „Windows“.

        Linux-Funktionen-Apps können im Azure-Portal nicht bearbeitet werden. Benutzer müssen den Code über die Visual Studio Code-Schnittstelle veröffentlichen.

      • Wenn Sie Ihre Azure-Funktion unter Linux und nicht unter Microsoft Windows ausführen möchten, finden Sie entsprechende Informationen in der Microsoft-Dokumentation unter Azure-Funktionen.

        Die Azure AD-Authentifizierung ist unter Linux nicht verfügbar, wenn Sie den „Consumption“-Tarif für Azure-Funktionen verwenden. Sie müssen einen „App Service“-Tarif oder „Premium“-Tarif verwenden, um sich mit Azure AD zu authentifizieren.

        Weitere Informationen dazu finden Sie in der Microsoft-Dokumentation unter Azure AD.

Über HTTP ausgelöste Azure-Funktion erstellen

Nachdem Sie Ihre Azure-Funktionen-App (Container) erstellt haben, müssen Sie eine Azure-Funktion in diesem Container erstellen. Diese Funktion fungiert als der Remotedienst.

Microsoft erlaubt das Aufrufen (Auslösen) von Azure-Funktionen auf unterschiedliche Weise. Eine externe Snowflake-Funktion ruft einen Remotedienst über einen HTTP-POST-Befehl auf, d. h. die von Ihnen erstellte Azure-Funktion muss eine „über HTTP ausgelöste Funktion“ sein.

Tipp

Sie können die von Microsoft bereitgestellte Anleitung verwenden, um die über HTTP ausgelöste Funktion zu erstellen:

Snowflake stellt jedoch benutzerdefinierte Anleitungen zur Verfügung, die zusätzliche Details und Beispielcode enthalten und eine andere Autorisierungsstufe als Microsoft vorschlagen. Wir empfehlen, die benutzerdefinierten Anleitungen anstelle der von Microsoft bereitgestellten Anleitungen zu verwenden.

Funktion erstellen

Um die in diesem Abschnitt beschriebenen Aufgaben auszuführen, müssen Sie sich auf dem Bildschirm Function App des Azure-Portals befinden. Der Name Ihrer Azure-Funktionen-App wird normalerweise in der linken oberen Ecke des Bildschirms angezeigt.

So erstellen Sie die über HTTP ausgelöste Funktion:

  1. Suchen Sie im Menüstrukturbaum auf der linken Seite nach dem Abschnitt mit dem Titel Functions. Klicken Sie in diesem Abschnitt auf das Element mit der Bezeichnung Functions, um eine Funktion hinzuzufügen.

  2. Klicken Sie auf die Schaltfläche + Add.

  3. Wählen Sie auf der rechten Seite in der Liste der potenziellen Trigger die Option HTTP trigger aus.

  4. Geben Sie den Namen ein, der für Ihre über HTTP ausgelöste Funktion verwendet werden soll.

    Notieren Sie sich diesen Namen auf dem Arbeitsblatt unter HTTP-Triggered Function name.

  5. Geben Sie den Wert für Authorization level ein.

    Snowflake empfiehlt, als Autorisierungsstufe Function auszuwählen.

    Weitere Informationen zu möglichen Autorisierungsstufen finden Sie in der Microsoft-Dokumentation unter Über HTTP ausgelöste Funktionen.

  6. Klicken Sie auf die Schaltfläche Add.

    Dadurch gelangen Sie zu einem Bildschirm, auf dem der Name der Funktion und darunter das Wort Function angezeigt werden.

  7. Klicken Sie im Strukturbaum auf der linken Seite auf Code + Test.

  8. Ersetzen Sie den Standardcode durch Ihren eigenen Code.

    Beispielcode für eine JavaScript-„echo“-Funktion finden Sie unten.

    Die Funktion liest jede Zeile und kopiert diese Zeile dann in die Ausgabe (Ergebnisse). Die Zeilennummer ist ebenfalls in der Ausgabe enthalten. Die Ausgabe wird als Teil eines mehrstufigen Wörterbuchs zurückgegeben.

    Diese Funktion akzeptiert Daten in demselben Format (JSON), das von Snowflake gesendet und gelesen wird, und gibt Daten auch in diesem Format zurück. Weitere Informationen zu Datenformaten finden Sie unter Eingangs- und Ausgangsdatenformate von Remotediensten.

    Normalerweise gibt die Funktion den HTTP-Code 200 zurück. Wenn keine Zeilen an die Funktion übergeben werden (d. h. wenn der Anforderungstext leer ist), gibt die Funktion den Fehlercode 400 zurück.

    module.exports = async function(context, request) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        if (request.body) {
            var rows = request.body.data;
            var results = [];
            rows.forEach(row => {
                results.push([row[0], row]);
            });
    
            results = {data: results}
            context.res = {
                status: 200,
                body: JSON.stringify(results)
            };
       }
       else {
           context.res = {
               status: 400,
               body: "Please pass data in the request body."
           };
       }
    };
    
  9. Klicken Sie über dem Code auf die Schaltfläche Save.

Funktion testen

Um die soeben erstellte, über HTTP ausgelöste Azure-Funktion zu testen, fügen Sie die folgenden Beispieldaten in das Feld Body ein, und klicken Sie dann auf die Schaltfläche Test/Run:

{
    "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ]
}

Der Inhalt der Ausgabe sollte in etwa wie folgt aussehen:

{ "data":
    [
        [ 0, [ 0, 43, "page" ] ],
        [ 1, [ 1, 42, "life, the universe, and everything" ]  ]
    ]
}

Beachten Sie, dass die Formatierung von der oben gezeigten abweichen kann.

Autorisierungsanforderungen für die Azure-Funktionen-App festlegen

Wenn eine externe Funktion aufgerufen wird, sendet Snowflake einen HTTP-POST-Befehl an den Proxydienst (z. B. den Azure API Management-Dienst), der den POST-Befehl an den Remotedienst (z. B. die Azure-Funktion) weiterleitet.

Für jeden dieser beiden Schritte sollten Autorisierungsanforderungen gelten, sodass Sie in der Regel Folgendes angeben:

  • Die Autorisierung, die zum Aufrufen des API Management-Dienstes erforderlich ist.

  • Die Autorisierung, die zum Aufrufen von Funktionen der Azure-Funktionen-App, die Ihre Azure-Funktion enthält, erforderlich ist.

In diesem Abschnitt wird gezeigt, wie Sie eine Autorisierung für Ihre Azure-Funktionen-App anfordern. Der API Management-Dienst wird später erstellt, daher werden dessen Autorisierungsanforderungen auch erst später festgelegt.

Wenn Snowflake sich bei Ihrer Azure-Funktionen-App authentifiziert, verwendet Snowflake den Bereitstellungsablauf für OAuth-Clientanmeldinformationen für Azure AD.

Weitere Einzelheiten zum Ablauf der Bereitstellung von Clientanmeldeinformationen finden Sie in der Microsoft-Dokumentation unter https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-oauth2-client-creds-grant-flow.

Dieser Clientanmeldeinformationsablauf erfordert eine Azure AD-App-Registrierung, die die Azure-Funktionen-App repräsentiert.

Dieser Abschnitt enthält die Anweisungen zum Erstellen der Azure AD-App-Registrierung für die Azure-Funktionen-App. Beispielsweise können Sie Ihre Azure-Funktionen-App so einstellen, dass eine Azure AD-Authentifizierung erforderlich ist. Um die Autorisierung über Azure AD zu konfigurieren, müssen Sie Folgendes tun:

  • Erstellen Sie eine Azure AD-App-Registrierung, bei der es sich um eine Azure AD-basierte Entität handelt, die eine Identität oder einen Ressourcenbezeichner repräsentiert (d. h. das, was Sie schützen möchten).

  • Ordnen Sie die Azure AD-App-Registrierung der Azure-Funktionen-App zu, für die Sie eine Authentifizierung anfordern möchten.

Bemerkung

Für Azure-Funktionen besteht der schnellste Weg, eine Azure AD-App-Registrierung zu erstellen, in der Aktivierung von Azure AD-Authentifizierung für den Dienst, wie unten dokumentiert. Wenn Sie als Remotedienst keine Azure-Funktion verwenden möchten, verwenden Sie die Seite App registrations, um eine neue Azure AD-App-Registrierung für Ihren Remotedienst zu erstellen.

Weitere Einzelheiten zur App-Registrierung finden Sie in folgender Microsoft-Dokumentation:

App Service Authentication für die Azure-Funktionen-App aktivieren

Um die folgenden Schritte ausführen zu können, müssen Sie sich auf dem Bildschirm Function App Ihrer Azure-Funktionen-App befinden.

  1. Suchen Sie im linken Menüfenster den Abschnitt mit dem Namen Settings, und klicken Sie dort auf Authentication.

    Wenn am linken Rand das Menü Developer angezeigt wird (mit Code + Test, Integration usw.) und der untere Bildschirmrand eine Bildlaufleiste enthält, dann versuchen Sie den Schieberegler nach links zu schieben, um zum Abschnitt Function App oder App Service zurückzukehren, und suchen Sie dann nach Settings.

  2. Klicken Sie auf die Schaltfläche Add identity provider.

  3. Wählen Sie im Dropdown-Menü Identity provider die Option Microsoft aus.

  4. Wählen Sie unter App registration type die Option Create new app registration aus.

  5. Geben Sie im Feld Name den Namen Ihrer App ein.

  6. Wählen Sie unter Supported account types die Option Current tenant - Single tenant aus.

  7. Wählen Sie unter Restrict access die Option Require authentication aus.

  8. Wählen Sie unter Unauthenticated requests die Option HTTP 401 Unauthorized aus.

  9. Klicken Sie auf Next: Permissions. Überprüfen Sie die Berechtigungen.

  10. Klicken Sie auf Add. Eine neue Azure AD-Anwendung wird erstellt, und die Anwendungsseite wird angezeigt.

  11. Klicken Sie auf den Link, der den Namen Ihrer Anwendung anzeigt, um zur Seite Ihrer Azure AD-Anwendung zu gelangen.

  12. Suchen Sie das Feld Application (client) ID.

    Notieren Sie sich diese ID im Feld Azure Function App AD Application ID Ihres Arbeitsblatts.

    Wichtig

    Stellen Sie sicher, dass Sie die ID und nicht den Azure AD-Anwendungsnamen kopieren. Die ID sollte eine UUID enthalten.