Erstellen einer externen Funktion auf AWS

In diesem Dokument wird eine Möglichkeit zum Erstellen einer externen Funktion auf Amazon AWS gezeigt, einschließlich:

  • Erstellen eines Remotedienstes (Lambda-Funktion auf AWS)

  • Erstellen eines Proxydienstes auf AWS API Gateway

  • Erstellen einer API-Integration in Snowflake

  • Erstellen einer externen Funktion in Snowflake

  • Aufrufen von externen Funktionen

Diese Anleitung setzt voraus, dass Sie bereits mit der Administration von Amazon AWS vertraut sind. Die Anweisungen geben allgemeine Schritte an, die Sie ausführen müssen, es werden allerdings keine detaillierten Anweisungen für die Verwendung der AWS-Administrationskonsole bereitgestellt, da sich die Details ändern können.

Unter diesem Thema:

Voraussetzungen

Sie benötigen:

  • Ein Konto mit AWS, einschließlich Berechtigungen für:

    • AWS-Rollen über IAM (Identitäts- und Zugriffsverwaltung) erstellen

    • Lambda-Funktionen erstellen

    • API-Gateway-Endpunkte erstellen

  • Ein Snowflake-Konto, in dem Sie über ACCOUNTADMIN-Berechtigungen oder eine Rolle mit der Berechtigung CREATE INTEGRATION verfügen.

In diesem Dokument wird davon ausgegangen, dass Sie ein erfahrener AWS-Administrator sind.

Tipp

Während der Erstellung der externen Funktion müssen Sie authentifizierungsbezogene Informationen von Snowflake auf Ihre Cloudplattform und vom Verwaltungsfenster Ihrer Cloudplattform in Snowflake kopieren.

Snowflake empfiehlt, dass Sie beim Befolgen der Anweisungen die Informationen bei einigen Schritten aufzeichnen, um sie in späteren Schritten zu verwenden:

Cloud Platform (IAM) Account Id: _____________________________________________
Lambda Function Name...........: _____________________________________________
New IAM Role Name..............: _____________________________________________
Cloud Platform (IAM) Role ARN..: _____________________________________________
Proxy Service Resource Name....: _____________________________________________
Resource Invocation URL........: _____________________________________________
Method Request ARN.............: _____________________________________________
API_AWS_IAM_USER_ARN...........: _____________________________________________
API_AWS_EXTERNAL_ID............: _____________________________________________

Schritt 1: Remotedienst erstellen (Lambda-Funktion auf AWS)

Es gibt mehrere Möglichkeiten, einen Remotedienst zu erstellen. Dieser Abschnitt zeigt, wie Sie einen Remotedienst erstellen, der als Python-Funktion implementiert ist, die in AWS Lambda ausgeführt wird.

Diese Beispielfunktion in Python-Sprache gibt lediglich die Eingaben zurück.

Diese Funktion akzeptiert Daten in demselben Format, das von Snowflake gesendet wird, und gibt Daten in demselben Format zurück, das von Snowflake gelesen wird.

Diese Python-Funktion empfängt zwei Parameter, event und context. Der Parameter event enthält viele Unterfelder, von denen eines body ist. „Body“ ist ein Wörterbuch, das einen Schlüssel mit dem Namen data enthält. Der entsprechende Wert für data ist eine Zeichenfolge, die die von Snowflake gesendeten Daten im JSON-Format enthält. Da AWS Lambda die von Snowflake gesendete HTTP-POST-Anforderung verarbeitet, den Body extrahiert und den Body innerhalb des Ereignisparameters übergibt, muss diese Beispielfunktion nicht die gesamte HTTP-POST-Anforderung parsen.

Nachdem diese Python-Funktion den Body als Zeichenfolge extrahiert hat, ruft die Funktion eine JSON-Bibliotheksfunktion auf, um die Zeichenfolge in eine Python-Datenstruktur zu konvertieren. Die Funktion extrahiert dann einzelne Zeilen aus dieser Datenstruktur, verarbeitet sie und gibt für jede einen Wert zurück.

Der JSON-Text für den typischen Rückgabewert einer AWS Lambda-Funktion sieht wie folgt aus:

{
"statusCode": <http_status_code>,
"body":
        {
            "data":
                  [
                      [ 0, <value> ],
                      [ 1, <value> ]
                      ...
                  ]
        }
}

