Memohon AWS Lambdafungsi dari SQL - Layanan Basis Data Relasional Amazon

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

Memohon AWS Lambdafungsi dari SQL

AWS Lambda adalah layanan komputasi berbasis peristiwa yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Ini tersedia untuk digunakan dengan banyak AWS layanan, termasuk RDS. SQL Misalnya, Anda dapat menggunakan fungsi Lambda untuk memproses pemberitahuan peristiwa dari basis data, atau memuat data dari file setiap kali file baru diunggah ke Amazon S3. Untuk mempelajari lebih lanjut tentang Lambda, lihat Apa itu AWS Lambda? di AWS Lambda Panduan Pengembang.

catatan

Memohon AWS Lambda fungsi didukung dalam ini RDS untuk versi PostgreSQL:

  • Semua Postgre 16 versi SQL

  • Semua Postgre 15 versi SQL

  • Postgre SQL 14.1 dan versi minor yang lebih tinggi

  • Postgre SQL 13.2 dan versi minor yang lebih tinggi

  • Postgre SQL 12.6 dan versi minor yang lebih tinggi

Menyiapkan untuk bekerja dengan fungsi Lambda adalah proses multi-langkah yang melibatkan AWS Lambda,, Anda IAMVPC, dan . SQL Berikut ini, Anda dapat menemukan ringkasan langkah-langkah yang diperlukan.

Untuk informasi selengkapnya tentang fungsi Lambda, lihat Memulai Lambda dan AWS Yayasan Lambda di AWS Lambda Panduan Pengembang.

Langkah 1: Konfigurasikan untuk koneksi SQL keluar ke AWS Lambda

Fungsi Lambda selalu berjalan di dalam Amazon VPC yang dimiliki oleh AWS Lambda layanan. Lambda menerapkan akses jaringan dan aturan keamanan untuk ini VPC dan memelihara dan memantau secara otomatis. VPC Anda RDSuntuk instans Postgre SQL DB mengirimkan lalu lintas jaringan ke layanan Lambda. VPC Cara Anda mengonfigurasi ini bergantung pada apakah instans DB Anda bersifat publik atau pribadi.

  • Publik RDSuntuk instans Postgre SQL DB — Instans DB bersifat publik jika terletak di subnet publik di properti AndaVPC, dan jika properti “” instans tersebut. PubliclyAccessible true Untuk menemukan nilai properti ini, Anda dapat menggunakan describe-db-instances AWS CLI perintah. Atau, Anda dapat menggunakan AWS Management Console untuk membuka tab Konektivitas & keamanan dan memeriksa apakah dapat diakses publik adalah Ya. Untuk memverifikasi bahwa instans ada di subnet publik AndaVPC, Anda dapat menggunakan AWS Management Console atau AWS CLI.

    Untuk mengatur akses ke Lambda, Anda menggunakan AWS Management Console atau AWS CLI untuk membuat aturan keluar pada grup VPC keamanan Anda. Aturan keluar menentukan yang TCP dapat menggunakan port 443 untuk mengirim paket ke IPv4 alamat apa pun (0.0.0.0/0).

  • pribadi RDSuntuk instans Postgre SQL DB — Dalam hal ini, properti "PubliclyAccessible" instance ada false atau berada dalam subnet pribadi. Untuk memungkinkan instance bekerja dengan Lambda, Anda dapat menggunakan gateway Network Address Translation)NAT. Untuk informasi lebih lanjut, lihat NATgateway. Atau, Anda dapat mengonfigurasi VPC dengan VPC titik akhir untuk Lambda. Untuk informasi selengkapnya, lihat VPCtitik akhir di Panduan VPC Pengguna Amazon. Titik akhir merespons panggilan yang dilakukan oleh ke fungsi RDSLambda Anda. SQL VPCEndpoint menggunakan DNS resolusi pribadinya sendiri. RDSuntuk Postgre tidak SQL dapat menggunakan VPC titik akhir Lambda sampai Anda mengubah nilai rds.custom_dns_resolution dari nilai default 0 (tidak diaktifkan) menjadi 1. Untuk melakukannya:

    • Buat grup parameter DB kustom.

    • Ubah nilai parameter rds.custom_dns_resolution dari default 0 ke 1.

    • Ubah instans DB Anda untuk menggunakan grup parameter DB kustom.

    • Boot ulang instans agar parameter yang diubah dapat diterapkan.

