大约一天后 Lambda 访问 Elasticsearch 超时
Lambda accessing Elasticsearch times out after about a day
我正在开发一个项目,该项目使用 SQS 触发的 Lambda 将一些内容提取到 AWS Elasticsearch 中。
Lambda和Elasticsearch服务在同一个VPC中。
源代码非常简单,大小为10.5kB(主要是静态资源,即.xsl文件)。
使用的库被打包在一个单独的层中。
当我第一次部署 Lambda 时,一切正常,lambda 被调用了数千次,在大约一两天内,一切都按预期工作。但是,它随后开始超时,一旦超时,它就会一直超时,直到我进行新的重新部署。
无论我使用 elasticsearch-py
客户端还是 requests.get
。
都会出现这种情况
增加超时或内存分配没有帮助。
在每次调用时回收对象或重新实例化所有内容都没有任何区别。
有没有人遇到过类似的问题?
♂️ 这原来是我们部署设置的问题...
我的项目与另一个团队 Terraform 部署创建的 Elasticsearch 实例交互。
当我为我的项目环境(也在 Terraform 中)创建资源时,我将 aws_security_group_rule
添加到现有安全组:
data "aws_security_group" "es_sg" {
name = var.security_group_name
}
resource "aws_security_group_rule" "allow_lambda_access_to_es" {
type = "ingress"
to_port = 443
protocol = "tcp"
from_port = 443
security_group_id = data.aws_security_group.es_sg.id
source_security_group_id = module.lambda.sg_id
description = "Ingestion lambda access to ES"
}
当对方队伍re-apply时,规则被删除...
解决此问题的方法是让其他团队将他们的规则定义为单独的资源而不是内联资源。
我正在开发一个项目,该项目使用 SQS 触发的 Lambda 将一些内容提取到 AWS Elasticsearch 中。
Lambda和Elasticsearch服务在同一个VPC中。
源代码非常简单,大小为10.5kB(主要是静态资源,即.xsl文件)。
使用的库被打包在一个单独的层中。
当我第一次部署 Lambda 时,一切正常,lambda 被调用了数千次,在大约一两天内,一切都按预期工作。但是,它随后开始超时,一旦超时,它就会一直超时,直到我进行新的重新部署。
无论我使用 elasticsearch-py
客户端还是 requests.get
。
增加超时或内存分配没有帮助。
在每次调用时回收对象或重新实例化所有内容都没有任何区别。
有没有人遇到过类似的问题?
♂️ 这原来是我们部署设置的问题...
我的项目与另一个团队 Terraform 部署创建的 Elasticsearch 实例交互。
当我为我的项目环境(也在 Terraform 中)创建资源时,我将 aws_security_group_rule
添加到现有安全组:
data "aws_security_group" "es_sg" {
name = var.security_group_name
}
resource "aws_security_group_rule" "allow_lambda_access_to_es" {
type = "ingress"
to_port = 443
protocol = "tcp"
from_port = 443
security_group_id = data.aws_security_group.es_sg.id
source_security_group_id = module.lambda.sg_id
description = "Ingestion lambda access to ES"
}
当对方队伍re-apply时,规则被删除...
解决此问题的方法是让其他团队将他们的规则定义为单独的资源而不是内联资源。