Die Daten des Rückgabewerts stimmen mit dem zuvor für die Eingabedaten beschriebenen Format überein. Bei AWS besteht die Konvention für einen HTTP-kompatiblen Dienst darin, den Body in einem JSON-Objekt zurückzugeben, das auch den HTTP-Statuscode enthält.

Führen Sie die folgenden Schritte aus, um diese AWS Lambda-Funktion zu erstellen:

  1. Melden Sie sich bei der AWS Management Console an, falls Sie dies noch nicht getan haben.

  2. Zeichnen Sie die Cloudplattformkonto-ID aus der obigen Vorlage auf.

  3. Wählen Sie „Lambda“ aus.

  4. Wählen Sie „Create function“ aus.

  5. Geben Sie einen Funktionsnamen ein.

    Zeichen Sie aus der Vorlage oben den Namen in der Zeile „Lambda Function Name“ auf.

  6. Wählen Sie die zu verwendende Sprache aus. Wählen Sie in diesem Beispiel „Python 3.7“ aus.

  7. Wählen Sie eine Ausführungsrolle für diese Funktion aus, oder erstellen Sie diese.

    Wählen Sie die entsprechenden Optionen aus, normalerweise „Create a new role with basic Lambda permissions“ zum Erstellen einer neuen Rolle mit grundlegenden Lambda-Berechtigungen.

    (Diese Rolle ist von der Rolle Ihres Cloudkontos und von Ihren Snowflake-Rollen getrennt.)

  8. Öffnen Sie das Fenster, in das Sie den Quellcode Ihrer Funktion einfügen können.

  9. Geben Sie den Code für die Funktion ein. Wenn Sie noch keine eigene Funktion geschrieben haben, können Sie den Standardfunktionscode durch den folgenden Code ersetzen, der die Eingabe wiedergibt. Sie können diesen Code später ersetzen oder aktualisieren, wenn Sie bereit sind, eine benutzerdefinierte Funktion zu erstellen.

    import json
    
    def lambda_handler(event, context):
    
        # 200 is the HTTP status code for "ok".
        status_code = 200
    
        # The return value will contain an array of arrays (one inner array per input row).
        array_of_rows_to_return = [ ]
    
        try:
            # From the input parameter named "event", get the body, which contains
            # the input rows.
            event_body = event["body"]
    
            # Convert the input from a JSON string into a JSON object.
            payload = json.loads(event_body)
            # This is basically an array of arrays. The inner array contains the
            # row number, and a value for each parameter passed to the function.
            rows = payload["data"]
    
            # For each input row in the JSON object...
            for row in rows:
                # Read the input row number (the output row number will be the same).
                row_number = row[0]
    
                # Read the first input parameter's value. For example, this can be a
                # numeric value or a string, or it can be a compound value such as
                # a JSON structure.
                input_value_1 = row[1]
    
                # Read the second input parameter's value.
                input_value_2 = row[2]
    
                # Compose the output based on the input. This simple example
                # merely echoes the input by collecting the values into an array that
                # will be treated as a single VARIANT value.
                output_value = [input_value_1, input_value_2]
    
                # Put the returned row number and the returned value into an array.
                row_to_return = [row_number, output_value]
    
                # ... and add that array to the main array.
                array_of_rows_to_return.append(row_to_return)
    
            json_compatible_string_to_return = json.dumps({"data" : array_of_rows_to_return})
    
        except Exception as err:
            # 400 implies some type of error.
            status_code = 400
            # Tell caller what this function could not handle.
            json_compatible_string_to_return = event_body
    
        # Return the return value and HTTP status code.
        return {
            'statusCode': status_code,
            'body': json_compatible_string_to_return
        }
    
  10. Optional, aber dringend empfohlen: Testen Sie Ihre Funktion.

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

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

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

    Response:
    {
      "statusCode": 200,
      "body": "{\"data\": [[0, [43, \"page\"]], [1, [42, \"life, the universe, and everything\"]]]}"
    }
    ...
    

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

Schritt 2: Proxydienst konfigurieren (API Gateway auf AWS) und API-Integration erstellen (in Snowflake).