Anda sekarang VPC dapat berinteraksi dengan AWS Lambda VPCdi tingkat jaringan. Selanjutnya, Anda mengonfigurasi izin menggunakanIAM.

Langkah 2: Konfigurasikan IAM untuk dan SQL AWS Lambda

Memanggil fungsi Lambda dari RDScluster DB istimewa tertentu. Pendekatan ini memberikan hak istimewa instans DB untuk menginvokasi fungsi Lambda yang ditentukan atas nama Anda. Langkah-langkah berikut menunjukkan kepada Anda bagaimana melakukan ini menggunakan AWS CLI.

Untuk mengonfigurasi IAM izin untuk menggunakan RDSinstans Amazon Anda dengan Lambda
  1. Gunakan kebijakan create- AWS CLI perintah untuk membuat IAM kebijakan yang memungkinkan untuk menjalankan fungsi Lambda yang ditentukan. (ID pernyataan (Sid) adalah deskripsi opsional untuk pernyataan kebijakan Anda dan tidak berpengaruh pada penggunaan.) Kebijakan ini memberi instans DB izin minimum yang diperlukan untuk menginvokasi fungsi Lambda yang ditentukan.

    aws iam create-policy --policy-name rds-lambda-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToExampleFunction", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:aws-region:444455556666:function:my-function" } ] }'

    Sebagai alternatif, Anda dapat menggunakan kebijakan AWSLambdaRole yang ditentukan sebelumnya yang memungkinkan Anda menginvokasi fungsi Lambda apa pun. Untuk informasi selengkapnya, lihat Kebijakan berbasis identitas IAM untuk Lambda

  2. Gunakan create-role AWS CLI perintah untuk membuat IAM peran yang dapat diasumsikan oleh kebijakan saat runtime.

    aws iam create-role --role-name rds-lambda-role --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. Menerapkan kebijakan ke peran dengan menggunakan attach-role-policy AWS CLI perintah.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::444455556666:policy/rds-lambda-policy \ --role-name rds-lambda-role --region aws-region
  4. AWS CLI perintah. Langkah terakhir ini memungkinkan pengguna basis data instans DB menginvokasi fungsi Lambda.

    aws rds add-role-to-db-instance \ --db-instance-identifier my-instance-name \ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role \ --region aws-region

Dengan konfigurasi VPC dan IAM konfigurasi selesai, Anda sekarang dapat menginstal aws_lambda ekstensi. (Perhatikan bahwa Anda dapat menginstal ekstensi kapan saja, tetapi sampai Anda menyiapkan VPC dukungan dan IAM hak istimewa yang benar, aws_lambda ekstensi tidak menambahkan apa pun ke RDScluster .) SQL

Langkah 3: Instal aws_lambda ekstensi untuk SQL

Untuk menggunakan AWS Lambda Ekstensi ini menyediakan dengan kemampuan RDS untuk memanggil SQL fungsi Lambda dari Postgre. SQL

Untuk menginstal aws_lambda ekstensi di SQL

Gunakan SQL psql baris perintah Postgre atau pgAdmin alat untuk terhubung ke cluster DB. RDS SQL

  1. Connect ke Anda RDSuntuk instans Postgre SQL DB sebagai pengguna dengan hak istimewa. rds_superuser Pengguna postgres default ditampilkan dalam contoh.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. Instal ekstensi aws_lambda. Ekstensi aws_commons juga diperlukan. Ini menyediakan fungsi pembantu aws_lambda dan banyak ekstensi Aurora lainnya untuk Postgre. SQL Jika belum ada di , itu diinstal dengan seperti yang ditunjukkan berikut. aws_lambda

    CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE; NOTICE: installing required extension "aws_commons" CREATE EXTENSION

aws_lambdaEkstensi dipasang di instans DB utama Anda sekarang dapat membuat struktur kemudahan untuk menginvokasi fungsi Lambda.

Langkah 4: Gunakan fungsi pembantu Lambda dengan ) SQL

