Menggunakan AWS Lambda dengan Amazon Aurora DSQL - Amazon Aurora DSQL

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

Menggunakan AWS Lambda dengan Amazon Aurora DSQL

Tutorial berikut menjelaskan cara menggunakan Lambda dengan Aurora DSQL

Prasyarat

  • Otorisasi untuk membuat fungsi Lambda. Untuk informasi selengkapnya, lihat Memulai dengan Lambda.

  • Otorisasi untuk membuat atau memodifikasi kebijakan IAM yang dibuat oleh Lambda. Anda perlu izin iam:CreatePolicy daniam:AttachRolePolicy. Untuk informasi selengkapnya, lihat Tindakan, sumber daya, dan kunci kondisi untuk IAM.

  • Anda harus menginstal npm v8.5.3 atau lebih tinggi.

  • Anda harus menginstal zip v3.0 atau lebih tinggi.

Buat fungsi baru di AWS Lambda.
  1. Masuk ke AWS Management Console dan buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Pilih Buat fungsi.

  3. Berikan nama, sepertidsql-sample.

  4. Jangan mengedit pengaturan default untuk memastikan bahwa Lambda membuat peran baru dengan izin Lambda dasar.

  5. Pilih Buat fungsi.

Otorisasi peran eksekusi Lambda Anda untuk terhubung ke klaster Anda
  1. Di fungsi Lambda Anda, pilih Konfigurasi > Izin.

  2. Pilih nama peran untuk membuka peran eksekusi di konsol IAM.

  3. Pilih Tambahkan Izin > Buat kebijakan sebaris, dan gunakan editor JSON.

  4. Di Action paste dalam tindakan berikut untuk mengotorisasi identitas IAM Anda untuk terhubung menggunakan peran database admin.

    "Action": ["dsql:DbConnectAdmin"],
    catatan

    Kami menggunakan peran admin untuk meminimalkan langkah-langkah prasyarat untuk memulai. Anda tidak boleh menggunakan peran database admin untuk aplikasi produksi Anda. Lihat Menggunakan peran database dan otentikasi IAM untuk mempelajari cara membuat peran basis data kustom dengan otorisasi yang memiliki izin paling sedikit ke database Anda.

  5. Di Resource, tambahkan Amazon Resource Name (ARN) klaster Anda. Anda juga dapat menggunakan wildcard.

    "Resource": ["*"]
  6. Pilih Berikutnya.

  7. Masukkan nama untuk kebijakan tersebut, sepertidsql-sample-dbconnect.

  8. Pilih Buat kebijakan.

Buat paket untuk diunggah ke Lambda.
  1. Buat folder bernamamyfunction.

  2. Di folder, buat file baru bernama package.json dengan konten berikut.

    { "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
  3. Di folder, buat file bernama index.mjs di direktori dengan konten berikut.

    import { DsqlSigner } from "@aws-sdk/dsql-signer"; import pg from "pg"; import assert from "node:assert"; const { Client } = pg; async function dsql_sample(clusterEndpoint, region) { let client; try { // The token expiration time is optional, and the default value 900 seconds const signer = new DsqlSigner({ hostname: clusterEndpoint, region, }); const token = await signer.getDbConnectAdminAuthToken(); // <https://node-postgres.com/apis/client> // By default `rejectUnauthorized` is true in TLS options // <https://nodejs.org/api/tls.html#tls_tls_connect_options_callback> // The config does not offer any specific parameter to set sslmode to verify-full // Settings are controlled either via connection string or by setting // rejectUnauthorized to false in ssl options client = new Client({ host: clusterEndpoint, user: "admin", password: token, database: "postgres", port: 5432, // <https://node-postgres.com/announcements> for version 8.0 ssl: true, rejectUnauthorized: false }); // Connect await client.connect(); // Create a new table await client.query(`CREATE TABLE IF NOT EXISTS owner ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(30) NOT NULL, city VARCHAR(80) NOT NULL, telephone VARCHAR(20) )`); // Insert some data await client.query("INSERT INTO owner(name, city, telephone) VALUES($1, $2, $3)", ["John Doe", "Anytown", "555-555-1900"] ); // Check that data is inserted by reading it back const result = await client.query("SELECT id, city FROM owner where name='John Doe'"); assert.deepEqual(result.rows[0].city, "Anytown") assert.notEqual(result.rows[0].id, null) await client.query("DELETE FROM owner where name='John Doe'"); } catch (error) { console.error(error); throw new Error("Failed to connect to the database"); } finally { client?.end(); } Promise.resolve(); } // https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html export const handler = async (event) => { const endpoint = event.endpoint; const region = event.region; const responseCode = await dsql_sample(endpoint, region); const response = { statusCode: responseCode, endpoint: endpoint, }; return response; };
  4. Gunakan perintah berikut untuk membuat paket.

    npm install zip -r pkg.zip .
Unggah paket kode dan uji fungsi Lambda Anda
  1. Di tab Kode fungsi Lambda Anda, pilih Unggah dari> file.zip

  2. Unggah yang pkg.zip Anda buat. Untuk informasi selengkapnya, lihat Menerapkan fungsi Lambda Node.js dengan arsip file.zip.

  3. Di tab Test fungsi Lambda Anda, tempelkan payload JSON berikut, dan modifikasi untuk menggunakan ID cluster Anda.

  4. Di tab Uji fungsi Lambda Anda, gunakan Event JSON berikut yang dimodifikasi untuk menentukan titik akhir klaster Anda.

    {"endpoint": "replace_with_your_cluster_endpoint"}
  5. Masukkan nama Acara, sepertidsql-sample-test. Pilih Simpan.

  6. Pilih Uji.

  7. Pilih Detail untuk memperluas respons eksekusi dan output log.

  8. Jika berhasil, respons eksekusi fungsi Lambda harus mengembalikan kode status 200.

    {"statusCode": 200, "endpoint": "your_cluster_endpoint"}

    Jika database mengembalikan kesalahan atau jika koneksi ke database gagal, respons eksekusi fungsi Lambda mengembalikan kode status 500.

    {"statusCode": 500,"endpoint": "your_cluster_endpoint"}