Erstellen einer externe Funktion mit einer Azure Resource Manager-Vorlage

In diesem Dokument wird beispielhaft gezeigt, wie Sie eine externe Funktion auf Microsoft Azure unter Verwendung einer ARM-Vorlage (Azure Resource Manager) erstellen.

Snowflake bietet eine Vorlage, mit der Sie beginnen können. Diese Vorlage verbirgt einige Details des Erstellungsprozesses und codiert einige Namen (z. B. den Triggernamen) und Funktionen fest. Wenn Sie bereit sind, Ihre eigene benutzerdefinierte externe Funktion zu erstellen, können Sie entweder eine Kopie der Vorlage anpassen, oder Sie können die flexiblere Anleitung unter Erstellen einer anpassbaren externen Funktion auf Azure nutzen.

Bemerkung

Diese Anleitung setzt voraus, dass Sie bereits mit der Administration von Microsoft Azure vertraut sind. In dieser Anleitung werden die allgemeinen Schritte beschrieben, die Sie ausführen müssen, aber nicht die Azure Portal-Benutzeroberfläche im Detail, da sich die Benutzeroberfläche ändern kann.

Unter diesem Thema:

Siehe auch:

Einführung

Die beiden wichtigsten Schritte beim Erstellen einer externen Funktion sind:

  • Erstellen des Remotedienstes (z. B. die Azure-Funktion)

  • Erstellen und Konfigurieren des Proxydienstes (Azure API Management-Dienst)

Die Azure Resource Manager-Vorlage führt diese beiden Schritte aus.

Mit der Vorlage werden auch folgende Schritte ausgeführt:

  • Erstellen eines Speicherkontos, das vom Azure Function-Dienst benötigt wird.

  • Hinzufügen einer JWT-Validierungsrichtlinie zur API Management-Instanz, um die Sicherheit des Azure API Management-Dienstes zu erhöhen. Sie müssen die JWT-Richtlinie jedoch erst manuell aktualisieren, bevor Sie sie verwenden können.

Die Vorlage von Snowflake steht auf folgender Seite zum Download bereit:

Arbeitsblatt

Wenn Sie Ihre externe Funktion erstellen, sollten Sie sich bestimmte Informationen, die Sie eingeben, notieren (z. B. den Namen des API Management-Dienstes), damit Sie diese Informationen in nachfolgenden Schritten verwenden können. Das Arbeitsblatt unten hilft Ihnen, diese Informationen festzuhalten.

Die von Snowflake in der Azure Resource Management-Vorlage bereitgestellten hartkodierten Werten sind unten bereits eingetragen.

==============================================================================================
=========================================== Worksheet ========================================
==============================================================================================

Azure Tenant ID........................: _______________________________________

    This is a UUID.

    If you do not already know your Azure AD tenant ID, you can find it by doing the following:

    #. Log into the Azure portal (http://portal.azure.com).
    #. In the "Azure services" icons near the top of the page, click on Azure Active Directory.
    #. In the menu on the left-hand side, look for the section titled :extui:`Manage`,
       then click on :extui:`Properties` under that.

       The Azure AD tenant ID is displayed in the Tenant ID field.

    .. # The Azure AD Tenant ID is used in the azure_tenant_id clause in CREATE API INTEGRATION.


----------------- Information about the Azure Function (remote service) ----------------------

HTTP-Triggered Function name...........: __________________ echo ________________

Azure function AD Application ID.......: ________________________________________

    (This is the "Application (client) ID" of the Azure AD app registration for the Azure function,
    and is used to fill in the "azure_ad_application_id" field in the "CREATE API INTEGRATION" command.
    This is in the form of a UUID.)


------------ Information about the Azure API Management Service (proxy service) --------------

API Management service name......: __________________________________________

API Management URL...............: __________________________________________

Azure Function HTTP Trigger URL..: __________________________________________

API Management API URL suffix....: __________________________________________


---------------- Snowflake API Integration and External Function Information -----------------

API Integration Name.......: _______________________________________________

AZURE_MULTI_TENANT_APP_NAME: _______________________________________________

AZURE_CONSENT_URL..........: _______________________________________________

External Function Name.....: _______________________________________________