Anda dapat menggunakan fungsi pembantu di aws_commons ekstensi untuk menyiapkan entitas yang dapat Anda panggil dengan lebih mudah dari Postgre. SQL Untuk melakukannya, Anda harus memiliki informasi berikut tentang fungsi Lambda:

  • Nama fungsi — Nama, Amazon Resource Name (ARN), versi, atau alias dari fungsi Lambda. IAMKebijakan yang dibuat di Langkah 2: Konfigurasikan IAM untuk instance dan Lambda mewajibkanARN, jadi kami sarankan Anda menggunakan fungsi AndaARN.

  • AWS Wilayah - (Opsional) AWS Wilayah di mana fungsi Lambda berada jika tidak berada di Wilayah yang sama dengan cluster DB . RDS SQL

Untuk menyimpan informasi nama fungsi Lambda, Anda menggunakan fungsi aws_commons.create_lambda_function_arn. Fungsi pembantu ini menciptakan struktur komposit aws_commons._lambda_function_arn_1 dengan detail yang dibutuhkan oleh fungsi invokasi. Berikut ini, Anda dapat menemukan tiga pendekatan alternatif untuk menyiapkan struktur komposit ini.

SELECT aws_commons.create_lambda_function_arn( 'my-function', 'aws-region' ) AS aws_lambda_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn( '111122223333:function:my-function', 'aws-region' ) AS lambda_partial_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn( 'arn:aws:lambda:aws-region:111122223333:function:my-function' ) AS lambda_arn_1 \gset

Salah satu dari nilai ini dapat digunakan dalam panggilan ke fungsi aws_lambda.invoke. Sebagai contoh, lihat Langkah 5: Panggil fungsi Lambda dari cluster DB DB RDS SQL.

Langkah 5: Panggil fungsi Lambda dari cluster DB DB RDS SQL

Fungsi aws_lambda.invoke berperilaku sinkron atau asinkron, bergantung pada invocation_type. Dua alternatif untuk parameter ini adalah RequestResponse (default) dan Event, sebagai berikut.

  • RequestResponse – Jenis invokasi ini sinkron. Ini adalah perilaku default saat panggilan dilakukan tanpa menentukan jenis invokasi. Payload respons mencakup hasil dari fungsi aws_lambda.invoke. Gunakan jenis invokasi ini jika alur kerja Anda perlu menerima hasil dari fungsi Lambda sebelum melanjutkan.

  • Event – Jenis invokasi ini asinkron. Respons tidak mencakup payload yang berisi hasil. Gunakan jenis invokasi ini jika alur kerja Anda tidak memerlukan hasil dari fungsi Lambda untuk melanjutkan pemrosesan.

Sebagai pengujian sederhana terhadap pengaturan Anda, Anda dapat terhubung ke instans DB menggunakan psql dan menginvokasi contoh fungsi dari baris perintah. Misalkan Anda memiliki salah satu fungsi dasar yang disiapkan pada layanan Lambda, seperti fungsi Python sederhana yang diperlihatkan pada tangkapan layar berikut.

Contoh fungsi Lambda yang ditunjukkan pada AWS CLI untuk AWS Lambda
Untuk menginvokasi contoh fungsi
  1. Connect ke instans DB Anda menggunakan psql ataupgAdmin.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. Memanggil fungsi menggunakan nyaARN.

    SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('arn:aws:lambda:aws-region:444455556666:function:simple', 'us-west-1'), '{"body": "Hello from Postgres!"}'::json );

    Respons-nya terlihat sebagai berikut.

    status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)

Jika upaya invokasi tidak berhasil, lihat Pesan kesalahan fungsi Lambda .

Langkah 6: Berikan pengguna lain izin untuk menginvokasi fungsi Lambda

Dalam langkah ini, hanya Anda sebagai rds_superuser yang dapat menginvokasi fungsi Lambda. Untuk mengizinkan pengguna lain menginvokasi fungsi apa pun yang Anda buat, Anda harus memberi mereka izin.

Untuk memberi pengguna lain izin untuk menginvokasi fungsi Lambda
  1. Connect ke instans DB Anda menggunakan psql ataupgAdmin.

    psql -h instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. Jalankan SQL perintah berikut:

    postgres=> GRANT USAGE ON SCHEMA aws_lambda TO db_username; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TO db_username;