我正在托管一个由gorilla/mux
实现的web服务器,它为用户访问数据库提供APIendpoint。
我将服务器置于AWS Lambda函数中,并使用API网关向服务器发送Lambda代理请求。请求流为:
import (
"github.com/gorilla/mux"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/awslabs/aws-lambda-go-api-proxy/core"
"github.com/awslabs/aws-lambda-go-api-proxy/gorillamux"
)
var (
muxLambda *gorillamux.GorillaMuxAdapter
router = mux.NewRouter().StrictSlash(true)
// Register handler functions
)
func init() {
muxLambda = gorillamux.New(router)
}
func LambdaHandler(
ctx context.Context,
req events.APIGatewayProxyRequest,
) (*core.SwitchableAPIGatewayResponse, error) {
response, err := muxLambda.ProxyWithContext(ctx, *core.NewSwitchableAPIGatewayRequestV1(&req))
if err != nil {
panic(fmt.Sprintf("Proxy encountered an error: %s", err.Error()))
}
return response, nil
}
func main() {
lambda.Start(LambdaHandler)
}
import "database/sql"
database, err := sql.Open("postgres", connStr)
在测试这个服务器的负载性能的同时(si借-c 250-d 0.5-r 10'超文本传输协议://
造成这种情况的可能原因是什么?
从我的搜索中,我发现也许这是由于:
对于每个请求,一个新的Lambda实例将启动并打开到RDS代理的新数据库连接。由于已经有太多的连接,不知怎的,Lambda会等待并在30秒后返回超时
这可能类似于这个问题,但我认为RDS代理可以为我处理连接池。还是我让RDS代理超载了?
如果原因是过载,我可以在AWS设置中做什么配置?扩展RDS实例?或者增加本文中提到的< code>max_connections
设置?
或者只是更改此 SO 问题或此 SO 问题中提到的代码结构?
感谢您阅读本文。欢迎任何反馈。
我发现Lambda超时的原因可能是由于RDS连接太多的事实。因此,RDS代理队列或限制来自Lambda的传入连接(参考)。
根本原因是因为太多的SQL查询从API服务器发送到RDS,这阻碍了连接。在我的例子中,查询包括2个步骤:
select row from table where id = 1;
在这个设置中,如果列表中有200个id,那么API服务器将总共发送200个1查询,这将保持连接。
select row from table where id in (1, 2, 3, ....);
数据库/sql
)调用以避免连接泄漏:rows, err := Db.Query(query, params)
defer rows.Close()
总之,这是由于对database/sql
go包和sql的理解不足。希望这能帮助那些遇到这种情况的人。
增加max_connections
的值不是最佳实践。我认为,更好的方法是使用Lambda函数初始化阶段来预先配置RDS连接。这个连接将被几个lambda函数重用。这个解决方案减少了到RDS数据库的连接数量。如何做到这一点有很好的例子。
我在RDS中有两个Postgres 9.3.5实例,都在一个安全组中,允许安全组内的所有入站流量和所有出站流量。我正在尝试设置一个数据库,以便能够通过postgres_fdw从另一个数据库中的几个表中进行选择。 我已经创建了服务器 - 以及必要的用户映射和外表 - 然而,一个简单的< code > select count(*)from condition _ fdw 给出了我 我可以从EC2实例
所以我有我的 Amazon RDS 实例,我允许我的 EC2 组让所有内容都连接,并且可以在脚本从我自己的机器运行时(使用 XAMPP 安装)完全建立 PDO 连接。 然而,当我从服务器上运行时,我得到一个 错误 从我自己的机器上运行脚本时不会出现此错误,我可以在那里很好地连接到数据库,进行插入和选择等。但是一旦我在我的实际EC2服务器上,blip总是无法连接。此外,它无法连接到任何MySQL实例
我无法连接到我创建的MySQL Amazon RDS实例。 我正在按照AWS RDS教程进行连接并进入: 工作台上“主机”中的endpoint 包括用户名和密码的凭据 端口设置为3306 我得到了一个错误: 无法连接到数据库服务器 您尝试将用户“master”连接到xxxx的MySQL服务器失败。rds。亚马逊。com:3306: 无法连接到xxxx上的MySQL服务器。亚马逊。com'(1006
问题内容: 我正在尝试使用连接到RDS数据库的Node.js编写Lambda函数。该数据库正在运行,并且可以从我的Elastic Beanstalk环境访问。当我运行该函数时,它将返回超时错误。 尝试将超时延长到5分钟,结果完全相同。 经过一些研究,我得出的结论是,这可能是一个安全问题,但无法在Amazon文档或此答案中找到解决方案(这是我只能在该主题上找到的解决方案)。 以下是安全性详细信息:
我正在尝试使用 Node 编写一个 Lambda 函数.js该函数连接到我的 RDS 数据库。该数据库正在运行,可以从我的 Elastic Beanstalk 环境访问。当我运行该函数时,它返回超时错误。 尝试将超时增加到 5 分钟,结果完全相同。 经过一些研究,我得出的结论是,这可能是一个安全问题,但在亚马逊的留档或这个答案中找不到解决方案(这是我在这个话题上唯一能找到的答案)。 以下是安全详细