Das Konfigurieren von AWS API Gateway als Cloudplattform-Proxydienst erfordert mehrere Schritte:

  • Erstellen einer neuen IAM-Rolle in Ihrem Cloudplattformkonto

  • Erstellen und Konfigurieren eines API Gateway (des Proxydienstes)

  • Sichern Ihres Proxydienst-Endpunkts

  • Erstellen eines API-Integrationsobjekts in Snowflake

  • Einrichten einer Vertrauensstellung zwischen Snowflake und der neuen IAM-Rolle

Die Schritte überlappen sich, da für die API-Integration Informationen von der Cloudplattform (ARN der Cloudplattformrolle) benötigt werden und für das API-Gateway die Werte von API_AWS_EXTERNAL_ID und API_AWS_IAM_USER_ARN der API-Integration.

Neue IAM-Rolle in Ihrem Cloudplattformkonto erstellen

Damit sich Snowflake bei Ihrem AWS-Konto authentifizieren kann, muss einem Snowflake-eigenen IAM-Benutzer die Berechtigung erteilt werden, eine IAM-Rolle in Ihrem AWS-Konto zu übernehmen. Dazu muss eine Vertrauensstellung eingerichtet werden. Um die Vertrauensstellung einzurichten, müssen Sie eine IAM-Rolle in Ihrem AWS-Konto erstellen und mit dem ARN des Snowflake-eigenen IAM-Benutzers konfigurieren. Außerdem müssen Sie in Snowflake ein API-Integrationsobjekt erstellen und das API-Integrationsobjekt mit den Informationen darüber konfigurieren, welche IAM-Rolle übernommen werden soll.

  1. Erstellen Sie eine neue Cloudplattformrolle über IAM (Identitäts- und Zugriffsverwaltung).

  2. Wenn Sie aufgefordert werden, den Typ der vertrauenswürdigen Entität auszuwählen, wählen Sie „Another AWS account“ aus.

  3. Wenn Sie aufgefordert werden, Konten anzugeben, die diese Rolle verwenden können („Specify accounts that can use this role“), fügen Sie die zuvor gespeicherte Cloudplattformkonto-ID ein.

  4. Klicken Sie auf „Next: Permissions“, um zu den Berechtigungseinstellungen zu gelangen.

  5. Legen Sie bei Bedarf Berechtigungen fest („Attach permissions policies“).

  6. Geben Sie einen Rollennamen ein.

    Zeichen Sie den Rollennamen als „New IAM Role Name“ auf.

  7. Nachdem Sie die Rolle erstellt haben:

    • Zeichnen Sie den „Role ARN“ als „Cloud Platform (IAM) Role ARN“ auf.

API im API Gateway (Proxydienst) erstellen und konfigurieren

Stellen Sie sicher, dass Sie einen regionalen Endpunkt verwenden. Die Vorschau dieser Funktion unterstützt nur regionale Endpunkte für das AWS API Gateway. (Eine Beschreibung der verschiedenen Typen von Endpunkten finden Sie unter https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html.)

Obwohl der einzige Typ von Proxydienst, den Snowflake derzeit unterstützt, das AWS API Gateway ist, können Sie eine externe Funktion auch für Snowflake-Instanzen erstellen, die nicht von AWS gehostet werden. Wenn sich Ihr virtuelles Warehouse auf Azure oder GCP befindet, können Sie eine externe Funktion erstellen, die über ein AWS API Gateway auf einen Remotedienst zugreift.

