Ein skalares Lambda erstellen UDF - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ein skalares Lambda erstellen UDF

Amazon Redshift kann benutzerdefinierte Funktionen verwenden, die in AWS Lambda als Teil von SQL Abfragen definiert wurden. Sie können skalares Lambda UDFs in allen von Lambda unterstützten Programmiersprachen wie Java, Go, Node.js, C# PowerShell, Python und Ruby schreiben. Sie können auch eine benutzerdefinierte Laufzeit verwenden.

Lambda UDFs wird in Lambda definiert und verwaltet, und Sie können die Zugriffsrechte steuern, um diese UDFs in Amazon Redshift aufzurufen. Sie können mehrere Lambda-Funktionen in derselben Abfrage aufrufen oder die gleiche Funktion mehrmals aufrufen.

Verwenden Sie Lambda UDFs in allen Klauseln der SQL Anweisungen, in denen Skalarfunktionen unterstützt werden. Sie können Lambda auch UDFs in jeder SQL Anweisung wieSELECT, UPDATEINSERT, oder DELETE verwenden.

Anmerkung

Für die Nutzung von Lambda UDFs können zusätzliche Gebühren durch den Lambda-Service anfallen. Ob dies der Fall ist, hängt von Faktoren wie der Anzahl der Lambda-Anfragen (UDFAufrufe) und der Gesamtdauer der Lambda-Programmausführung ab. Für die Verwendung von Lambda UDFs in Amazon Redshift fallen jedoch keine zusätzlichen Gebühren an. Informationen zu den AWS Lambda-Preisen finden Sie unter AWS Lambda Preise.

Die Anzahl der Lambda-Anfragen hängt von der spezifischen SQL Anweisungsklausel ab, in der das Lambda verwendet UDF wird. Nehmen wir zum Beispiel an, dass die Funktion in einer WHERE Klausel wie der folgenden verwendet wird.

SELECT a, b FROM t1 WHERE lambda_multiply(a, b) = 64; SELECT a, b FROM t1 WHERE a*b = lambda_multiply(2, 32)

In diesem Fall ruft Amazon Redshift die erste SELECT Anweisung für jede Anweisung und die zweite SELECT Anweisung nur einmal auf.

Bei Verwendung von a UDF im Projektionsteil der Abfrage wird die Lambda-Funktion jedoch möglicherweise nur einmal für jede qualifizierte oder aggregierte Zeile in der Ergebnismenge aufgerufen.

Ein Lambda registrieren UDF

Der Befehl CREATE EXTERNAL FUNCTION erstellt die folgenden Parameter:

  • (Optional) Eine Liste von Argumenten mit Datentyp.

  • Ein Rückgabedatentyp

  • Ein Funktionsname der externen Funktion, die von Amazon Redshift aufgerufen wird.

  • Eine IAM Rolle, die der Amazon Redshift Redshift-Cluster übernehmen und Lambda aufrufen darf.

  • Ein Lambda-Funktionsname, den das Lambda aufruftUDF.

Weitere Informationen dazu CREATE EXTERNAL FUNCTION finden Sie unter. CREATE EXTERNAL FUNCTION

Ein- und Rückgabedaten für diese Funktion können jeden standardmäßigen Amazon-Redshift-Datentyp verwenden.

Amazon Redshift stellt sicher, dass die externe Funktion Batch-Argumente und -Ergebnisse senden und empfangen kann.

Verwaltung der UDF Sicherheit und der Rechte von Lambda

Um ein Lambda zu erstellenUDF, stellen Sie sicher, dass Sie über Berechtigungen zur Verwendung auf dem LANGUAGE EXFUNC verfügen. Sie müssen bestimmten Benutzern, Gruppen LANGUAGE EXFUNC oder USAGE der LANGUAGE EXFUNC Öffentlichkeit ausdrücklich USAGE ON gewähren oder ON entziehen.

Im folgenden Beispiel wird die Nutzung von EXFUNC für gewährtPUBLIC.

grant usage on language exfunc to PUBLIC;

Im folgenden Beispiel wird der Benutzergruppe lambda_udf_devs die Nutzung von exfunc entzogen PUBLIC und anschließend die Nutzung gewährt.

revoke usage on language exfunc from PUBLIC; grant usage on language exfunc to group lambda_udf_devs;

Um ein Lambda auszuführenUDF, stellen Sie sicher, dass Sie für jede aufgerufene Funktion berechtigt sind. Standardmäßig wird die Erlaubnis erteilt, neues Lambda UDFs auszuführen. PUBLIC Um die Nutzung einzuschränken, widerrufen Sie diese Berechtigung PUBLIC für die Funktion. Gewähren Sie die Berechtigung anschließend den spezifischen Benutzern oder Gruppen.

