Schritt 2: Proxydienst (Amazon API Gateway) in der AWS Management Console erstellen¶
Snowflake sendet keine Daten (HTTP-POST-Anforderungen) direkt an einen Remotedienst. Stattdessen sendet Snowflake die Daten an einen Proxydienst, der die Daten von Snowflake an den Remotedienst und vom Remotedienst (d. h. der AWS Lambda-Funktion) zurück an Snowflake leitet.
Unter diesem Thema finden Sie eine Anleitung zum Erstellen und Konfigurieren eines Amazon API Gateway zur Verwendung als Proxydienst für Ihre externe Funktion.
Das Konfigurieren des Amazon API Gateway als Proxydienst erfordert mehrere Schritte:
Erstellen einer neuen IAM (Identitäts- und Zugriffsmanagement)-Rolle in Ihrem AWS-Konto.
Erstellen und Konfigurieren eines Amazon API Gateway-Endpunkts
Sichern des Amazon API Gateway-Endpunkts
Erstellen eines API-Integrationsobjekts in Snowflake
Einrichten einer Vertrauensstellung zwischen Snowflake und der neuen IAM-Rolle
Diese Erstellungsschritte sind aus folgenden Gründen verschachtelt:
Die API-Integration benötigt Informationen vom API Gateway, wie z. B. den ARN (Amazon Resource Name).
Das API Gateway benötigt Informationen von der API-Integration, wie z. B. API_AWS_EXTERNAL_ID und API_AWS_IAM_USER_ARN.
Unter diesem Thema:
Vorheriger Schritt¶
Schritt 1: Remotedienst (AWS Lambda-Funktion) in der Management Console erstellen
Neue IAM-Rolle in Ihrem AWS-Konto erstellen¶
Damit sich Snowflake bei Ihrem AWS-Konto authentifizieren kann, muss einem Snowflake-eigenen IAM-Benutzer (Identitäts- und Zugriffsverwaltung) die Berechtigung erteilt werden, eine IAM-Rolle in Ihrem AWS-Konto zu übernehmen.
Folgende Schritte sind zum Erstellen einer IAM-Rolle erforderlich:
Erstellen Sie eine neue IAM-Rolle: Suchen Sie in der AWS-Konsole nach IAM, klicken Sie auf Roles und dann auf Create Role.
Wenn Sie aufgefordert werden, den Typ der vertrauenswürdigen Entität auszuwählen, wählen Sie Another AWS account aus.
Wenn die Aufforderung Specify accounts that can use this role angezeigt wird, fügen Sie den Wert aus dem Arbeitsblatt unter
Your AWS Account ID
ein.(Verwenden Sie Ihr AWS-Konto-ID, nicht die von Snowflake. Der Snowflake-ARN wird später dieser IAM-Rolle zugeordnet).
Klicken Sie auf Next: Permissions.
Legen Sie optional Berechtigungen fest (Attach permissions policies).
Klicken Sie auf Next: Tags.
Optional können Sie Tags hinzufügen.
Klicken Sie auf Next: Review.
Geben Sie einen Rollennamen ein.
Notieren Sie sich den Rollennamen auf dem Arbeitsblatt unter
New IAM Role Name
.
Klicken Sie auf die Schaltfläche Create role. Nachdem Sie die Rolle erstellt haben:
Notieren Sie sich den Role ARN auf dem Arbeitsblatt unter
New IAM Role ARN
.
API Gateway-Endpunkt erstellen¶
Bevor Sie Ihr API Gateway erstellen und konfigurieren, wählen Sie, ob Sie einen regionalen Endpunkt oder einen privaten Endpunkt verwenden möchten. Weitere Informationen dazu finden Sie unter Wählen Sie Ihren Endpunkttyp aus: Regionaler Endpunkt vs. Privater Endpunkt.
Wenn Sie die Verwendung eines privaten Endpunkts planen, benötigen Sie die VPC (Virtual Private Cloud)-ID, den Sie im Arbeitsblatt erfasst haben.
Die Schritte zum Erstellen eines API Gateway-Endpunkts sind unten aufgeführt:
Wählen Sie auf der AWS Management Console die Option API Gateway aus.
Wählen Sie Create API aus.
Wählen Sie den Typ des Endpunkts (regional oder privat) aus.
Wenn Sie einen regionalen Endpunkt verwenden möchten:
Suchen Sie nach REST API, und klicken Sie auf die Schaltfläche Build.
Wenn Sie einen privaten Endpunkt verwenden möchten:
Suchen Sie nach REST API private, und klicken Sie auf die Schaltfläche Build.
Wichtig
Stellen Sie sicher, dass Sie REST API oder REST API private auswählen. Wählen Sie nicht HTTP API oder eine andere Option aus.
Wählen Sie die Option New API aus.
Geben Sie einen Namen für die neue API ein.
Notieren Sie sich diesen Namen auf dem Arbeitsblatt unter
New API Name
.Wenn Sie aufgefordert werden, einen Endpoint Type auszuwählen, wählen Sie entweder Regional oder Private aus.
Lassen Sie das Feld
VPC Endpoint IDs
leer.Klicken Sie auf die Schaltfläche Create API.
Um eine Ressource zu erstellen, klicken Sie auf Actions und dann auf Create Resource.
Notieren Sie sich den Ressourcennamen auf dem Arbeitsblatt unter
API Gateway Resource Name
.Klicken Sie auf die Schaltfläche Create Resource. Auf dem Bildschirm wird No methods defined for the resource. angezeigt.
Um eine neue Methode zu erstellen, klicken Sie auf Actions und dann auf Create Method.
Wählen Sie in dem kleinen Dropdown-Menüfeld unter dem Ressourcennamen die Option POST aus, und klicken Sie dann auf das graue Häkchen daneben.
Der Integrationstyp (Integration type) muss Lambda Function sein. Wenn diese Option nicht ausgewählt ist, wählen Sie diese aus.
Aktivieren Sie das Kontrollkästchen Use Lambda Proxy integration.
Es ist wichtig, die Lambda-Proxyintegration auszuwählen, da sich JSON ohne Lambda-Proxyintegration von JSON mit Lambda-Proxyintegration unterscheidet. Weitere Informationen zur Lambda-Proxyintegration finden Sie in der AWS-Dokumentation unter:
Fügen Sie in das Feld Lambda Function den Namen ein, den Sie sich auf dem Arbeitsblatt unter
Lambda Function Name
notiert haben.Klicken Sie auf die Schaltfläche Save.
Klicken Sie auf die Schaltfläche Actions, und wählen Sie die Aktion Deploy API aus.
Wählen Sie einen Stagingbereich aus, oder erstellen Sie einen. Klicken Sie auf Deploy.
Unter dem Ressourcennamen muss POST angezeigt sein.
Wenn dies nicht angezeigt wird, müssen Sie möglicherweise den Ressourcenstrukturbaum erweitern, indem Sie auf das Dreieck links neben dem Ressourcennamen klicken.
Klicken Sie auf POST, und notieren Sie sich dann die Invoke URL für die POST-Anforderung auf dem Arbeitsblatt unter
Resource Invocation URL
.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.
Klicken Sie auf Save Changes.
API Gateway testen¶
Überprüfen Sie, ob das API Gateway Ihre Lambda-Funktion aufrufen kann.
Befolgen Sie die AWS-Anleitung zum Testen.
Fügen Sie beim entsprechenden Schritt in der AWS-Anleitung den folgenden Text in das Feld Request Body ein:
{ "data": [ [0, 43, "page"], [1, 42, "life, the universe, and everything"] ] }
Nachdem Sie den Test ausgeführt haben, sollte auf der rechten Seite das Symbol Request, Status, Latency, and Response Body angezeigt werden (möglicherweise müssen Sie Scrollen, um es zu sehen).
Wenn der zurückgegebene Status 200 ist, hat Ihr API-Gateway die korrekte Lambda-Funktion aufgerufen.
(Dieser Überprüfungsschritt überspringt die Authentifizierung und deckt daher keine Probleme mit Berechtigungen auf).
Amazon API Gateway-Endpunkt sichern¶
Eine Übersicht zum Sichern von Proxydienst-Endpunkten wie Amazon API Gateway-Endpunkten finden Sie unter Proxydienst sichern.
So sichern Sie einen Amazon API Gateway-Endpunkt:
An diesem Punkt sollten Sie sich auf dem Bildschirm befinden, der Ihre API Gateway-Informationen anzeigt, und Sie sollten Ihre Ressource und die POST-Methode sehen.
Wenn Sie sich noch nicht dort befinden, gehen Sie wie folgt vor:
Wechseln Sie in der AWS Management Console auf die Seite „API Gateway“.
Wählen Sie Ihr API Gateway aus.
Klicken Sie im linken Fensterbereich auf Resources.
Klicken Sie auf das Feld POST. (Wenn das Feld nicht angezeigt wird, erweitern Sie den Ressourcenstrukturbaum, indem Sie im Resources-Fensterbereich, der normalerweise der zweite Fensterbereich von links ist, auf das Dreieck links neben der Ressource klicken).
Kopieren Sie den Method Request ARN aus dem Feld Method Request in das Feld
Method Request ARN
des Arbeitsblatts.Klicken Sie auf den Titel Method Request.
Klicken Sie neben Authorization auf das Bearbeitungssymbol, und wählen Sie
AWS_IAM
aus, um anzugeben, dass die Methodenanforderung eine AWS_IAM-Autorisierung erfordert.Klicken Sie auf das kleine Häkchen neben dem Menü, um Ihre Wahl zu bestätigen.
Legen Sie die Ressourcenrichtlinie für das API Gateway fest, um anzugeben, wer zum Aufrufen des Gateway-Endpunkts berechtigt ist. Klicken Sie dazu in der linken Spalte des Fensters für die API auf Resource Policy.
Regionaler Endpunkt:
Fügen Sie die unten stehende JSON-formatierte Ressourcenrichtlinienvorlage in den Ressourcenrichtlinien-Editor ein, und ersetzen Sie dann die Platzhalter durch die entsprechenden Werte vom Arbeitsblatt, wie unten beschrieben.
{ "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": "<method_request_ARN>" } ] }
Ersetzen Sie die folgenden Teile der Ressourcenrichtlinie:
Ersetzen Sie die
<12-stellige_Zahl>
durch den Wert, den Sie sich auf dem Arbeitsblatt unterYour AWS Account ID
notiert haben.Ersetzen Sie
<Rolle_für_externe_Funktion>
durch den Rollennamen, den Sie sich auf dem Arbeitsblatt unterNew IAM Role Name
notiert haben.Wenn Ihr AWS-Rollenname 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"
Ersetzen Sie den
<Methodenanforderungs-ARN>
durch den Wert im FeldMethod Request ARN
des Arbeitsblatts. Dies ist der ARN der POST-Methode der Ressource.Bemerkung
Durch Festlegen der Ressource auf den Methodenanforderungs-ARN wird angegeben, dass das API Gateway nur Aufrufe der angegebenen Ressource zulassen soll. Es ist möglich, eine Teilmenge des Methodenanforderungs-ARN als Präfix anzugeben, sodass mehrere Ressourcen desselben API-Gateway aufgerufen werden können.
Wenn beispielsweise 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/*
Nur für Benutzer der GovCloud der US-Regierung:
Aktualisieren Sie den Methodenanforderungs-ARN, um
aws-us-gov
zu verwenden, z. B.:arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
Stellen Sie sicher, dass Sie eine GovCloud-Region verwenden, z. B.
us-gov-west-1
.
Privater Endpunkt:
Fügen Sie die unten stehende Ressourcenrichtlinienvorlage in den Ressourcenrichtlinien-Editor ein, und ersetzen Sie dann die Platzhalter durch die entsprechenden Werte vom Arbeitsblatt, wie unten beschrieben.
{ "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": "<method_request_ARN>", "Condition": { "StringEquals": { "aws:sourceVpc": "<VPC_ID>" } } } ] }
Ersetzen Sie die folgenden Teile der Ressourcenrichtlinie:
Ersetzen Sie <12-digit-number>, <external_function_role> und <method_request_ARN> wie oben für einen regionalen Endpunkt beschrieben.
Ersetzen Sie den Wert im Feld <VPC_ID> durch die Snowflake-VPC-ID Ihrer Region, die Sie sich auf dem Arbeitsblatt unter
Snowflake VPC ID
notiert haben.Nur für Benutzer der GovCloud der US-Regierung:
Aktualisieren Sie den Methodenanforderungs-ARN, um
aws-us-gov
zu verwenden, z. B.:arn:aws-us-gov:execute-api:us-gov-west-1:123456789012:a1b2c3d4e5/*
Stellen Sie sicher, dass Sie eine GovCloud-Region verwenden, z. B.
us-gov-west-1
.
Klicken Sie auf Save, um die Ressourcenrichtlinie zu speichern.
Stellen Sie die aktualisierte API bereit. Klicken Sie dazu auf den API-Namen im Breadcrumb-Pfad oben auf der Seite. Klicken Sie auf Actions und dann auf Deploy API. Wählen Sie Ihren Bereitstellungs-Stagingbereich aus, und klicken Sie auf Deploy.
In den nächsten Schritten erstellen Sie ein Snowflake-API-Integrationsobjekt. Schließen Sie jetzt nicht das AWS-Administrationsfenster. Sie müssen später dorthin zurückkehren.