Erstellen einer externen Funktion auf Google Cloud Platform

Diese Anleitung zeigt, wie Sie eine externe Funktion erstellen, die auf Google Cloud Platform (GCP) gehostet wird, indem Sie eine Google Cloud-Funktion als Remotedienst und ein Google Cloud-API-Gateway als Proxydienst verwenden. Sie können diese Anleitung entweder verwenden, um die von Snowflake bereitgestellte externe Beispielfunktion zu erstellen, oder als Leitfaden, um Ihre eigene externe Funktion zu erstellen.

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

Google bietet auch eine Befehlszeilenschnittstelle, die Sie für viele dieser Schritte verwenden können. Details dazu finden Sie in der Dokumentation zu GCP.

Unter diesem Thema:

Planen der Erstellung einer externen Funktion auf GCP

Voraussetzungen

Folgende Voraussetzungen müssen erfüllt sein:

  • Es muss eine Google Cloud-Projekt-ID vorliegen.

  • Es müssen die richtigen Dienste für Ihr Google Cloud-Projekt aktiviert sein. Detaillierte Anforderungen dazu finden Sie in der Schnellstart-Dokumentation zum API-Gateway für Google Cloud.

Arbeitsblatt

Wenn Sie Ihre externe Funktion erstellen, sollten Sie sich bestimmte Informationen, die Sie eingeben, notieren (z. B. Trigger-URL für Google Cloud-Funktion), damit Sie diese Informationen in nachfolgenden Schritten verwenden können. Das Arbeitsblatt unten hilft Ihnen, diese Informationen festzuhalten.

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

--------------- Cloud Function (remote service) Information ---------------

Cloud Function Trigger URL: _______________________________________________


---------------------- API Config File Information ------------------------

Path Suffix ..............: _______________________________________________

Configuration File Name ..: _______________________________________________


----------------- API Gateway (proxy service) Information -----------------

Managed Service Identifier: _______________________________________________

Gateway Base URL .........: _______________________________________________


------------ API Integration Information ------------

API Integration Name .....: _______________________________________________

API_GCP_SERVICE_ACCOUNT ..: _______________________________________________


------------ External Function Information ------------

External Function Name ...: _______________________________________________


--------------------------- Security Information --------------------------

Security Definition Name .: _______________________________________________

Schritt 1: Remotedienst (Google Cloud-Funktion) erstellen

