Membuat Lambda skalar UDF - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat Lambda skalar UDF

Amazon Redshift dapat menggunakan fungsi kustom yang didefinisikan AWS Lambda sebagai bagian dari SQL kueri. Anda dapat menulis skalar UDFs Lambda dalam bahasa pemrograman apa pun yang didukung oleh Lambda, seperti Java, Go,, Node.js, C # PowerShell, Python, dan Ruby. Atau Anda dapat menggunakan runtime khusus.

Lambda UDFs didefinisikan dan dikelola di Lambda, dan Anda dapat mengontrol hak akses untuk memanggilnya di Amazon Redshift. UDFs Anda dapat memanggil beberapa fungsi Lambda dalam kueri yang sama atau menjalankan fungsi yang sama beberapa kali.

Gunakan Lambda UDFs dalam klausa SQL pernyataan di mana fungsi skalar didukung. Anda juga dapat menggunakan Lambda UDFs dalam SQL pernyataan apa pun sepertiSELECT,, UPDATEINSERT, atau. DELETE

catatan

Menggunakan Lambda UDFs dapat dikenakan biaya tambahan dari layanan Lambda. Apakah itu tergantung pada faktor-faktor seperti jumlah permintaan Lambda (UDFpemanggilan) dan total durasi eksekusi program Lambda. Namun, tidak ada biaya tambahan untuk menggunakan Lambda UDFs di Amazon Redshift. Untuk informasi tentang harga AWS Lambda, lihat AWS Lambda Harga.

Jumlah permintaan Lambda bervariasi tergantung pada klausa SQL pernyataan spesifik di mana Lambda digunakan. UDF Misalnya, fungsi tersebut digunakan dalam WHERE klausa seperti berikut ini.

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

Dalam hal ini, Amazon Redshift memanggil SELECT pernyataan pertama untuk masing-masing dan memanggil SELECT pernyataan kedua hanya sekali.

Namun, menggunakan bagian proyeksi kueri mungkin hanya memanggil fungsi Lambda sekali untuk setiap baris yang memenuhi syarat atau gabungan dalam kumpulan hasil. UDF

Mendaftarkan Lambda UDF

CREATE EXTERNAL FUNCTIONPerintah membuat parameter berikut:

  • (Opsional) Daftar argumen dengan tipe data.

  • Satu tipe data pengembalian.

  • Salah satu nama fungsi dari fungsi eksternal yang disebut oleh Amazon Redshift.

  • Salah satu IAM peran yang diizinkan oleh cluster Amazon Redshift untuk diambil dan dipanggil ke Lambda.

  • Satu nama fungsi Lambda yang dipanggil Lambda. UDF

Untuk informasi tentang CREATE EXTERNALFUNCTION, lihatCREATE EXTERNAL FUNCTION.

Tipe data input dan pengembalian untuk fungsi ini dapat berupa tipe data Amazon Redshift standar apa pun.

Amazon Redshift memastikan bahwa fungsi eksternal dapat mengirim dan menerima argumen dan hasil batch.

Mengelola UDF keamanan dan hak istimewa Lambda

Untuk membuat LambdaUDF, pastikan Anda memiliki izin untuk penggunaan di file. LANGUAGE EXFUNC Anda harus secara eksplisit memberikan USAGE ON LANGUAGE EXFUNC atau mencabut USAGE ON LANGUAGE EXFUNC kepada pengguna, grup, atau publik tertentu.

Contoh berikut memberikan penggunaan EXFUNC kePUBLIC.

grant usage on language exfunc to PUBLIC;

Contoh berikut mencabut penggunaan pada exfunc from PUBLIC dan kemudian memberikan penggunaan ke grup pengguna lambda_udf_devs.

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

Untuk menjalankan LambdaUDF, pastikan Anda memiliki izin untuk setiap fungsi yang dipanggil. Secara default, izin untuk menjalankan Lambda baru UDFs diberikan kepada. PUBLIC Untuk membatasi penggunaan, cabut izin ini dari PUBLIC fungsi tersebut. Kemudian, berikan hak istimewa kepada pengguna atau grup tertentu.

Contoh berikut mencabut eksekusi pada fungsi exfunc_sum dari. PUBLIC Kemudian, itu memberikan penggunaan ke grup pengguna lambda_udf_devs.

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

Superuser memiliki semua hak istimewa secara default.

Untuk informasi selengkapnya tentang pemberian dan pencabutan hak istimewa, lihat dan. GRANT REVOKE

Mengkonfigurasi parameter otorisasi untuk Lambda UDFs

CREATEEXTERNALFUNCTIONPerintah tersebut memerlukan otorisasi untuk menjalankan fungsi Lambda di. AWS Lambda Untuk memulai otorisasi, tentukan peran AWS Identity and Access Management (IAM) saat Anda menjalankan CREATE EXTERNAL FUNCTION perintah. Untuk informasi selengkapnya tentang IAM peran, lihat IAMperan di Panduan IAM Pengguna.

Jika ada IAM peran yang ada dengan izin untuk memanggil fungsi Lambda yang dilampirkan ke klaster Anda, Anda dapat mengganti peran Amazon Resource Name (ARN) di ROLE parameter IAM _ untuk perintah. Bagian berikut menjelaskan langkah-langkah untuk menggunakan IAM peran dalam CREATE EXTERNAL FUNCTION perintah.

Membuat IAM peran untuk Lambda

