【问题标题】:Lambda accessing Elasticsearch times out after about a day大约一天后 Lambda 访问 Elasticsearch 超时
【发布时间】:2021-01-25 06:30:29
【问题描述】:

我正在开展一个项目,该项目使用 SQS 触发的 Lambda 将一些内容摄取到 AWS Elasticsearch。

Lambda 和 Elasticsearch 服务位于同一个 VPC 中。

源代码非常简单,大小为10.5kB(主要是静态资源即.xsl文件)。

使用的库被打包在一个单独的层中。

当我第一次部署 Lambda 时,一切正常,Lambda 被调用了数千次,大约一两天,一切都按预期工作。但是,它会开始超时,一旦超时,它就会一直超时,直到我重新部署为止。

无论我使用elasticsearch-py 客户端还是requests.get,都会出现这种情况。

增加超时或内存分配没有帮助。

在每次调用时回收对象或重新实例化所有内容也没有任何区别。

有没有人遇到过类似的问题?

【问题讨论】:

  • 您需要了解正在发生的事情。制定一些日志聚合方案,以便您可以观察响应时间/代码等,并更好地了解正在发生的事情。
  • @PedroRodrigues - 已经有很多 Clo​​udwatch 日志记录到位。响应时间完全在超时设置内,并且在服务工作时始终为 200 秒。当它不起作用时,它们只是超时,即。没有回应...
  • 您在哪里以及如何连接到 Elasticsearch(例如,创建 Elasticsearch 客户端)?你在使用身份验证吗?如果有,您提供的是什么类型以及如何提供?
  • 你好@kielni - 根本没有身份验证。

标签: amazon-web-services aws-lambda terraform terraform-provider-aws aws-elasticsearch


【解决方案1】:

??‍♂️ 这原来是我们的部署设置的问题...

我的项目与另一个团队 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"
}

当其他团队重新申请时,规则被删除...

解决此问题的方法是让其他团队将他们的规则定义为单独的资源而不是内联资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多