Im folgenden Beispiel wird die Ausführung der Funktion exfunc_sum von aufgehoben. PUBLIC Daraufhin wird die Nutzung der Benutzergruppe lambda_udf_devs erlaubt.

revoke execute on function exfunc_sum(int, int) from PUBLIC; grant execute on function exfunc_sum(int, int) to group lambda_udf_devs;

Superuser haben standardmäßig alle Berechtigungen.

Weitere Informationen zum Erteilen und Widerrufen von Berechtigungen finden Sie unter GRANT und REVOKE.

Konfiguration des Autorisierungsparameters für Lambda UDFs

Der CREATE EXTERNAL FUNCTION Befehl erfordert eine Autorisierung zum Aufrufen von Lambda-Funktionen in. AWS Lambda Um die Autorisierung zu starten, geben Sie bei der Ausführung des Befehls eine Rolle AWS Identity and Access Management (IAM) an CREATE EXTERNALFUNCTION. Weitere Informationen zu IAM Rollen finden Sie unter IAMRollen im IAMBenutzerhandbuch.

Wenn Ihrem Cluster eine bestehende IAM Rolle mit Berechtigungen zum Aufrufen von Lambda-Funktionen zugewiesen ist, können Sie Ihre Rolle Amazon Resource Name (ARN) im ROLE Parameter IAM _ für den Befehl ersetzen. In den folgenden Abschnitten werden die Schritte zur Verwendung einer IAM Rolle im CREATE EXTERNAL FUNCTION Befehl beschrieben.

Eine IAM Rolle für Lambda erstellen

Die IAM Rolle benötigt die Erlaubnis, Lambda-Funktionen aufzurufen. Geben Sie beim Erstellen der IAM Rolle die Berechtigung auf eine der folgenden Arten ein:

  • Hängen Sie die AWSLambdaRole Richtlinie auf der Seite „Berechtigungsrichtlinie anhängen“ an, während Sie eine IAM Rolle erstellen. DieAWSLambdaRole-Richtlinie erteilt Berechtigungen zum Aufrufen von Lambda-Funktionen, was die minimale Anforderung ist. Weitere Informationen und andere Richtlinien finden Sie unter Identitätsbasierte IAM Richtlinien für AWS Lambda im AWS Lambda Entwicklerhandbuch.

  • Erstellen Sie Ihre eigene benutzerdefinierte Richtlinie, die Sie mit der lambda:InvokeFunction Erlaubnis aller Ressourcen oder einer bestimmten Lambda-Funktion mit ARN der dieser Funktion an Ihre IAM Rolle anhängen können. Weitere Informationen zum Erstellen einer Richtlinie finden Sie unter IAMRichtlinien erstellen im IAMBenutzerhandbuch.

    Die folgende Beispielrichtlinie ermöglicht das Aufrufen von Lambda für eine bestimmte Lambda-Funktion.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Invoke", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" } ] }

    Weitere Informationen zu Ressourcen für Lambda-Funktionen finden Sie unter Ressourcen und Bedingungen für Lambda-Aktionen in der IAM API Referenz.

    Nachdem Sie Ihre benutzerdefinierte Richtlinie mit den erforderlichen Berechtigungen erstellt haben, können Sie beim Erstellen einer IAM Rolle Ihre Richtlinie auf der Seite „Zugriffsberechtigungen anhängen“ an IAM die Rolle anhängen.

Schritte zum Erstellen einer IAM Rolle finden Sie unter Autorisieren von Amazon Redshift, in Ihrem Namen auf andere AWS Services zuzugreifen im Amazon Redshift Management Guide.

Wenn Sie keine neue IAM Rolle erstellen möchten, können Sie die zuvor genannten Berechtigungen zu Ihrer bestehenden Rolle hinzufügen. IAM

Dem Cluster eine IAM Rolle zuordnen

Ordnen Sie die IAM Rolle Ihrem Cluster zu. Sie können einem Cluster eine Rolle hinzufügen oder die mit einem Cluster verknüpften Rollen mithilfe der Amazon Redshift Management Console anzeigen,CLI, oderAPI. Weitere Informationen finden Sie unter Zuordnen einer IAM Rolle zu einem Cluster im Amazon Redshift Management Guide.

Inklusive der IAM Rolle im Befehl