Die Schritte zum Erstellen eines API Gateway sind unten aufgeführt:

  1. Wählen Sie „API Gateway“ aus.

  2. Wählen Sie „Create API“ aus.

  3. Suchen Sie nach „REST API“, und klicken Sie auf die Schaltfläche „Build“.

  4. Wählen Sie das REST-Protokoll aus.

  5. Wählen Sie die Option „New API“ aus.

  6. Schließen Sie die Erstellung der neuen API ab.

  7. Erstellen Sie eine Ressource.

    Zeichen Sie den Ressourcennamen als „Proxy Server Resource Name“ zur späteren Verwendung auf.

  8. Wählen Sie „Create Method“ für diese Ressource aus, und geben Sie die Option POST an.

    Als „Integration type“ muss „Lambda Function“ ausgewählt sein.

  9. Aktivieren Sie das Kontrollkästchen „Use Lambda Proxy Integration“.

  10. Fügen Sie im Feld „Lambda Function“ den zuvor aufgezeichneten Lambda-Funktionsnamen ein.

  11. Speichern Sie die Eingaben.

  12. Wählen Sie die Aktion „Deploy API“ aus.

  13. Wählen Sie einen Stagingbereich für diese Funktion aus, oder erstellen Sie einen.

  14. Klicken Sie auf „POST“, und zeichnen Sie die „Invoke URL“ für die POST-Anforderung auf. Fügen Sie die URL in das Feld „Resource Invocation URL“ der Vorlage ein.

    Stellen Sie sicher, dass die Aufruf-URL den Namen der Ressource enthält. Ist dies nicht der Fall, haben Sie möglicherweise auf die Aufruf-URL für den Stagingbereich und nicht auf die Ressource geklickt.

Proxydienst-Endpunkt von AWS API Gateway sichern

Eine Übersicht zum Sichern von Proxydienst-Endpunkten finden Sie unter Proxydienst-Endpunkt sichern.

