Menggunakan AWS Lambda dengan Amazon Aurora DSQL - Amazon Aurora DSQL

Amazon Aurora DSQL disediakan sebagai layanan Pratinjau. Untuk mempelajari lebih lanjut, lihat Beta dan Pratinjau di Ketentuan AWS Layanan.

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

Bagian 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 dengan peran 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/core": "^3.587.0", "@aws-sdk/credential-providers": "^3.587.0", "@smithy/protocol-http": "^4.0.0", "@smithy/signature-v4": "^3.0.0", "pg": "^8.11.5" } }
  3. Di folder, buat file bernama index.mjs di direktori dengan konten berikut.

    import { formatUrl } from "@aws-sdk/util-format-url"; import { HttpRequest } from "@smithy/protocol-http"; import { SignatureV4 } from "@smithy/signature-v4"; import { fromNodeProviderChain } from "@aws-sdk/credential-providers"; import { NODE_REGION_CONFIG_FILE_OPTIONS, NODE_REGION_CONFIG_OPTIONS } from "@smithy/config-resolver"; import { Hash } from "@smithy/hash-node"; import { loadConfig } from "@smithy/node-config-provider"; import pg from "pg"; const { Client } = pg; export const getRuntimeConfig = (config) => { return { runtime: "node", sha256: config?.sha256 ?? Hash.bind(null, "sha256"), credentials: config?.credentials ?? fromNodeProviderChain(), region: config?.region ?? loadConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS), ...config, }; }; // Aurora DSQL requires IAM authentication // This class generates auth tokens signed using AWS Signature Version 4 export class Signer { constructor(hostname) { const runtimeConfiguration = getRuntimeConfig({}); this.credentials = runtimeConfiguration.credentials; this.hostname = hostname; this.region = runtimeConfiguration.region; this.sha256 = runtimeConfiguration.sha256; this.service = "dsql"; this.protocol = "https:"; } async getAuthToken() { const signer = new SignatureV4({ service: this.service, region: this.region, credentials: this.credentials, sha256: this.sha256, }); // To connect with a custom database role, set Action as "DbConnect" const request = new HttpRequest({ method: "GET", protocol: this.protocol, hostname: this.hostname, query: { Action: "DbConnectAdmin", }, headers: { host: this.hostname, }, }); const presigned = await signer.presign(request, { expiresIn: 3600, }); // RDS requires the scheme to be removed // https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.html return formatUrl(presigned).replace(`${this.protocol}//`, ""); } } // To connect with a custom database role, set user as the database role name async function dsql_sample(token, endpoint) { const client = new Client({ user: "admin", database: "postgres", host: endpoint, password: token, ssl: { rejectUnauthorized: false }, }); await client.connect(); console.log("[dsql_sample] connected to Aurora DSQL!"); try { console.log("[dsql_sample] attempting transaction."); await client.query("BEGIN; SELECT txid_current_if_assigned(); COMMIT;"); return 200; } catch (err) { console.log("[dsql_sample] transaction attempt failed!"); console.error(err); return 500; } finally { await client.end(); } } // https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html export const handler = async (event) => { const endpoint = event.endpoint; const s = new Signer(endpoint); const token = await s.getAuthToken(); const responseCode = await dsql_sample(token, endpoint); 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"}