Nehmen Sie die IAM Rolle ARN in den CREATE EXTERNAL FUNCTION Befehl auf. Wenn Sie eine IAM Rolle erstellen, wird ein Amazon-Ressourcenname (ARN) für die Rolle IAM zurückgegeben. Um eine IAM Rolle anzugeben, geben Sie der Rolle ARN den IAM_ROLE Parameter an. Im Folgenden wird die Syntax für den Parameter IAM_ROLE gezeigt.

IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'

Informationen zum Aufrufen von Lambda-Funktionen, die sich in anderen Konten in derselben Region befinden, finden Sie unter Verkettung von IAM Rollen in Amazon Redshift.

Verwenden der JSON Schnittstelle zwischen Amazon Redshift und AWS Lambda

Amazon Redshift verwendet eine gemeinsame Schnittstelle für alle Lambda-Funktionen, mit denen Amazon Redshift kommuniziert.

Die folgende Tabelle zeigt die Liste der Eingabefelder für die angegebenen Lambda-Funktionen, die Sie für die JSON Nutzlast erwarten können.

Feldname

Beschreibung

Wertebereich
request_id Ein universell eindeutiger Bezeichner (UUID), der jede Aufrufanforderung eindeutig identifiziert.

Ein gültiger. UUID

Cluster

Der vollständige Amazon-Ressourcenname (ARN) des Clusters.

Ein gültiger ClusterARN.

user

Der Name des Benutzers, der den Aufruf ausführt. Ein gültiger Benutzername.

Datenbank

Der Name der -Datenbank, auf der die Abfrage ausgeführt wird. Ein gültiger Datenbankname.

external_function

Der vollqualifizierte Name der externen Funktion, die den Aufruf ausführt. Ein gültiger vollqualifizierter Funktionsname.

query_id

Die Abfrage-ID der Abfrage, die den Aufruf ausführt. Eine gültige Abfrage-ID.

num_records

Die Anzahl der Argumente in der Nutzlast. Ein Wert von 1 - 2^64.

arguments

Die Datennutzlast im angegebenen Format. Die Daten im Array-Format müssen ein JSON Array sein. Jedes Element ist ein Datensatz, der ein Array ist, wenn die Anzahl der Argumente größer als 1 ist. Durch die Verwendung eines Arrays behält Amazon Redshift die Reihenfolge der Datensätze in der Nutzlast bei.

Die Reihenfolge des JSON Arrays bestimmt die Reihenfolge der Stapelverarbeitung. Die Lambda Funktion muss die Argumente iterativ wiederholen und die genaue Anzahl von Datensätzen erzeugen. Im Folgenden sehen Sie ein Beispiel für eine Nutzlast.

{ "request_id" : "23FF1F97-F28A-44AA-AB67-266ED976BF40", "cluster" : "arn:aws:redshift:xxxx", "user" : "adminuser", "database" : "db1", "external_function": "public.foo", "query_id" : 5678234, "num_records" : 4, "arguments" : [ [ 1, 2 ], [ 3, null], null, [ 4, 6] ] }

Die Ausgabe der Lambda-Funktion sollte folgende Felder umfassen.

Feldname

Beschreibung

Wertebereich
Erfolg Der Hinweis auf Erfolg oder Fehlschlag der Funktion.

Ein Wert von "true" oder "false".

error_msg

Die Fehlermeldung, wenn der Erfolgswert "false" ist (wenn die Funktion fehlschlägt); andernfalls wird dieses Feld ignoriert.

Eine gültige Nachricht.

num_records

Die Anzahl der Datensätze in der Nutzlast. Ein Wert von 1 - 2^64.

results

Die Ergebnisse des Aufrufs im angegebenen Format. N/A

Im Folgenden sehen Sie ein Beispiel für die Ausgabe der Lambda-Funktion.

{ "success": true, // true indicates the call succeeded "error_msg" : "my function isn't working", // shall only exist when success != true "num_records": 4, // number of records in this payload "results" : [ 1, 4, null, 7 ] }

Wenn Sie Lambda-Funktionen von SQL Abfragen aus aufrufen, gewährleistet Amazon Redshift die Sicherheit der Verbindung unter Berücksichtigung der folgenden Überlegungen:

  • GRANTund REVOKE Berechtigungen. Weitere Informationen zu UDF Sicherheit und Rechten finden Sie unterUDFSicherheit und Privilegien.

  • Amazon Redshift sendet nur den Mindestdatensatz an die dafür vorgesehene Lambda-Funktion.

  • Amazon Redshift ruft nur die angegebene Lambda-Funktion mit der angegebenen IAM Rolle auf.