Schritt 1: Azure AD-App für die Azure-Funktionen-App erstellen

  1. Melden Sie sich beim Azure-Portal an.

  2. Suchen Sie nach der Seite App registrations.

  3. Klicken Sie auf New registration, um zum Bildschirm Register an application zu gelangen.

  4. Geben Sie einen eindeutigen Namen für Ihre Azure AD-App ein.

  5. Notieren Sie sich den Namen der Azure AD-App auf dem Arbeitsblatt im Feld „Azure function AD app registration name“.

  6. Wählen Sie unter Supported account types die Option Accounts in this organizational directory only (Default Directory only - Single tenant) aus.

  7. Klicken Sie auf Register.

    Dadurch gelangen Sie zum Bildschirm Home > App registrations, auf dem die neu erstellte Azure AD-App angezeigt wird.

  8. Notieren Sie sich die Application (client) AD der gerade erstellten Azure AD-App auf dem Arbeitsblatt im Feld „Azure function AD Application ID“. Dieses ID sollte die Form einer UUID haben.

Schritt 2: Azure-Funktion und API Management-Dienst unter Verwendung der Vorlage erstellen

  1. Navigieren Sie zum Azure-Portal.

  2. Suchen Sie über die Azure-Suchleiste nach Template.

  3. Klicken Sie unter Services auf Deploy a custom template.

  4. Wählen Sie Build your own template in the editor aus.

  5. Wählen Sie Load file aus.

  6. Navigieren Sie zu dem Verzeichnis, das Ihre Kopie der Vorlage enthält, und wählen Sie dann diese Vorlage aus.

  7. Klicken Sie auf Save.

    Dies bringt Sie zum Bildschirm Custom deployment.

  8. Wählen Sie eine vorhandenen Resource group aus, oder erstellen Sie eine neue.

    Tipp

    Wenn Sie eine neue Ressourcengruppe nur für diese Demonstration erstellen, sollten Sie sich den Namen notieren, damit Sie die Gruppe später löschen können, wenn Sie sie nicht mehr benötigen.

  9. Wählen Sie die entsprechende Region aus.

  10. Geben Sie den API Management Service Name ein.

  11. Notieren Sie sich den Namen des API Management Service auf dem obigen Arbeitsblatt unter „API Management service name“.

  12. Geben Sie in das Feld Function App Name einen eindeutigen Namen ein.

  13. Notieren Sie sich den Namen der Funktionen-App auf dem Arbeitsblatt im Feld „Azure function app name“.

  14. Geben Sie im Feld Publisher email Ihre E-Mail-Adresse ein. (Microsoft benachrichtigt Sie per E-Mail, wenn der API Management-Dienst erstellt wurde).

  15. Geben Sie in das Feld Azuread Application Id die ID der Azure AD-Anwendung ein, die Sie zuvor erstellt haben. Dies ist die „Azure function AD Application ID“, die Sie sich auf dem Arbeitsblatt notiert haben.

  16. Klicken Sie auf Review + create.

  17. Klicken Sie auf Create.

Das Erstellen der Azure-Funktionen-App und des API Management-Dienstes dauert in der Regel etwa eine halbe Stunde.

Schritt 3: API-Integration und externe Funktion erstellen

Nachdem Sie den Remotedienst und den Proxydienst erstellt haben, müssen Sie die API-Integration und die externe Funktion erstellen und dann zu dieser Seite zurückkehren. Zum Erstellen der API-Integration und der externen Funktion benötigen Sie die URL des API Management-Dienstes, die Sie mit den folgenden Schritten erhalten.

An diesem Punkt sollte das Azure-Portal die Meldung „Your deployment is complete“ (Ihre Bereitstellung ist abgeschlossen) und den Deployment name anzeigen.

  1. Klicken Sie in der linken Spalte auf „Outputs“ (Ausgaben).

  2. Notieren Sie sich die api Management URL auf dem Arbeitsblatt im Feld „API Management URL“.

  3. Notieren Sie sich die azure Function Http Trigger URL auf dem Arbeitsblatt im Feld „Azure Function Http Trigger URL“.