In diesem Tutorial wird ein Remotedienst als Google Cloud-Funktion implementiert.

  1. Erstellen Sie eine Google Cloud-Funktion, indem Sie die Anleitung von Google zum Erstellen einer Cloudfunktion befolgen. Wenn Sie die von Snowflake bereitgestellt Beispielfunktion in der Sprache Python erstellen, wählen Sie Python Quickstart aus. Wählen Sie ansonsten den entsprechenden QuickStart auf der Grundlage der von Ihnen benötigten Sprache aus. Wenn Sie den Anweisungen von Google folgen, stellen Sie sicher, dass Sie Folgendes tun:

    • Geben Sie an, dass der Trigger der Funktion vom Typ HTTP ist.

    • Kopieren Sie den URL-Trigger in das Feld „Cloud Function Trigger URL“ im Arbeitsblatt oben.

    • Wählen Sie im Abschnitt Authentication die Option Require authentication aus.

      Die GCP-Anleitung gibt an, dass Allow unauthenticated invocations ausgewählt werden soll. Das ist für Beispielfunktionen wie der von Snowflake bereitgestellten Beispielfunktion akzeptabel, aber für die meisten Produktionssysteme sollte eine Authentifizierung angefordert werden.

    • Stellen Sie sicher, dass Require HTTPS aktiviert ist.

    • Klicken Sie auf Save.

    • Wählen Sie die entsprechende Runtime aus. Wenn Sie die von Snowflake mitgelieferte Python-Beispielfunktion erstellen, dann wählen Sie eine Python-Laufzeit wie Python 3.7 aus.

      Bemerkung

      Wählen Sie den entsprechenden Runtime-Wert aus, bevor Sie den Code einfügen.

    • Ersetzen Sie den Standardcode entweder durch den Snowflake-Beispielcode unten (geschrieben in Python 3.7) oder durch Ihren eigenen benutzerdefinierten Code.

      Dieser Beispielcode fasst die Werte der Eingangsparameter in einer einzigen Liste (Array) zusammen und gibt diese Liste als einen einzigen Wert vom Typ SQL VARIANT zurück.

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

      import json
      
      HTTP_SUCCESS = 200
      HTTP_FAILURE = 400
      
      def echo(request):
          try:
              # The list of rows to return.
              return_value = []
      
              payload = request.get_json()
              rows = payload["data"]
      
              # For each input row
              for row in rows:
                  # Include the row number.
                  row_number = row[0]
                  # Combine the value(s) in the row into a Python list that will be treated as an SQL VARIANT.
                  row_value = row[1:]
                  row_to_return = [row_number, row_value]
                  return_value.append(row_to_return)
      
              json_compatible_string_to_return = json.dumps( { "data" : return_value } )
              return (json_compatible_string_to_return, HTTP_SUCCESS)
      
          except:
              return(request.data, HTTP_FAILURE)
      
    • Achten Sie darauf, dass der Wert von Entry point mit dem Namen der Funktion (in diesem Fall echo) übereinstimmt.

  2. Nachdem Sie die Erstellung der Cloudfunktion abgeschlossen haben, verwenden Sie die Registerkarte Testing, um die Funktion aufzurufen und sicherzustellen, dass sie wie erwartet funktioniert.

    Verwenden Sie für die von Snowflake bereitgestellte Python-Beispielfunktion die folgenden Testdaten (ersetzen Sie alle Standarddaten auf der Registerkarte Testing durch die folgenden Daten):

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

    Die Ausführungsergebnisse sollten ungefähr wie folgt aussehen:

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

    (Die Ergebnisse werden möglicherweise anders als im oben gezeigten Beispiel angezeigt).

    Wenn die vorherigen Aktionen erfolgreich waren, haben Sie jetzt eine Google Cloud-Funktion, die Sie als Remotedienst für Ihre externe Funktion verwenden können.

Schritt 2: Proxydienst (Google Cloud-API-Gateway) erstellen und konfigurieren

Snowflake sendet keine Daten (HTTP-POST-Anforderungen) direkt an den Remotedienst (z. B. GCP-Cloudfunktion). Stattdessen sendet Snowflake die Daten an einen Proxydienst, der die Daten von Snowflake an den Remotedienst und vom Remotedienst zurück an Snowflake leitet. Auf GCP unterstützt Snowflake das Google Cloud-API-Gateway als Proxydienst.

Erstellen eines Google Cloud-API-Gateway zum Weiterleiten von Anfragen an die Cloudfunktion

Wenn Sie die Google Cloud Console verwenden, dann müssen Sie die folgenden spezifischen Schritte ausführen:

  1. API-Definition mithilfe einer Konfigurationsdatei erstellen

  2. API-Gateway erstellen

    1. API erstellen

    2. API Config erstellen

    3. Gateway mit der API Config erstellen

Diese Schritte sind im Folgenden genauer dokumentiert.

API-Definition erstellen

Erstellen Sie in Ihrem lokalen Dateisystem eine YAML-formatierte Konfigurationsdatei, die die zu erstellenden API spezifiziert, und passen Sie diese an. Die Datei sollte die Erweiterung .yaml oder .yml haben. Im Folgenden finden Sie eine Vorlage für die Konfigurationsdatei:

swagger: '2.0'
info:
  title: API Gateway config for Snowflake external function.
  description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /<PATH>:
    post:
      summary: Echo the input.
      operationId: echo
      x-google-backend:
        address: <HTTP ENDPOINT TO ROUTE REQUEST TO>
        protocol: h2
      responses:
        '200':
          description: <DESCRIPTION>
          schema:
            type: string

