AWS lambda

时间:2017-11-12 06:21:31

标签: postgresql amazon-web-services lambda serverless

我有一个目前部署在AWS上的lambda。它是一个简单的CRUD逻辑,位于API网关后面。

我目前面临的问题是,只要流量达到峰值,我的数据库上的连接就会出现。

我知道这是因为并行调用了很多lambda,并打开了它们各自的连接,但有没有办法可以在这里进行某种连接池化?

以下主题说明我可以(如果我在智能上稍微编码一些容器中的某种连接池):

How we can use JDBC connection pooling with AWS Lambda?

但它并不保证任何东西。

我可以在我的lambda中对此做些什么,或者必须使用外部连接池(我使用Postgres,那应该是pg_bouncer)?

2 个答案:

答案 0 :(得分:1)

是的,没办法绕过它。你需要使用pgBouncer。

答案 1 :(得分:0)

是的,您必须自己管理连接池。我之前使用c3p0库来使其工作。以下是一个示例代码段:

private static final QueryRunner queryRunner;

然后在处理程序方法体外的某处使用以下内容初始化查询运行程序:

    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setJdbcUrl(jdbcUrl);
    dataSource.setUser(System.getenv("USERNAME"));
    dataSource.setPassword(System.getenv("PASSWORD"));
    queryRunner = new QueryRunner(dataSource);

如果要在lambda函数中查询,请调用:

List<Map<String, Object>> result = queryRunner.query("SELECT * FROM schema.users WHERE column = vall", new MapListHandler());

希望这有帮助。

另外,请记住,重新部署函数时,可能无法在以后回收活动的jdbc连接。这可能不是问题,具体取决于使用jdbc连接的函数数量以及数据库可以支持的数量。