IAMPeran tersebut memerlukan izin untuk menjalankan fungsi Lambda. Saat membuat IAM peran, berikan izin dengan salah satu cara berikut:

  • Lampirkan AWSLambdaRole kebijakan di halaman Kebijakan izin lampirkan saat membuat IAM peran. AWSLambdaRoleKebijakan ini memberikan izin untuk menjalankan fungsi Lambda yang merupakan persyaratan minimal. Untuk informasi selengkapnya dan kebijakan lainnya, lihat IAMKebijakan berbasis identitas AWS Lambda di Panduan Pengembang.AWS Lambda

  • Buat kebijakan kustom Anda sendiri untuk dilampirkan ke IAM peran Anda dengan lambda:InvokeFunction izin dari semua sumber daya atau fungsi Lambda tertentu dengan fungsi tersebutARN. Untuk informasi selengkapnya tentang cara membuat kebijakan, lihat Membuat IAM kebijakan di Panduan IAM Pengguna.

    Kebijakan contoh berikut memungkinkan pemanggilan Lambda pada fungsi Lambda tertentu.

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

    Untuk informasi selengkapnya tentang sumber daya untuk fungsi Lambda, lihat Sumber daya dan ketentuan untuk tindakan Lambda di Referensi. IAM API

    Setelah membuat kebijakan kustom dengan izin yang diperlukan, Anda dapat melampirkan kebijakan Anda ke IAM peran di halaman kebijakan Lampirkan izin sambil membuat peranIAM.

Untuk langkah-langkah membuat IAM peran, lihat Mengotorisasi Amazon Redshift untuk mengakses layanan AWS lain atas nama Anda di Panduan Manajemen Amazon Redshift.

Jika Anda tidak ingin membuat IAM peran baru, Anda dapat menambahkan izin yang disebutkan sebelumnya ke IAM peran yang ada.

Mengaitkan IAM peran dengan cluster

Lampirkan IAM peran ke cluster Anda. Anda dapat menambahkan peran ke klaster atau melihat peran yang terkait dengan klaster menggunakan Amazon Redshift Management Console,CLI, atau. API Untuk informasi selengkapnya, lihat Mengaitkan IAM Peran Dengan Cluster di Panduan Manajemen Pergeseran Merah Amazon.

Termasuk IAM peran dalam perintah

Sertakan IAM peran ARN dalam CREATE EXTERNAL FUNCTION perintah. Saat Anda membuat IAM peran, IAM mengembalikan Amazon Resource Name (ARN) untuk peran tersebut. Untuk menentukan IAM peran, berikan peran ARN dengan IAM_ROLE parameter. Berikut ini menunjukkan sintaks untuk IAM_ROLE parameter.

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

Untuk menjalankan fungsi Lambda yang berada di akun lain dalam Wilayah yang sama, lihat IAM Peran rantai di Amazon Redshift.

Menggunakan JSON antarmuka antara Amazon Redshift dan AWS Lambda

Amazon Redshift menggunakan antarmuka umum untuk semua fungsi Lambda yang dikomunikasikan oleh Amazon Redshift.

Tabel berikut menunjukkan daftar kolom input yang fungsi Lambda yang ditunjuk yang dapat Anda harapkan untuk payload. JSON

Nama bidang

Deskripsi

Rentang nilai
request_id Sebuah identifier unik universal (UUID) yang secara unik mengidentifikasi setiap permintaan pemanggilan.

ValidUUID.

cluster

Nama Sumber Daya Amazon lengkap (ARN) dari cluster.

Cluster yang validARN.

user

Nama pengguna yang melakukan panggilan. Nama pengguna yang valid.

basis data

Nama database tempat kueri berjalan. Nama database yang valid.

external_function

Nama yang sepenuhnya memenuhi syarat dari fungsi eksternal yang membuat panggilan. Nama fungsi yang sepenuhnya memenuhi syarat yang valid.

query_id

ID kueri dari kueri yang membuat panggilan. ID kueri yang valid.

num_records

Jumlah argumen dalam payload. Nilai 1 - 2^64.

argumen

Payload data dalam format yang ditentukan. Data dalam format array harus berupa JSON array. Setiap elemen adalah record yang merupakan array jika jumlah argumen lebih besar dari 1. Dengan menggunakan array, Amazon Redshift mempertahankan urutan catatan dalam payload.

Urutan JSON array menentukan urutan pemrosesan batch. Fungsi Lambda harus memproses argumen secara iteratif dan menghasilkan jumlah catatan yang tepat. Berikut ini adalah contoh payload.

{ "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] ] }

Output kembali dari fungsi Lambda berisi bidang-bidang berikut.

Nama bidang

Deskripsi

Rentang nilai
keberhasilan Indikasi keberhasilan atau kegagalan fungsi.

Nilai dari "true" atau"false".

error_msg

Pesan kesalahan jika nilai keberhasilan adalah "false" (jika fungsi gagal); jika tidak, bidang ini diabaikan.

Pesan yang valid.

num_records

Jumlah catatan dalam muatan. Nilai 1 - 2^64.

hasil

Hasil panggilan dalam format yang ditentukan. N/A

Berikut ini adalah contoh dari output fungsi Lambda.

{ "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 ] }

Saat Anda memanggil fungsi Lambda dari SQL kueri, Amazon Redshift memastikan keamanan koneksi dengan pertimbangan berikut:

  • GRANTdan REVOKE izin. Untuk informasi selengkapnya tentang UDF keamanan dan hak istimewa, lihatUDFkeamanan dan hak istimewa.

  • Amazon Redshift hanya mengirimkan kumpulan data minimum ke fungsi Lambda yang ditentukan.

  • Amazon Redshift hanya memanggil fungsi Lambda yang ditunjuk dengan peran yang ditentukan. IAM