问题标签 [amazon-rds-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
795 浏览

spring-boot - 当您已经有一个应用程序端池时,您还需要 AWS RDS 代理吗?

作为这个问题的后续

当您已经有一个应用程序端池时,您还需要 AWS RDS 代理吗?

我有一个 Springboot 应用程序,它使用默认的 HikariDataSource 来管理数据库连接池。我们计划使用的数据库驱动程序是 MariaDB Connector/J,因为它可以处理极光故障转移,而且它也是 AWS 在其文档中推荐的驱动程序。该应用程序具有相当稳定的小负载,没有太多的尖峰。但是,它应该是高度可用的。

但是,我们还发现 RDS 代理也可以管理数据库连接池和故障转移。

我想使用 RDS 代理,这样我就可以减轻管理数据库连接池和处理应用程序故障转移的负担。但是,似乎我无法在 Springboot 中关闭应用程序端池(默认情况下它在那里)。而且我还需要一个驱动程序来连接数据库,所以我不妨使用Connector/J。使用我拥有的这些堆栈/工具,RDS 代理是否过多且多余?

0 投票
1 回答
175 浏览

aws-lambda - Lambda 打开 RDS 代理连接

我正在将 lambda(Python) 与 RDS 代理集成,对于网络上的一些示例,我可以看到人们在处理程序之外启动连接,并且从不关闭它。

另一方面,我看到了人们在处理程序中启动连接的示例。

那么,最佳实践是什么?我假设如果您采用第一种方法,空闲客户端连接超时(RDS 代理)应该很短,否则您可能会超过连接限制。

0 投票
0 回答
622 浏览

postgresql - 为什么 RDS 代理会使性能变差?

我在 AWS 中为 postgresql 11 部署了一个 RDS Aurora 集群。我的 lambda 正在通过 IAM 身份验证与该集群通信。由于 lambda 是无服务器的,因此每次触发 lambda 时我都必须创建与数据库的连接,并在完成时关闭连接。这不是很好,因为创建数据库连接很重并且需要时间。我使用 xray 观察了创建新连接需要 150 毫秒的连接性能。它还给 db 集群带来了很大的负载,因为 db 上会有很多短暂的连接。

经过一番搜索,我发现 RDS 代理旨在解决该问题。所以我部署了 RDS 代理以使用用户名/密码连接到我的 Aurora 集群。我的 lambda 通过 IAM 身份验证连接到 RDS 代理。

当我观察创建连接性能时,它变得更糟。创建连接需要超过 500 毫秒,有时甚至需要超过 1 秒。

使用 RDS 代理时如何变得更糟?有什么我没有在代理中配置的吗?

0 投票
1 回答
191 浏览

jdbc - Is JDBC the only option to connect to aws hosted rds from aws lambda function

Like the title asks, im wondering if the only way of connecting to my aws hosted rds through aws lambda function in java is through a jdbc connection?

Does the aws sdk provide a way of doing this, querying the data and returning results without the need for jdbc?

I've looked through the aws api documentation but nothing is jumping out at me in terms of making a connection through the aws sdk alone, it seems to provide functions on more admin type tasks. .

The reason I ask is in the interest of speed, the jdbc connection takes a few seconds for a connection, but thought if the aws sdk could connect it may be quicker?

0 投票
1 回答
336 浏览

amazon-web-services - Golang AWS 开发工具包和 RDS 代理 IAM 身份验证

我正在使用适用于 Go 的 AWS SDK v2 开发 Go 应用程序。我想使用 IAM 角色通过 RDS 代理连接到我的 RDS 数据库进行身份验证。我在 SDK 文档中找到了如何在 SDK v1 中执行此操作的示例,但是对于 SDK v1,我在我的 AWS EKS pod(AWS_ROLE_ARNAWS_WEB_IDENTITY_TOKEN_FILE环境变量)中假设正确的 IAM 角色时遇到了问题。有一个未解决的问题(https://github.com/aws/aws-sdk-go/issues/3101#issuecomment-604739840),但是使用下面的代码我仍然无法使用SDK v1(AWS假设 Worker Node IAM 角色而不是来自 env vars 的 Pod 角色):

相反,我决定尝试使用 SDK v2,但我发现rdsutilsBuildAuthToken均已于 2020 年 9 月 25 日从 SDK 中删除(https://github.com/aws/aws-sdk-go-v2/commit/eecb706f5d1e3ca44aafca5c042ea275f4050764# diff-457ec6738454cb66ee5a04f7b14c84ecf31f37cb2f42f428cc28dc099970f8cd)。现在我迷路了。使用 SDK v1,我无法正确承担 IAM 角色,但使用 SDK v2,我什至看不到任何检索 RDS 令牌的选项。

有没有人在使用 IAM 角色连接到 RDS 代理的 AWS EKS 上部署 Go 应用程序的经验?

0 投票
0 回答
160 浏览

amazon-web-services - 使用 CDK 创建 RDS Proxy 和 RDS 集群第一次失败

我正在尝试创建一个数据库堆栈,它具有 RDS 集群、RDS 代理和其他一些东西。当我第一次运行cdk deploy总是中途失败并显示以下消息:

如果我再次运行cdk deploy它就可以了。

我试图找出导致错误的原因,但我不知道在哪里看,因为 ROLLBACK 立即开始,我看不到更多错误。

你知道我有什么遗漏吗?

0 投票
2 回答
737 浏览

python - AWS RDS 代理错误 (postgres) - RDS 代理当前不支持命令行选项

我尝试使用 postgres RDS 作为端点读取或写入 AWS RDS 代理。该操作适用于 psql,但在使用 pg8000 或 psycopg2 作为 Python 中的客户端库的同一客户端上失败。

如果我将 RDS 直接用作端点(没有 RDS 代理),则该操作适用于 pg8000 和 psycopg2。

sqlaclchemy/psycopg2错误消息:

我使用的代码的最小版本:

pg8000:它停止/等待某事的地方在 core.py 中:

我使用的代码的最小版本:

对于我提到的所有示例,RDS 代理中的日志看起来总是正常的 - 例如:

我通过 RDS 和 RDS 代理上的安全组打开了所有端口,并在 VPC 中使用了 EC2。

我尝试打开和关闭自动提交。

0 投票
1 回答
204 浏览

aws-lambda - 启动新连接时的 AWS RDS 代理 CPU 消耗

我在 Aurora MySQL writer(db.r3.large) 前面使用 RDS Proxy,并开始进行一些性能测试。我的测试包括每分钟发出 500 个请求并检查 Proxy 和 Aurora 的执行情况。

我观察到 Aurora 实例在 100% 的 CPU 利用率下工作了 40 分钟,之后 CPU 消耗下降到几乎 10%,所以我猜 RDS 正在缓存数据或者由于连接已经打开,所以 CPU 利用率下降了那样。

为了减少前 40 分钟的 CPU 消耗,我有两种选择,要么垂直缩放实例,要么减少代理中的连接池大小

在这里采取什么更好的方法?

此外,我有一个只读副本没有被 Proxy 使用,但是我认为 RDS Proxy 不能充当写入器和读取器实例之间的负载平衡器。

谢谢

0 投票
0 回答
347 浏览

laravel - 连接到 Laravel 中的 AWS RDS 代理

我有一个使用 Laravel Vapor 部署到 AWS Lambda 的 Laravel 应用程序。我想使用 RDS 代理而不是直接连接到 RDS 实例。

Laravel Vapor 允许您从仪表板和 CLI 管理数据库和代理。但是,我没有使用 Vapor 来管理我的数据库。我正在通过云形成模板管理它们。

我没有找到将非托管 RDS 代理与 Laravel Vapor 或 Laravel 集成的文档。

我尝试了几件事,但我总是收到以下错误:

以下是我尝试过的事情。

  1. 我已将环境中的直接 RDS 端点替换为代理端点。
  2. 我已授予 Lambda 角色必要的权限。以下是政策:
  1. 我尝试从 Vapor YAML 文件中添加或删除“database-proxy: true”,但错误仍然相同。

我在这里找到了一个 PHP 示例连接到 RDS 代理。

Laravel Vapor 或 Laravel 一般是否支持 RDS 代理?还是我必须使用服务容器覆盖数据库连接逻辑?

请指导。

0 投票
0 回答
132 浏览

aws-lambda - AWS 代理:在 lambda 中使用 sequelize 时 RDS 连接限制

我正在利用 AWS 服务实现一项功能

摘要:我有一个 lambda 可以访问 RDS 中的 Postgres 数据库。不是直接连接到数据库,而是按照架构上的建议访问代理端点。我生成 IAM 令牌没有问题,它在创建 Sequelize 连接时用作密码。

问题:最初我没有使用 rds-proxy。在这种情况下,我利用 lambda 的执行上下文来重用连接。在这里,我没有关闭 lambda 中的连接(它工作正常 - 在这里直接连接到数据库)。但是在代理实现中,在不关闭连接的情况下,代理对数据库的连接会出现很大的峰值,并且正在测试负载限制。以 10req/sec 我看到 90 个连接

关闭 lambda 中的连接后,连接将大大减少到 <20。

但是我在单个 lambda 执行期间嵌套了数据库查询,并且很难重写这些功能。

下面是为创建连接而编写的 Sequelize 连接对象

我尝试使用连接池,但它对 lambda 并没有太大的影响。

如何在不关闭连接的情况下减少建立的连接数。任何建议表示赞赏。提前致谢。