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

