gpt4 book ai didi

aws-lambda - 使用 AWS RDS 代理进行 Sequelize

转载 作者:行者123 更新时间:2023-12-05 07:02:36 30 4
gpt4 key购买 nike

我正在尝试在我的 lambda 上使用 AWS RDS 代理来代理我们的数据库 (Aurora MySQL)。我找不到任何关于 Sequelize 的具体说明,但似乎我需要让 RDS 代理工作的只是创建一个签名者,用它来获取我的 token ,然后将 token 作为我的密码传递给 Sequelize 构造函数:

const signer = new RDS.Signer({
region: process.env.REGION,
hostname: process.env.DB_PROXY_ENDPOINT,
port: 3306,
username: process.env.DB_PROXY_USERNAME,
});

const token = signer.getAuthToken({
username: process.env.DB_PROXY_USERNAME,
});

const connection = new Sequelize(process.env.DB_DATABASE, process.env.DB_PROXY_USERNAME, token, {
dialect: 'mysql',
host: process.env.DB_HOSTNAME,
port: process.env.DB_PORT,
pool: {
acquire: 15000,
idle: 9000,
max: 10
},
});

RDS 代理已连接到我的 lambda,我可以记录 token ,但是一旦我对数据库发出请求,我的连接就会超时。有谁知道我在这个设置中是否遗漏了什么?

最佳答案

以下是我如何使用 MySql( typescript )从 AWS Lambda 连接到 RDS 代理

import { APIGatewayProxyEvent, APIGatewayProxyResult } from "aws-lambda";
import { Signer } from "@aws-sdk/rds-signer";
import { Sequelize } from "sequelize";

//other code

const signer = new Signer({
hostname: host
port: port,
region: region,
username: username,
});

const sequelize = new Sequelize({
username,
host,
port,
dialect: "mysql",
dialectOptions: {
ssl: "Amazon RDS",
authPlugins: {
mysql_clear_password: () => () => signer.getAuthToken(),
},
},
});

// some more code

您的连接超时可能是由于某些身份验证错误造成的,可能是因为您传递 token 的方式。我会仔细检查您的 RDS 代理 IAM 角色是否对数据库用户凭据的 Secrets Manager 资源具有 secretsmanager:GetSecretValue 权限,以及对用于加密的 key 具有 kms:Decrypt secret 。并且您的 lambda(或您的代码在其中运行的任何上下文)具有 rds-db:connect 权限。

注意:这不包括连接池选项,我仍在尝试找出如何优化它。查看Using sequelize in AWS Lambda文档作为起点。

关于aws-lambda - 使用 AWS RDS 代理进行 Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63524964/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com