8

我已经设置了一个 AWS Aurora Serverless PostgreSQL 数据库。我还有 API Gateway 运行 Lambda 函数的端点。现在 Lambda 函数正在连接到 DynamoDB,但 RDS 将更适合我的用例。

我已经搜索了几个小时的互联网,但似乎找不到如何通过带有 Node.js 的 Lambda 访问我的 Aurora Serverless DB 的示例。我不确定我的函数需要哪些导入,而且我也很难在 API 中找到正确的方法。

一个让我入门的基本 Node.js 示例将非常有帮助。

提前致谢。

4

3 回答 3

2

您应该能够使用用于连接 PostgreSQL 数据库的相同工具/客户端连接到 Aurora 实例。例如,当您导航到集群的连接和安全选项卡时,您会看到一个端点名称 - 您可以在任何脚本的连接字符串中使用此名称和端口号。

连接到 Amazon Aurora PostgreSQL 数据库集群 创建数据库集群并连接到 Aurora PostgreSQL 数据库集群上的数据库

于 2021-06-22T15:55:21.017 回答
1

有点老的问题,但答案是要么使用AWS.RDSDataService()AWS 开发工具包中的。(在此处查看示例/设置:https ://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RDSDataService.html )

或者使用我们选择的“包装”包data-api-client

const dataApiClient = require('data-api-client');

const db = dataApiClient({
  secretArn: process.env.RDS_AURORA_DATA_API_SECRET_ARN || '',
  resourceArn: process.env.RDS_AURORA_DATA_API_ARN || '',
  database: process.env.RDS_AURORA_DATA_API_DB || '',
  region: 'eu-west-1',
  options: {
    endpoint:
      process.env.IS_OFFLINE
        ? process.env.AURORA_LOCAL_ENDPOINT || 'http://0.0.0.0:8080'
        : null
  }
});

如果您运行本地数据库并希望在本地进行开发,那么在options.endpoint本地运行可以很好地使用 Docker 容器koxudaxi/local-data-api。确保 PG Server 正在运行,然后运行 ​​Docker cmd:

docker run -d --rm -it --name my-data-api -p 8080:80 -e ENGINE=PostgreSQLJDBC -e POSTGRES_HOST=host.docker.internal -e POSTGRES_PORT=
5432 -e POSTGRES_USER=qipdb_user -e POSTGRES_PASSWORD=password -e RESOURCE_ARN=arn:aws:rds:eu-west-1:00000000000:cluster:dummy -e SECRET_ARN=arn:aws:
secretsmanager:eu-west-1:00000000000:secret:dummy koxudaxi/local-data-api

由于数据 API 只使用 SQL,我们选择使用“断开连接”knex的实例来生成 SQL(这是完全可选的,尽管如果喜欢,普通 SQL 可以直接工作):

// knex is only use to produce SQL, it does not have any DB connection!
const connKnex = require('knex');
const knex = connKnex({ client: 'pg' });

然后您可以使用knex获取 SQL,例如:

async function getSomethingFromDB() {
const sql = await knex
    .select('aColumn')
    .from('aTable')
    .where({
      someColumn: 'isSomething'
    })
    .toString();
  const obj = await db.query(sql);

  return !obj.records[0] ? null : obj.records[0];
}
于 2021-12-15T08:13:51.807 回答
1

我在 AWS 开发人员论坛上得到了回复,这正是我开始所需要的。

显然,要使用 PostgreSQL 连接器,您必须在本地构建函数并导入,而不是使用在线 Lambda 控制台。

以下是 MrK 提供的示例代码: https ://forums.aws.amazon.com/message.jspa?messageID=919394

//this imports the postgres connector into the file so it can be used
const { Client } = require('pg');

//instantiates a client to connect to the database, connection settings are passed in
const client = new Client({
    user: '<your db username>',
    host: '<your endpoint>',
    database: '<your database name>',
    password: '<your database password>',
    port: 5432
});

//the lambda funtion code
exports.handler = async (event, context, callback) => {

    try {

        await client.connect();
        callback(null, "Connected Successfully");
        //your code here

    } catch (err) {

        callback(null, "Failed to Connect Successfully");
        throw err;
        //error message
    }

    client.end();

};
于 2019-10-14T02:23:55.277 回答