本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Lambda 搭配 Amazon Aurora DSQL 使用
下列教學課程說明如何將 Lambda 與 Aurora DSQL 搭配使用
先決條件
-
建立 Lambda 函數的授權。如需詳細資訊,請參閱 Lambda 入門。
-
建立或修改 Lambda 建立之 IAM 政策的授權。您需要許可
iam:CreatePolicy
和iam:AttachRolePolicy
。如需詳細資訊,請參閱 IAM 的動作、資源和條件索引鍵。 -
您必須已安裝 npm v8.5.3 或更高版本。
-
您必須已安裝 zip v3.0 或更新版本。
在 中建立新的 函數 AWS Lambda。
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/lambda/
開啟 AWS Lambda 主控台。 -
選擇 Create function (建立函數)。
-
提供名稱,例如
dsql-sample
。 -
請勿編輯預設設定,以確保 Lambda 建立具有基本 Lambda 許可的新角色。
-
選擇 Create function (建立函數)。
授權您的 Lambda 執行角色連線到您的叢集
-
在 Lambda 函數中,選擇組態 > 許可。
-
選擇角色名稱以在 IAM 主控台中開啟執行角色。
-
選擇新增許可 > 建立內嵌政策,然後使用 JSON 編輯器。
-
在動作中貼上下列動作,以授權您的 IAM 身分使用 管理員資料庫角色進行連線。
"Action": ["dsql:DbConnectAdmin"],
注意
我們使用管理員角色,將入門的先決條件步驟降至最低。您不應該為生產應用程式使用管理員資料庫角色。請參閱 以使用資料庫角色和 IAM 身分驗證了解如何建立具有最低資料庫許可的授權的自訂資料庫角色。
-
在資源中,新增叢集的 Amazon Resource Name (ARN)。您也可以使用萬用字元。
"Resource": ["*"]
-
選擇下一步。
-
輸入政策的名稱,例如
dsql-sample-dbconnect
。 -
選擇建立政策。
建立要上傳至 Lambda 的套件。
-
建立名為 的資料夾
myfunction
。 -
在 資料夾中,
package.json
使用下列內容建立名為 的新檔案。{ "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
-
在 資料夾中,使用下列內容
index.mjs
在 目錄中建立名為 的檔案。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; };
-
使用下列命令來建立套件。
npm install zip -r pkg.zip .
上傳程式碼套件並測試您的 Lambda 函數
-
在 Lambda 函數的程式碼索引標籤中,選擇從 > .zip 檔案上傳
-
上傳
pkg.zip
您建立的 。如需詳細資訊,請參閱使用 .zip 檔案封存部署 Node.js Lambda 函數。 -
在 Lambda 函數的測試索引標籤中,貼上下列 JSON 承載,然後修改它以使用您的叢集 ID。
-
在 Lambda 函數的測試索引標籤中,使用以下修改的事件 JSON 來指定叢集的端點。
{"endpoint": "replace_with_your_cluster_endpoint"}
-
輸入事件名稱,例如
dsql-sample-test
。選擇儲存。 -
選擇測試。
-
選擇詳細資訊以展開執行回應和日誌輸出。
-
如果成功,Lambda 函數執行回應應傳回 200 狀態碼。
{"statusCode": 200, "endpoint": "your_cluster_endpoint"}
如果資料庫傳回錯誤,或者如果與資料庫的連線失敗,Lambda 函數執行回應會傳回 500 狀態碼。
{"statusCode": 500,"endpoint": "your_cluster_endpoint"}