Füllen Sie die folgenden Felder aus, oder aktualisieren Sie diese:

  1. Ersetzen Sie den Wert für <PATH> durch einen eindeutigen Namen. Dieser Wert wird in URLs übernommen, verwenden Sie also nur Zeichen, die in URLs gültig sind. Geben Sie zum Beispiel demo-func-resource ein.

    Beachten Sie, dass Sie für das Feld <PATH> im Gegensatz zu den anderen Feldern in dieser Konfigurationsdatei den Wert vor dem Doppelpunkt und nicht nach dem Doppelpunkt eingeben müssen. Beispielsweise ist Folgendes korrekt:

    paths:
      /demo-func-resource:
    

    Der Pfadname darf keinen Pfadparameter enthalten. (Google unterstützt beim Einstellen des Pfades auf eine URL Pfadparameter. Snowflake unterstützt jedoch keine Pfadparameter in der entsprechenden URL, die in der CREATE EXTERNAL FUNCTION-Anweisung angegeben wird).

  2. Kopieren Sie den path-Wert aus dem unmittelbar vorangegangenen Schritt (z B. demo-func-resource) in das Feld „Pfad Suffix“ des Arbeitsblatts.

  3. Suchen Sie das Feld address unter dem Feld x-google-backend, und ersetzen Sie <HTTP ENDPOINT TO ROUTE REQUEST TO> durch den Wert im Feld „Cloud Function Trigger URL“ des Arbeitsblatts. Das Ergebnis sollte in etwa wie folgt aussehen:

    x-google-backend:
      address: https:// ...
    

    Die URL darf nicht in Anführungszeichen gesetzt werden.

    Die URL kann der Pfad zu einem beliebigen HTTP-Endpunkt sein, also nicht nur zu einem von Google gehosteten Endpunkt.

    Wenn Sie bei der Erstellung des Remotedienstes die Option Require HTTPS ausgewählt haben, stellen Sie sicher, dass die URL, die Sie in das Feld address eingeben, mit https beginnt.

  4. Optional können Sie jeden der folgenden Werte aktualisieren:

    • Der Titel title im Abschnitt info.

    • Die Beschreibung description im Abschnitt info.

    • Die operationId im Unterabschnitt post des Abschnitts paths.

    • Die Zusammenfassung summary im Unterabschnitt post des Abschnitts paths.

  5. Überprüfen Sie Ihre Beispielkonfigurationsdatei. Diese sollte ungefähr wir folgt aussehen:

    swagger: '2.0'
    info:
      title: "API Gateway config for Snowflake external function"
      description: "This configuration file connects the API Gateway resource to the remote service (Cloud Function)."
      version: 1.0.0
    schemes:
      - https
    produces:
      - application/json
    paths:
      /demo-func-resource:
        post:
          summary: "echo the input"
          operationId: echo
          x-google-backend:
            address: https://my_dev.cloudfunctions.net/demo-cloud-function-01
            protocol: h2
          responses:
            '200':
              description: echo result
              schema:
                type: string
    
  6. Speichern Sie die Konfigurationsdatei.

  7. Tragen Sie den Pfad und den Namen der Datei in das Feld „Configuration File Name“ des Arbeitsblatts ein.

Wenn Sie mehr über die API-Konfigurationsdatei erfahren möchten, lesen Sie die folgende GCP-Dokumentation:

API-Gateway erstellen

API erstellen

In diesem Schritt wird eine GCP-API erstellt, die ein Container ist, der mehrere API-Gateways und mehrere Konfigurationsdateien enthalten kann.

  1. Wenn Sie dies noch nicht getan haben, wechseln Sie auf den Google Cloud-API-Gateway-Bildschirm, indem Sie auf das GCP-Menü klicken und API Gateway auswählen.

  2. Klicken Sie auf CREATE GATEWAY.

  3. Geben Sie den Display Name und die API ID ein (z. B. demo-api-display-name-for-external-function1 und demo-api-id-for-external-function1).

    Diese brauchen Sie nicht in das Arbeitsblatt einzutragen, da Sie diese später zur Erstellung Ihrer externen Funktion nicht mehr benötigen. Sie sollten sich jedoch die API-ID notieren, damit Sie sie löschen können, wenn Sie damit fertig sind.

API Config erstellen

