我在 AWS 中为 postgresql 11 部署了 RDS Aurora 集群。我的 lambda 正在通过 IAM 身份验证与该集群进行通信。由于 lambda 是无服务器的,因此每次触发 lambda 时我都必须创建与数据库的连接,并在完成时关闭连接。这不是很好,因为创建数据库连接很繁重并且需要时间。我使用 xray 来观察连接性能,创建新连接需要 150 毫秒。它还会给数据库集群带来很大的负载,因为数据库上会有许多短暂的连接。
经过一番搜索,我发现 RDS proxy 就是为了解决这个问题而设计的。因此,我部署了 RDS 代理来使用用户名/密码连接到我的 Aurora 集群。我的 lambda 通过 IAM 身份验证连接到 RDS 代理。
当我观察创建连接性能时,情况变得更糟。创建连接需要500ms以上,有时甚至需要1秒以上。
为什么使用RDS代理时情况更糟?代理中有什么我没有配置的吗?
postgresql amazon-web-services amazon-rds amazon-aurora amazon-rds-proxy
关于将Web请求绑定到模型对象,我在使用Spring的DataBinder和ConversionService的使用和目的时遇到了一些困惑.出现这种情况是因为我最近尝试通过添加来使用JSR-303验证.
在此之前我用过:
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="mypackage.GlobalWebBindingInitializer" />
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这很好,因为我想要一个可供多个控制器使用的全局DataBinder.在GlobalWebBindingInitialzer类中实现以下几个:
binder.registerCustomEditor(MyClass.class, new PropertyEditorSupport(MyClass.class)
Run Code Online (Sandbox Code Playgroud)
但是我想使用@Valid注释并添加.这样做的副作用是上面的AnnotationMethodHandlerAdapter bean已经被定义为注释驱动的一部分,因此忽略了我的全局数据绑定器.
所以现在我创建了这个类:
public class MyClassConverter implements Converter<String, MyClass>
Run Code Online (Sandbox Code Playgroud)
我很迷惑.如果我想使用我应该使用转换服务而不是数据仓?
当我尝试使用 AWS CodeBuild 从 ECR 中提取映像作为 Docker Build 的一部分时遇到凭据问题。
对于上下文,我们的设置是这样的:
Codebuild 正在调用我们编写的内部 docker 工具。这个工具然后正在做 docker 构建。可以使这更容易理解的示例命令:
../codebuild-templates/ourtoolscript docker -v
Run Code Online (Sandbox Code Playgroud)
“ourtoolscript”只是一个设置一堆环境变量的bash脚本,最后用我们指定的命令调用docker run。
问题
我们正在尝试在此工具中进行 docker 构建。它可以在本地工作,也可以与其他不从 ECR 拉取映像进行构建的存储库一起使用。
我们正在这样做,因此所有标记逻辑和所有内容都是工具中的一个脚本,我们可以将其应用于每个存储库。所以说只在工具之外做一个 docker build 是不可接受的解决方案。
如果 docker 文件从 ECR 中提取“FROM”,它将失败:
time="2019-03-12T14:48:25Z" level=error msg="Error listing credentials" error="ecr: Failed to get authorization token: MissingRegion: could not find region configuration"
Get https://URLTOECRWITHTAG: no basic auth credentials
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
我所知道的:
我已经通过 AWS API Gateway 和 AWS Lambda 设置了无服务器 API,它们利用 AWS RDS 代理连接到 RDS MySQL 数据库。
我通过执行以下操作在每个 Lambda 执行上打开连接:
sequelize = new Sequelize(process.env.DB, process.env.USER, process.env.PASS, {
host: process.env.RDS_PROXY_ENDPOINT,
dialect: 'mysql',
dialectModule: mysql2
});
...
console.info("doing authenticate");
await this.sequelize.authenticate();
console.info("done, returning connection.");
...
BUSINESS LOGIC (mostly CRUD operations)
...
finally{
await sequelize.close();
}
Run Code Online (Sandbox Code Playgroud)
现在,我们在某些 api 调用上遇到随机 lambda 超时,如果刷新页面,则同一端点上的后续 api 调用会成功。
问题是:
在使用 lambda 函数中的连接将其释放到代理后,我是否应该调用sequelize close?
这是我的 RDS 代理面板,您可以看到客户端连接大多为 1 或 2 个,但我遇到了连接问题。
有什么建议吗?
mysql amazon-web-services node.js sequelize.js amazon-rds-proxy
我们在 AWS 中使用 RDS 实例,它是 POSTGRES 13。我们有基于节点的 Lambda,可以将数据返回并发布到数据库。目前,他们为每个事务打开和关闭单个连接,我们希望通过实现连接池来优化这一点。
有一项专门为处理数据库连接而设计的 AWS 服务,称为 AWS RDS Proxy,但它与 POSTGRES 13 不兼容。我们正在寻找替代方法,并且非常感谢您在这方面的任何见解。
我们正在考虑将数据库连接拉到 Lambda 处理程序之外,以便它保持状态(直到 Lambda 被删除),但这无法关闭其与数据库的连接,而且我们担心填满所有可用连接。情况可能是这样,也可能不是。
非常感谢,
山姆
AWS 最近推出了数据 API。这简化了 Lambda 函数的创建,通过允许 API 调用而不是直接数据库连接消除了额外复杂性的必要性。
我正在尝试在 AWS Lambda 函数中使用 SQLAlchemy,我真的很想利用这个新 API。
有谁知道是否有任何支持,或者是否即将支持?
或者,创建一个新引擎来支持这一点有多困难?
python sqlalchemy amazon-web-services amazon-aurora aws-rds-data-service
我使用现有的 Aurora PostgreSQL集群创建了一个RDS 代理。
但我想将代理与集群的特定只读副本实例配对。那可能吗?
postgresql amazon-web-services amazon-rds amazon-aurora amazon-rds-proxy
我正在尝试使用 RDS 代理来汇集和共享与带有 PostgreSQL 引擎的 RDS 数据库建立的连接。问题是我可以通过 ECS 实例或在 PgAdmin 中打开与数据库的连接,但是,我无法通过代理进行连接。为了尝试通过 PgAdmin 中的代理进行连接,我使用的是代理端点而不是 DB 端点,但连接尝试超时。
我已成功创建代理并与我的数据库关联,代理和数据库状态都可用。我遵循了示例代理设置,并且数据库和代理使用相同的 VPC 安全组。
有任何想法吗?
我正在尝试通过 CloudFormation 为 Postgres 12.3 RDS 实例(不是 Aurora)创建一个 RDS 数据库代理。堆栈创建失败并显示以下消息:
Database engine POSTGRES 12.3 for DB Instance db-name is not supported. Register the DB cluster instead of DB instance, or use another DB instance that is supported. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: ...)
Run Code Online (Sandbox Code Playgroud)
我找不到关于支持哪些数据库实例的任何文档,即 Postgres 12.2 可以吗?配置集群会有什么不同吗?从我看到的文档来看,似乎只有 Aurora 数据库支持集群,所以这可能不是一个选项。
根据这篇亚马逊博客文章,Postgres的RDS 代理现在“普遍可用”。
编辑:11.2 也失败Database engine POSTGRES 11.2 for DB Instance db-name is not supported.
amazon-rds ×5
postgresql ×4
node.js ×2
aws-ecr ×1
aws-lambda ×1
databinder ×1
docker ×1
dockerfile ×1
java ×1
mysql ×1
proxy ×1
python ×1
sequelize.js ×1
spring ×1
sqlalchemy ×1
validation ×1