You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS VPC对等连接问题:Lambda与EC2(MongoDB)连接超时求助

问题排查与修复方案

针对你遇到的ALB转发到Lambda目标组超时问题,结合提供的Terraform配置,以下是具体排查点和修复措施:

1. 补充Lambda调用权限的来源限制

当前aws_lambda_permission仅允许ELB调用Lambda,但未指定具体ALB的ARN,可能导致权限验证失败(表现为超时)。需添加source_arn限制仅目标ALB能调用该Lambda:

resource "aws_lambda_permission" "mongodb_roa_function_invoke_permission" {
  statement_id  = "AllowExecutionFromELB"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.mongodb_roa_function.arn
  principal     = "elasticloadbalancing.amazonaws.com"
  source_arn    = aws_lb.aws_backend_load_balancer.arn # 新增该行
}

2. 修正内部ALB的子网配置

你配置的是内部ALB(internal = true),这类负载均衡器无需部署在公有子网,混合部署可能引发路由异常。修改ALB子网配置,仅保留私有子网:

resource "aws_lb" "aws_backend_load_balancer" {
  name               = "aws-backend-lb"
  internal           = true
  security_groups    = [var.aws_backend_security_group1_id]
  subnets            = [
    var.aws_backend_private_subnet1_id,
    var.aws_backend_private_subnet2_id,
    # 移除公有子网配置
  ]
  # 其余配置保留
}

3. 确认VPC Peering的双向路由配置

你仅在VPC#1的私有子网路由表中添加了到VPC#2的路由,需确保VPC#2的对应路由表也添加指向VPC#1 CIDR的路由,使用同一个VPC Peering连接ID。缺少双向路由的话,Lambda发起的MongoDB请求无法返回,会触发超时。

4. 修正API Gateway集成的URI配置

当前aws_apigatewayv2_integration的integration_uri使用Listener ID是错误的,HTTP_PROXY类型集成需使用ALB的DNS名称加目标路径:

resource "aws_apigatewayv2_integration" "mongodb_roa_api_integration" {
  api_id                 = aws_apigatewayv2_api.mongodb_roa_api.id
  connection_type        = "VPC_LINK"
  connection_id          = aws_apigatewayv2_vpc_link.mongodb_roa_vpc_link.id
  integration_method     = "GET"
  integration_type       = "HTTP_PROXY"
  integration_uri        = "http://${aws_lb.aws_backend_load_balancer.dns_name}/${var.aws_environment}/${var.path_part}" # 修改该行
  payload_format_version = "1.0"
}

5. 清理Lambda安全组的冗余规则

Lambda在VPC中被ALB(Lambda目标组)调用时,是AWS内部服务触发,无需Lambda安全组开放80端口的入站规则。可删除aws_backend_security_group2的入站规则,仅保留必要出站规则:

resource "aws_security_group" "aws_backend_security_group2" {
  name        = "aws-backend-sg-2"
  description = "Enable access for Lambda"
  vpc_id      = aws_vpc.aws_backend_vpc.id

  # 删除原有的ingress配置
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

6. 验证Lambda到MongoDB的出站流量

确保Lambda的安全组aws_backend_security_group2出站规则允许访问MongoDB的端口(默认27017)到VPC#2的CIDR段,同时VPC#2的EC2安全组入站规则允许VPC#1的CIDR段访问该端口。

内容的提问来源于stack exchange,提问作者Sophia De Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:53:10