Laden Sie Ihre Konfigurationsdatei auf GCP hoch, wodurch eine API Config bereitgestellt wird.

  1. Scrollen Sie auf dem Bildschirm zum Abschnitt API Config.

  2. Suchen Sie nach dem Feld, das Upload an API Spec enthält.

    Klicken Sie auf BROWSE, und wählen Sie Ihre Konfigurationsdatei aus. Der Name Ihrer Konfigurationsdatei ist im Feld „Configuration File Name“ des Arbeitsblatts eingetragen.

  3. Geben Sie in das Feld Display Name einen Anzeigenamen ein.

  4. Wählen Sie ein Dienstkonto aus.

    Wenn Sie die Beispielfunktion erstellt haben, dann wählen Sie in dem Feld Select a Service Account die Option App Engine default service account aus.

    Wenn Sie eine Funktion erstellen, die in der Produktion verwendet werden soll (und nicht als Beispiel), können Sie ein anderes Dienstkonto auswählen.

    Das ausgewählte Dienstkonto muss über entsprechende Berechtigungen verfügen, einschließlich der Berechtigung zum Aufrufen der Cloudfunktion.

Gateway mit der API Config erstellen

  1. Scrollen Sie auf dem Bildschirm zum Abschnitt Gateway details.

  2. Geben Sie den Wert von Display Name des neuen API-Gateways ein.

  3. Klicken Sie in das Feld Location, und wählen Sie die entsprechende Region (z. B. us-central1) aus.

  4. Klicken Sie auf CREATE GATEWAY.

    Dadurch gelangen Sie zum Bildschirm APIs, auf der eine Liste Ihrer APIs angezeigt wird.

    Wenn Ihre neue API nicht sofort sichtbar ist, warten Sie einige Minuten, und klicken Sie dann auf die Schaltfläche Refresh.

  5. Kopieren Sie den Managed Service-Wert der API in das Feld „Managed Service Identifier“ des Arbeitsblatts.

  6. An diesem Punkt sollte noch eine Liste Ihrer APIs angezeigt werden. Klicken Sie auf den Namen der API.

    Es müssen vier Registerkarten angezeigt werden: OVERVIEW, DETAILS, CONFIGS und GATEWAYS.

  7. Klicken Sie auf die Registerkarte GATEWAYS.

  8. Notieren Sie sich die Gateway URL auf dem Arbeitsblatt im Feld „Gateway Base URL“.

