Membuat skalar Lambda UDF - Amazon Redshift

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

Membuat skalar Lambda UDF

Amazon Redshift dapat menggunakan fungsi kustom yang didefinisikan AWS Lambda sebagai bagian dari kueri SQL. Anda dapat menulis skalar Lambda UDF 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 UDF didefinisikan dan dikelola di Lambda, dan Anda dapat mengontrol hak akses untuk menjalankan UDF ini di Amazon Redshift. Anda dapat memanggil beberapa fungsi Lambda dalam kueri yang sama atau menjalankan fungsi yang sama beberapa kali.

Gunakan Lambda UDF dalam klausa pernyataan SQL di mana fungsi skalar didukung. Anda juga dapat menggunakan Lambda UDF dalam pernyataan SQL seperti SELECT, UPDATE, INSERT, atau DELETE.

catatan

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

Jumlah permintaan Lambda bervariasi tergantung pada klausa pernyataan SQL tertentu di mana Lambda UDF digunakan. Misalnya, misalkan fungsi digunakan dalam klausa WHERE 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 pernyataan SELECT pertama untuk masing-masing dan memanggil pernyataan SELECT kedua hanya sekali.

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

Mendaftarkan Lambda UDF

BUAT FUNGSI EKSTERNALPerintah 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 peran IAM yang diizinkan oleh cluster Amazon Redshift untuk diasumsikan dan dipanggil ke Lambda.

  • Satu nama fungsi Lambda yang dipanggil Lambda UDF.

Untuk informasi tentang MEMBUAT FUNGSI EKSTERNAL, lihatBUAT FUNGSI EKSTERNAL.

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 keamanan dan hak istimewa Lambda UDF

Untuk membuat UDF Lambda, pastikan Anda memiliki izin untuk penggunaan di EXFUNC LANGUAGE. Anda harus secara eksplisit memberikan PENGGUNAAN PADA BAHASA EXFUNC atau mencabut PENGGUNAAN PADA BAHASA EXFUNC kepada pengguna, grup, atau publik tertentu.

Contoh berikut memberikan penggunaan pada EXFUNC ke PUBLIK.

grant usage on language exfunc to PUBLIC;

Contoh berikut mencabut penggunaan pada exfunc dari 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 UDF Lambda, pastikan Anda memiliki izin untuk setiap fungsi yang dipanggil. Secara default, izin untuk menjalankan UDF Lambda baru diberikan kepada PUBLIC. Untuk membatasi penggunaan, cabut izin ini dari PUBLIC untuk 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. HIBAH MENCABUT

Mengkonfigurasi parameter otorisasi untuk Lambda UDF

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

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

Membuat peran IAM untuk Lambda

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

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

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

    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 API IAM.

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

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

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

Mengaitkan peran IAM dengan cluster

Lampirkan peran IAM 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 Peran IAM Dengan Cluster di Panduan Manajemen Pergeseran Merah Amazon.

Termasuk peran IAM dalam perintah

Sertakan peran IAM ARN dalam perintah CREATE EXTERNAL FUNCTION. Saat Anda membuat peran IAM, IAM mengembalikan Amazon Resource Name (ARN) untuk peran tersebut. Untuk menentukan peran IAM, 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 Merantai peran IAM di Amazon Redshift.

Menggunakan antarmuka JSON 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 Pengidentifikasi unik universal (UUID) yang secara unik mengidentifikasi setiap permintaan pemanggilan.

UUID yang valid.

Klaster

Nama Sumber Daya Amazon (ARN) lengkap dari cluster.

ARN cluster yang valid.

pengguna

Nama pengguna yang melakukan panggilan. Nama pengguna yang valid.

database

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 array JSON. 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 array JSON 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 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 kueri SQL, Amazon Redshift memastikan keamanan koneksi dengan pertimbangan berikut:

  • IZIN GRANT dan REVOKE. Untuk informasi selengkapnya tentang keamanan dan hak istimewa UDF, lihat. Keamanan dan hak istimewa UDF

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

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