So sichern Sie einen AWS API Gateway-Endpunkt:

  1. Geben Sie an, dass für „Method Request“ die Berechtigung „AWS_IAM“ erforderlich ist.

    Zeichnen Sie die Methodenanforderungs-ARN in der Vorlage auf.

  2. Legen Sie die Ressourcenrichtlinie für das API Gateway fest, um anzugeben, wer zum Aufrufen des Gateway-Endpunkts berechtigt ist.

    Die Ressourcenrichtlinie sieht normalerweise wie folgt aus (nur Prinzipal und Ressource müssen angepasst werden):

    {
        "Version": "2012-10-17",
        "Statement":
        [
            {
            "Effect": "Allow",
            "Principal":
                {
                "AWS": "arn:aws:sts::<12-digit-number>:assumed-role/<external_function_role>/snowflake"
                },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-west-2:123456789012:ljkfds890a/*/POST/MyResourceName"
            }
        ]
    }
    

    Ersetzen Sie die folgenden Teile der Ressourcenrichtlinie:

    • Ersetzen Sie die <12-stellige_Nummer> durch die 12-stellige Nummer aus dem Rollen-ARN der Cloudplattform (IAM). In der Regel entspricht dies der Konto-ID der Cloudplattform (IAM).

    • Ersetzen Sie <Rolle_für_externe_Funktion> durch den Rollennamen aus dem Rollen-ARN der Cloudplattform (IAM). In der Regel entspricht dies dem Wert von „New IAM Role Name“.

      Beispiel: Wenn der Rollenname Ihrer Cloudplattform (IAM) wie folgt ist:

      arn:aws:iam::987654321098:role/MyNewIAMRole
      

      dann sollte das Ergebnis wie folgt sein:

      "AWS": "arn:aws:sts::987654321098:assumed-role/MyNewIAMRole/snowflake"
      
    • „Resource“ muss für den POST-Befehl der Ressource auf den Wert von „Method Request ARN“ gesetzt werden.

      Bemerkung

      Durch Festlegen der Ressource auf den Methodenanforderungs-ARN wird angegeben, dass der Proxydienst nur Aufrufe der angegebenen Ressource zulassen soll. Es ist möglich, eine Teilmenge des Methodenanforderungs-ARN als Präfix anzugeben, sodass mehrere Ressourcen desselben Proxydienstes aufgerufen werden können.

      Beispiel: Wenn der Methodenanforderungs-ARN wie folgt lautet:

      arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/POST/MyResource
      

      dann können Sie nur das folgende Präfix angeben:

      arn:aws:execute-api:us-west-1:123456789012:a1b2c3d4e5/*/
      
  3. Stellen Sie die API bereit.

In den nächsten Schritten erstellen Sie ein Snowflake-API-Integrationsobjekt. Schließen Sie jetzt nicht das Verwaltungsfenster Ihrer Cloudplattform. Sie müssen später zu diesem Fenster zurückkehren.

API-Integrationsobjekt in Snowflake erstellen

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

  2. Verwenden Sie eine Snowflake-Rolle mit ACCOUNTADMIN-Berechtigungen oder eine Rolle mit der Berechtigungen CREATE INTEGRATION, 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 my_api_integration_01
      api_provider = aws_api_gateway
      api_aws_role_arn = '<cloud_platform_role_ARN>'
      enabled = true
      api_allowed_prefixes = ('https://')
    ;
    

    Die Rolle <Rollen-ARN_der_Cloudplattform> sollte der Rollen-ARN der Cloudplattform (IAM) sein, den Sie zuvor aufgezeichnet haben.

    Das Feld „api_allowed_prefixes“ sollte die Ressourcenaufruf-URL enthalten, die Sie zuvor aufgezeichnet haben.

    Möglicherweise möchten Sie auch den Namen der API-Integration anpassen, anstatt den Wert aus dem Beispiel zu verwenden.

    Im Folgenden finden Sie ein Beispiel für eine vollständige CREATE API INTEGRATION-Anweisung:

    create or replace api integration demonstration_external_api_integration_01
        api_provider=aws_api_gateway
        api_aws_role_arn='arn:aws:iam::123456789012:role/my_cloud_account_role'
        api_allowed_prefixes=('https://xyz.execute-api.us-west-2.amazonaws.com/production/')
        enabled=true;
    
  4. Führen Sie den oben eingegebenen CREATE API INTEGRATION-Befehl aus.

  5. Führen Sie den Befehl DESCRIBE INTEGRATION aus:

    DESCRIBE INTEGRATION <my_integration_name>;
    

    Beispiel:

    DESCRIBE INTEGRATION my_api_integration_01;
    
  6. Suchen Sie nach der Eigenschaft API_AWS_IAM_USER_ARN, und zeichnen Sie den Wert von „property_value“ dieser Eigenschaft zur späteren Verwendung auf.

  7. Suchen Sie nach der Eigenschaft API_AWS_EXTERNAL_ID, und zeichnen Sie den Wert von „property_value“ dieser Eigenschaft zur späteren Verwendung auf.

    Beachten Sie, dass der Eigenschaftswert von API_AWS_EXTERNAL_ID häufig mit einem Gleichheitszeichen („=“) endet. Das Gleichheitszeichen ist Teil des Wertes. Stellen Sie also sicher, dass Sie es zusammen mit dem Rest des „property_value“ ausschneiden und einfügen.

In den nächsten Schritten kehren Sie zum Verwaltungsfenster Ihrer Cloudplattform zurück. Schließen Sie jetzt nicht das Snowflake-Verwaltungsfenster. Sie müssen später zu diesem Fenster zurückkehren.

Vertrauensstellungen zwischen Snowflake und der neuen IAM-Rolle einrichten

In der AWS Management Console:

  1. Wählen Sie IAM aus.

  2. Wählen Sie Rollen aus.

  3. Suchen Sie nach dem neuen IAM-Rollennamen, den Sie zuvor erstellt und aufgezeichnet haben, und wählen Sie diesen aus.

  4. Klicken Sie auf die Registerkarte „Trust relationships“ und dann auf die Schaltfläche, um die Vertrauensstellung zu bearbeiten.

    Dadurch wird das „Policy Document“ geöffnet, dem Sie Authentifizierungsinformationen hinzufügen können.

  5. Suchen Sie im Richtliniendokument das Feld „Statement.Principal.AWS“, und ersetzen Sie den Wert (nicht den Schlüssel) durch den zuvor gespeicherten Wert für API_AWS_IAM_USER_ARN.

  6. Suchen Sie das Feld „Statement.Condition“. Anfangs sollte dies nur geschweifte Klammern („{}“) enthalten.

  7. Fügen Sie Folgendes zwischen die geschweiften Klammern ein: "StringEquals": { "sts:ExternalId": "xxx" }.

  8. Ersetzen Sie „xxx“ durch den Wert von API_AWS_EXTERNAL_ID, den Sie zuvor aufgezeichnet haben.

  9. Nachdem Sie das „Policy Document“ für die Vertrauensstellung bearbeitet haben, sollte es wie folgt aussehen:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::1234567898012:user/development/development_user"
          },
          "Action": "sts:AssumeRole",
          "Condition": {"StringEquals": { "sts:ExternalId": "EXTERNAL_FUNCTIONS_SFCRole=3_8Hcmbi9halFOkt+MdilPi7rdgOv=" }}
        }
      ]
    }
    
  10. Klicken Sie auf die Schaltfläche, um die Vertrauensrichtlinie zu aktualisieren.