Schritt 3: API-Integrationsobjekt in Snowflake erstellen

  1. Öffnen Sie (falls noch nicht geschehen) eine Snowflake-Sitzung, normalerweise eine Snowflake-Weboberflächensitzung.

  2. Führen Sie den Befehl USE ROLE aus, um eine Snowflake-Rolle mit ACCOUNTADMIN-Berechtigungen oder eine Rolle mit der Berechtigungen CREATE INTEGRATION zu verwenden, zum Beispiel:

    use role has_accountadmin_privileges;
    
  3. Geben Sie den Befehl CREATE API INTEGRATION ein, um eine API-Integration zu erstellen. Der Befehl sollte ungefähr wie folgt aussehen:

    create or replace api integration <integration_name>
        api_provider = google_api_gateway
        google_audience = '<google_audience_claim>'
        api_allowed_prefixes = ('<url>')
        enabled = true;
    
  4. Ersetzen Sie den <Integrationsnamen> durch einen eindeutigen Integrationsnamen.

  5. Tragen Sie den Integrationsnamen in das Feld „API Integration Name“ des Arbeitsblatts ein. Sie benötigen den Namen der API-Integration, wenn Sie später den Befehl CREATE EXTERNAL FUNCTION ausführen.

  6. Ersetzen Sie in der google_audience-Klausel den <Google-Zielgruppenanspruch> durch den Wert im Feld „Managed Service Identifier“ des Arbeitsblatts.

    (Während der Authentifizierung übergibt Snowflake ein JWT (JSON Web Token) an Google. Das JWT enthält einen „aud claim“ (Zielgruppenanspruch), den Snowflake auf den Wert des google_audience-Feldes setzt. Weitere Informationen zur Authentifizierung bei Google finden Sie in der Dokumentation zur Authentifizierung des Google-Dienstkontos.

  7. Ersetzen Sie in der api_allowed_prefixes-Klausel den <URL>-Wert durch den Wert im Feld „Gateway Base URL“ des Arbeitsblatts.

    (Dieses Feld erlaubt es Ihnen, die URLs einzuschränken, auf die diese API-Integration angewendet werden kann. Sie können einen Wert verwenden, der restriktiver ist als die Gateway-Basis-URL).

  8. Wenn Sie dies nicht bereits getan haben, führen Sie den oben eingegebenen CREATE API INTEGRATION-Befehl aus.

  9. Lesen und notieren Sie sich den API_GCP_SERVICE_ACCOUNT-Wert der API-Integration.

    1. Führen Sie den Befehl DESCRIBE INTEGRATION aus. Beispiel:

      describe integration my_api_integration_name;
      
    2. Notieren Sie sich den Wert für API_GCP_SERVICE_ACCOUNT im Feld „API_GCP_SERVICE_ACCOUNT“ des Arbeitsblatts.

Weitere Details zum Erstellen einer API-Integration finden Sie unter CREATE API INTEGRATION.

Schritt 4: Externe Funktion in Snowflake erstellen

Sie sollten sich in einer Sitzung der Snowflake-Weboberfläche befinden.

  1. Fügen Sie den Befehl CREATE EXTERNAL FUNCTION ein. Der Befehl sieht ungefähr wie folgt aus:

    create or replace external function <external_function_name>(<parameters>)
        returns variant
        api_integration = <api_integration_name>
        as '<function_URL>' ;
    
  2. Ersetzen Sie den <externen_Funktionsnamen> durch einen eindeutigen Funktionsnamen (z. B. echo).

  3. Tragen Sie den Funktionsnamen in das Feld „External Function Name“ des Arbeitsblatts ein.

  4. Ersetzen Sie die <Parameter> durch die Namen und SQL-Datentypen der Parameter, falls vorhanden. Beispiel: a integer, b varchar.

    Die Parameter müssen mit den Parametern übereinstimmen, die der Remotedienst erwartet. Die Parameternamen müssen nicht übereinstimmen, aber die Datentypen müssen kompatibel sein.

  5. Notieren Sie den Parameternamen und die Datentypen im Feld „External Function Name“ des Arbeitsblatts.

  6. Ersetzen Sie in der api_integration-Klausel den <API-Integrationsnamen> durch den Wert im Feld „API Integration Name“ des Arbeitsblatts.

  7. Ersetzen Sie die <Funktions-URL> durch den Wert im Feld „Gateway Base URL“ des Arbeitsblatts, gefolgt von einem Schrägstrich (/) und dem Wert im Feld „Path Suffix“ des Arbeitsblatts.

    Die URL sollte ähnlich aussehen wie:

    https://<gateway-base-url>/<path-suffix>
    
  8. Wenn Sie dies nicht bereits getan haben, führen Sie den oben eingegebenen CREATE EXTERNAL FUNCTION-Befehl aus.

Schritt 5: Externe Funktion aufrufen

Testen Sie die externe Funktion, indem Sie sie aufrufen. Führen Sie beispielsweise einen SQL-Befehl ähnlich dem folgenden aus:

select my_external_function(42, 'Life, the Universe, and Everything');

Ersetzen Sie den Funktionsnamen „my_external_function“ durch den tatsächlichen externen Funktionsnamen, den Sie sich im Feld „External Function Name“ des Arbeitsblatts notiert haben.

Der zurückgegebene Wert sollte wie folgt aussehen:

[42, "Life, the Universe, and Everything"]

Schritt 6: Sicherheitsrichtlinie für Google Cloud-API-Gateway (Proxydienst) festlegen

Konfigurationsdatei aktualisieren und neu laden

Mit den vorherigen Schritten wurde eine Google Cloud-Funktion erstellt, die von jedem aufgerufen werden kann, der über den korrekten Google Cloud-API-Gateway-Endpunkt verfügt. Wenn Sie nicht möchten, dass Ihr Endpunkt öffentlich zugänglich ist, sollten Sie ihn durch Hinzufügen eines angepassten securityDefinitions-Abschnitts in der Konfigurationsdatei für die API-Definition sichern.

Der Name der Konfigurationsdatei ist im Feld „Configuration File Name“ des Arbeitsblatts eingetragen. Die folgenden Anweisungen zeigen Ihnen, wie Sie der Konfigurationsdatei einen Abschnitt securityDefinitions hinzufügen. Nachdem dies hinzugefügt, angepasst, geladen und ausgeführt wurde, kann Ihre Cloudfunktion nur von Snowflake über das API-Gateway aufgerufen werden.

  1. Fügen Sie den folgenden Abschnitt securityDefinitions zur Konfigurationsdatei hinzu. Fügen Sie ihn direkt über dem Abschnitt schemes: der Konfigurationsdatei und auf der gleichen Einrückungsebene hinzu.

    securityDefinitions:
      <security-def-name>:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        x-google-issuer: "<gmail service account>"
        x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<gmail service account>"
    
  2. Ersetzen Sie den Wert für <security-def-name> durch einen eindeutigen Namen der Sicherheitsdefinition (z. B. snowflakeAccess01).

  3. Notieren Sie sich den Namen auf dem Arbeitsblatt im Feld „Security Definition Name“.

  4. Der Wert <gmail service account> wurde durch den Wert im Feld „API_GCP_SERVICE_ACCOUNT“ des Arbeitsblatts ersetzt. Nehmen Sie die Änderung in zwei Feldern der Konfigurationsdatei vor:

    1. Im Feld x-google-issuer.

    2. Am Ende des Feldes x-google-jwks_uri.

  5. Aktualisieren Sie in der Konfigurationsdatei den Abschnitt post:, um auf die oben erstellte Sicherheitsdefinition zu verweisen.

    1. Fügen Sie unter dem Feld operationId Folgendes hinzu:

      security:
        - <security-def-name>: []
      

      Dies sollte auf die gleiche Ebene wie das Feld operationId eingerückt werden.

      Ersetzen Sie <security-def-name> durch den Wert im Feld „Security Definition Name“ des Arbeitsblatts.

      Stellen Sie sicher, dass vor dem Namen der Sicherheitsdefinition ein Bindestrich und ein Leerzeichen stehen, wie oben gezeigt.

      Achten Sie darauf, dass die leeren eckigen Klammern ([]) nach dem Doppelpunkt enthalten sind.

      Beispiel:

      security:
        - snowflakeAccess01: []
      

      Ihre aktualisierte Konfigurationsdatei sollte ähnlich wie die folgende aussehen:

      swagger: '2.0'
      info:
        title: API Gateway config for Snowflake external function
        description: This configuration file connects the API Gateway resource to the remote service (Cloud Function).
        version: 1.0.0
      securityDefinitions:
        snowflakeAccess01:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          x-google-issuer: "<API_GCP_SERVICE_ACCOUNT>"
          x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<API_GCP_SERVICE_ACCOUNT>"
      schemes:
        - https
      produces:
        - application/json
      paths:
        /demo-func-resource:
          post:
            summary: Echo the input
            operationId: operationID
            security:
              - snowflakeAccess01: []
            x-google-backend:
              address: <Cloud Function Trigger URL>
              protocol: h2
            responses:
              '200':
                description: <DESCRIPTION>
                schema:
                  type: string
      
  6. Speichern Sie die Konfigurationsdatei.

  7. Laden Sie die aktualisierte Konfigurationsdatei hoch.

    1. Klicken Sie auf der Seite Gateways auf den Namen Ihres Gateways.

    2. Klicken Sie auf EDIT.

    3. Klicken Sie unter API Config in das Feld mit der Bezeichnung Select a Config.

    4. Wählen Sie die Option Create new API config aus.

    5. Klicken Sie in dem Feld, das Upload an API Spec enthält, auf die Schaltfläche BROWSE.

    6. Wählen Sie die gewünschte YAML-Datei aus, die Sie zuvor erstellt haben. Prüfen Sie, ob sie die Erweiterung „.yaml“ oder „.yml“ hat.

    7. Geben Sie den Anzeigenamen aus Display Name ein. Verwenden Sie einen neuen, eindeutigen Namen, nicht den Namen, den Sie zuvor verwendet haben.

    8. Wenn Sie aufgefordert werden, unter Select a Service Account das Dienstkonto auszuwählen, dann wählen Sie die Option App Engine default service account aus.

      Wenn Sie eine Funktion erstellen, die in der Produktion verwendet werden soll (und nicht als Beispiel), können Sie ein anderes Dienstkonto auswählen.

      Das ausgewählte Dienstkonto muss über entsprechende Berechtigungen verfügen, einschließlich der Berechtigung zum Aufrufen der Google Cloud-Funktion.

    9. Sie sollten sich nun wieder auf dem Bildschirm Ihres API-Gateways befinden. Wenn im Feld Config der Anzeigename der alten API Config-Datei angezeigt wird, dann gehen Sie wie folgt vor:

      1. Klicken Sie auf EDIT.

      2. Suchen Sie unter API Config wieder das Feld Select a Config, und klicken Sie in das Feld.

      3. Wählen Sie die neue API Config aus.

      4. Klicken Sie auf die Schaltfläche UPDATE.

        Dies bringt Sie zurück zur Liste der API-Gateways.

      5. Möglicherweise müssen Sie ein paar Minuten warten, bis die Aktualisierung des API-Gateways abgeschlossen ist.

        Möglicherweise sehen Sie links neben dem Namen des API-Gateways ein Symbol, das anzeigt, dass das Gateway gerade aktualisiert wird.

        Sie können oberhalb des Gateway-Namens auf die Schaltfläche REFRESH klicken, um zu prüfen, ob die Aktualisierung noch im Gange ist. Nachdem das Symbol links neben dem Gateway-Namen verschwunden ist, sollte das Gateway vollständig aktualisiert worden sein, und Sie können mit dem nächsten Schritt fortfahren.

  8. Rufen Sie Ihre externe Funktion erneut auf, um sicherzustellen, dass sie mit den neuen Sicherheitseinschränkungen funktioniert.

Links zu verwandten Google-Dokumentationen

Wenn Sie die Google-Dokumentation zur Cloud Console für diese Schritte lesen möchten, finden Sie unten die entsprechenden Links:

Einige Leser finden vielleicht die folgenden Google-Dokumentationen hilfreich:

Problembehandlung

Plattformunabhängige Symptome

Die tatsächlichen Rückgabewerte für einen Datentyp stimmen nicht mit den erwarteten Rückgabewerten überein

Achten Sie beim Übergeben von Argumenten an oder von einer externen Funktion darauf, dass die passenden Datentypen verwendet werden. Wenn der gesendete Wert nicht zum Datentyp des Empfängers passt, wird der Wert möglicherweise abgeschnitten oder auf andere Weise beschädigt.

Weitere Details dazu finden Sie unter Sicherstellen, dass Argumente der externen Funktion den Argumenten des Remotedienstes entsprechen.

Beim Aufrufen der Funktion mit SQL wird eine Meldung angezeigt, dass die Zeilennummerierung nicht korrekt ist

Mögliche Ursachen

Denken Sie daran, dass die von Ihnen innerhalb jedes Batches zurückgegebenen Zeilennummern monoton aufsteigende Ganzzahlen sein müssen, die bei 0 beginnen. Die Eingabezeilennummern müssen ebenfalls dieser Regel folgen, und jede Ausgabezeile muss mit der entsprechenden Eingabezeile übereinstimmen. So sollte beispielsweise die Ausgabe von Ausgabezeile 0 der Eingabe von Eingabezeile 0 entsprechen.

Mögliche Lösungen
  1. Stellen Sie sicher, dass die von Ihnen zurückgegebenen Zeilennummern mit den erhaltenen Zeilennummern übereinstimmen und dass jeder Ausgabewert die Zeilennummer der entsprechenden Eingabe verwendet. Das sollte funktionieren. Wenn dies nicht der Fall ist, sind möglicherweise die eingegebenen Zeilennummern nicht korrekt oder die Zeilen wurden nicht in der richtigen Reihenfolge zurückgegeben. Fahren Sie daher mit Schritt 2 fort.

  2. Stellen Sie sicher, dass die Ausgabezeilennummern bei 0 beginnen, um 1 erhöht werden und in der richtigen Reihenfolge sind.

Weitere Informationen zu Dateneingabe- und Datenausgabeformaten finden Sie unter Eingabe- und Ausgabedatenformate von Remotediensten.

Beim Versuch, die externe Funktion aufzurufen, wird die Meldung „Error parsing JSON: Invalid response“ angezeigt

Mögliche Ursachen

Die wahrscheinlichste Ursache ist, dass die vom Remotedienst zurückgegebenen JSON-Daten (z. B. AWS Lambda-Funktion) nicht korrekt erstellt wurde.

Mögliche Lösungen

Stellen Sie sicher, dass Sie ein Array von Arrays zurückgeben, wobei für jede empfangene Eingabezeile ein inneres Array zurückgegeben wird. Überprüfen Sie die Beschreibung des Ausgabeformats unter Von Snowflake empfangenes Datenformat.

Eine Fehlermeldung besagt, dass das Format des zurückgegebenen Werts nicht JSON ist

Mögliche Ursachen

Eine mögliche Ursache hierfür ist, dass Ihr Rückgabewert doppelte Anführungszeichen enthält.

Mögliche Lösungen

Obwohl JSON-Zeichenfolgen durch doppelte Anführungszeichen getrennt sind, sollte die Zeichenfolge selbst in den meisten Fällen nicht mit einem Anführungszeichen beginnen und enden. Wenn die eingebetteten doppelten Anführungszeichen falsch sind, entfernen Sie diese.

Eine Fehlermeldung besagt, dass die Funktion die falsche Anzahl von Zeilen erhält

Mögliche Ursachen

Der Remotedienst hat wahrscheinlich versucht, mehr oder weniger Zeilen zurückzugeben, als er erhalten hat. (Denken Sie daran, dass die Funktion, obwohl sie nominell skalar ist, möglicherweise im Feld „body“ des Parameters „event“ mehrere Zeilen empfängt und genau so viele Zeilen zurückgeben sollte, wie sie empfangen hat.)

Mögliche Lösungen

Stellen Sie sicher, dass der Remotedienst für jede erhaltene Zeile genau eine Zeile zurückgibt.

Plattformspezifische Symptome

Request fails with ‚{„message“:“Audiences in Jwt are not allowed“,“code“:403} ‚

Mögliche Ursachen
  • Dieser Fehler zeigt an, dass der Wert im Feld google_audience der API-Integration nicht zulässig ist.

Mögliche Lösungen
  • Überprüfen Sie, ob der google_audience-Wert der API-Integration mit dem Namen des verwalteten Dienstes Ihrer API übereinstimmt, der im Feld „Managed Service Identifier“ des Arbeitsblatts notiert sein sollte.

  • Wenn Sie ein x-google-audiences-Feld zum securityDefinitions-Abschnitt Ihrer API-Konfigurationsdatei hinzugefügt haben, stellen Sie sicher, dass der Wert in Feld x-google-audiences mit dem Wert im google_audience-Feld der API-Integration übereinstimmt.

Weitere Informationen zur Authentifizierung bei Google finden Sie in der Dokumentation zur Google-Dienstkonto-Authentifizierung.

Request fails with ‚{„message“:“Jwt is missing“,“code“:401}‘

Mögliche Ursachen
  • Der Wert des Feldes x-google-issuer im Feld securityDefinitions der Konfigurationsdatei stimmt möglicherweise nicht mit dem Wert des Feldes API_GCP_SERVICE_ACCOUNT der API-Integration (aufgezeichnet im Arbeitsblatt) überein.

  • Der Wert im Feld x-google-issuer kann zusätzliche Leerzeichen enthalten.

Mögliche Lösungen
  • Aktualisieren Sie den Wert für x-google-issuer, damit er mit dem Wert für API_GCP_SERVICE_ACCOUNT übereinstimmt.

  • Entfernen Sie unnötige Leerzeichen.

Request fails with ‚403 Forbidden‘

Mögliche Ursachen

Eine mögliche Ursache für diesen Fehler ist, dass das Dienstkonto, das die Konfiguration verwendet, nicht über die entsprechenden Berechtigungen auf dem Back-End verfügt.

Mögliche Lösungen

Aktualisieren Sie die Berechtigungen des Dienstkontos.