Wenn Sie die API-Integration und die externe Funktion erstellen, werden Sie nach der URL der api_allowed_prefixes gefragt. Sie können die „API Management URL“ als Präfix verwenden (mit oder ohne „API Management API URL Suffix“, das an anderer Stelle in der Anleitung erwähnt wird).

Wenn Sie die externe Funktion erstellen, werden Sie nach der Aufruf-URL gefragt. Sie können die „Azure Function HTTP Trigger URL“ als Aufruf-URL verwenden.

Führen Sie anhand der obigen Informationen die Schritte in den unten stehenden Links aus:

Kehren Sie dann zu dieser Seite zurück.

Schritt 4: Sicherheitsrichtlinie im Azure API Management-Dienst (Proxydienst) aktualisieren

Die von Snowflake bereitgestellte Azure Resource Manager-Vorlage erstellt eine Sicherheitsrichtlinie zur Validierung eines JWT (JSON Web Token), das Snowflake zum Aufrufen Ihrer Azure-Funktion autorisiert.

In der Sicherheitsrichtlinie fehlt jedoch ein Feld, das Sie ausfüllen müssen. Führen Sie im Azure-Portal die folgenden Schritte aus:

  1. Wählen Sie Ihren API Management-Dienst aus.

  2. Suchen Sie die API Management-Dienstinstanz, die Sie erstellt haben. Der Name dieser Instanz ist auf dem Arbeitsblatt im Feld „API Management service name“ eingetragen.

  3. Klicken Sie auf den Namen der API Management-Dienstinstanz.

  4. Wählen Sie „APIs“ > „APIs“ aus.

  5. Wählen Sie unter „Alle APIs“ die Option „ext-func-api“ aus.

  6. Wählen Sie POST echo aus.

  7. Klicken Sie im Bereich Inbound processing auf die Schaltfläche validate-JWT.

    Wenn Sie diese Schaltfläche nicht sehen, scrollen Sie nach unten.

  8. Suchen Sie nach SNOWFLAKE_SERVICE_PRINCIPAL_ID, und ersetzen Sie den Wert durch die „Snowflake Azure AD Application ID“ (auch „Snowflake-App-ID“ genannt).

    Wenn Sie noch keine Snowflake-App-ID haben, können Sie diese durch Ausführen der folgenden Schritte ermitteln:

    1. Suchen Sie auf dem Arbeitsblatt Ihren Eintrag zu AZURE_MULTI_TENANT_APP_NAME.

    2. Suchen Sie über das Suchfeld des Azure Portal nach Enterprise Applications.

      Dies bringt Sie zum Bildschirm Enterprise applications | All applications.

    3. Suchen Sie auf diesem Bildschirm nach AZURE_MULTI_TENANT_APP_NAME.

      Das Suchfeld ist nicht eindeutig beschriftet. Suchen Sie daher nach einem breiten Feld, das KEINE Bezeichnung hat.

      Wenn die beiden Werte für AZURE_MULTI_TENANT_APP_NAME nicht exakt übereinstimmen, dann führen Sie die Suche erneut aus, verwenden Sie diesmal aber nur die ersten Zeichen dieses Namens (wenn der Name einen Unterstrich enthält, dann schließen Sie weder den Unterstrich noch irgendwelche Zeichen nach dem Unterstrich ein).

  9. Klicken Sie auf Save.

Schritt 5: Funktion aufrufen

Testen Sie die Funktion, indem Sie diesen Anweisungen ausführen.

Problembehandlung

Request failed for external function <Name_der_externen_Funktion> with remote service error: 500

Mögliche Ursache:

Sie haben möglicherweise die falsche Option für Ihre Azure AD-App gewählt. Insbesondere könnten Sie Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) statt der korrekten Option Accounts in this organizational directory only (Default Directory only - Single tenant) gewählt haben.

Request failed for external function <Funktionsname> with remote service error: 401 ‚{ „statusCode“: 401, „message“: „Invalid JWT.“ }‘

Wenn Sie die Azure Resource Manager-Vorlage verwenden, haben Sie möglicherweise das JWT nicht aktualisiert, das von der Vorlage für Sie erstellt wurde. Im Abschnitt Schritt 4: Sicherheitsrichtlinie im Azure API Management-Dienst (Proxydienst) aktualisieren finden Sie die entsprechende Anleitung.