Schritt 3: Externe Funktion erstellen

Kehren Sie nun zu Ihrem Snowflake-Verwaltungsfenster zurück (in das Sie zuvor den Befehl CREATE API INTEGRATION eingegeben haben).

  1. Geben Sie den Befehl CREATE EXTERNAL FUNCTION ein: Dies sollte ungefähr wir folgt aussehen:

    CREATE EXTERNAL FUNCTION my_external_function(n INTEGER, v VARCHAR)
        RETURNS VARIANT
        API_INTEGRATION = <api_integration_name>
        AS '<invocation_url>'
        ;
    

    Der Wert <api_integration_name> sollte den Namen der API-Integration enthalten, die Sie zuvor erstellt haben.

    Der Wert <invocation_url> sollte die Ressourcenaufruf-URL sein, die Sie zuvor aufgezeichnet haben. Stellen Sie sicher, dass Sie nicht nur den Stagingbereichsnamen sondern auch den Ressourcennamen angeben.

    In diesem Beispiel werden zwei Argumente übergeben (ein INTEGER und ein VARCHAR), da dies die Argumente sind, die der Remotedienst erwartet. Wenn Sie Ihren eigenen Remotedienst erstellen, übergeben Sie die entsprechenden Argumente für Ihren Remotedienst.

  2. Wenn Sie den oben eingegebenen CREATE EXTERNAL FUNCTION-Befehl noch nicht ausgeführt haben, führen Sie ihn jetzt aus.

Schritt 4: Externe Funktion aufrufen

  1. Erteilen Sie gegebenenfalls einer oder mehreren Rollen die Berechtigung USAGE für die externe Funktion, damit diese Rollen die externe Funktion aufrufen können. (Eine Rolle muss über USAGE- oder OWNERSHIP- Berechtigungen für diese externe Funktion verfügen.)

  2. Führen Sie Ihre Funktion aus, indem Sie Folgendes aufrufen:

    SELECT my_external_function(99, 'Luftballoons');
    

Problembehandlung

Symptom:

Beim Versuch, die externe Funktion aufzurufen, wird die folgende Fehlermeldung angezeigt:

„SQL execution error: Error assuming AWS_ROLE. Please verify the role and externalId are configured correctly in your AWS policy.“

Mögliche Ursachen:

  • In der AWS Trust Relationship Policy für Ihre Rolle ist ein falscher AWS-ARN angegeben. Mögliche Ursachen hierfür sind:

    • Sie haben keinen Wert angegeben.

    • Sie haben einen Wert angegeben, aber Sie haben den ARN der Cloudplattformrolle (falsch) anstelle des Benutzer-ARN verwendet, was Sie mit dem DESCRIBE INTEGRATION-Befehl in Snowflake prüfen können. Stellen Sie sicher, dass Sie API_AWS_IAM_USER_ARN anstelle von API_AWS_ROLE_ARN verwenden.

  • In Ihrer AWS Trust Relationship Policy ist ein falscher Wert für „std:ExternalId“ angegeben. Mögliche Ursachen hierfür sind:

    • Sie haben keinen Wert angegeben.

    • Sie haben das API-Integrationsobjekt neu erstellt. Durch das erneute Erstellen des API-Objekts wird die externe ID geändert.

Symptom:

Beim Versuch, die externe Funktion aufzurufen, wird die folgende Fehlermeldung angezeigt:

Anforderung für externe Funktion <Funktionsname> fehlgeschlagen. Error: 403 ‚{„Message“:“User: <ARN> is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>“}‘

Mögliche Ursachen:

Verwenden des falschen Rollen-ARN in der Ressourcenrichtlinie für das API Gateway.

Mögliche Lösungen:

Stellen Sie sicher, dass Sie der Vorlage gefolgt sind, aber:

  • die 12-stellige Nummer durch den Wert von „IAM Account ID“ ersetzt haben und

  • die <externe_Benutzerrolle> durch den Wert von „New IAM Role Name“.

Stellen Sie außerdem sicher, dass die Ressource korrekt ist: Es sollte der Wert von „Method Request ARN“ sein.