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

AWS Lambda置于VPC内无法连接SQS(VPC端点)求助

排查VPC内Lambda通过MassTransit发送SQS消息失败的问题

1. 修正安全组规则的配置错误

你当前的安全组规则描述存在逻辑错误:安全组的出站规则没有「源」概念,只有「目标」。你的配置里写的Lambda-SQS-Endpoint-SG出站规则是“HTTPS - 443 - 源为SQS-Lambda-SG”,这是错误的,应该改为:

  • Lambda-SQS-Endpoint-SG 出站规则:HTTPS(443),目标为SQS-Lambda-SG
  • SQS-Lambda-SG 入站规则:HTTPS(443),源为Lambda-SQS-Endpoint-SG

同时确认SQS-Lambda-SG的出站规则允许HTTPS(443)到任意目标(接口型VPC端点的出站通常无需额外限制,只要入站允许即可)。

2. 验证SQS VPC端点的核心配置

  • 端点类型:确认创建的是Interface类型的SQS VPC端点(SQS仅支持Interface端点),而非Gateway类型。
  • 私有DNS解析:必须启用VPC端点的「私有DNS解析」选项。如果未启用,Lambda会尝试访问SQS的公网域名,而VPC内无公网访问权限,导致连接卡住。
  • 子网与可用区:VPC端点必须部署在Lambda所在的私有子网对应的可用区,确保网络可达。

3. 检查Lambda的网络路由配置

  • Lambda所在私有子网的路由表,必须包含一条指向SQS VPC端点的路由条目(目标为SQS的服务前缀列表pl-xxxx,下一跳为VPC端点的网络接口)。如果路由表仍默认指向互联网网关,Lambda会尝试走公网,无法通过VPC端点访问SQS。
  • 确认Lambda的执行角色有权限访问SQS(sqs:SendMessage、sqs:GetQueueUrl等),虽然非VPC环境正常,但需排除权限变更的可能。

4. 适配MassTransit的Lambda环境配置

MassTransit在Lambda环境下需要调整部分配置,避免使用公网DNS或不兼容的客户端设置:

  • 确保配置中指定的AWS区域与VPC端点所在区域一致。
  • 禁用EndpointDiscovery,直接指定SQS队列URL,避免自动发现时走公网:
    services.AddMassTransit(x =>
    {
        x.UsingAmazonSqs((context, cfg) =>
        {
            cfg.Host(RegionEndpoint.GetBySystemName("your-region"));
            cfg.DisableEndpointDiscovery();
            cfg.Send<YourMessage>(s => s.UseQueue("your-queue-name"));
        });
    });
    
  • 启用私有DNS后,AWS SDK会自动解析到私有IP,无需额外指定VPC端点域名。

5. 排查日志与网络连通性

  • 查看Lambda的CloudWatch日志,确认是否有超时、DNS解析失败、连接拒绝等具体错误信息:超时大概率是网络不通,权限错误会有明确的AccessDenied提示。
  • 可在Lambda中添加简单测试代码,验证网络连通性:
    var client = new HttpClient();
    var response = await client.GetAsync("https://sqs.your-region.amazonaws.com");
    // 将响应状态码输出到日志
    

6. 排除NACL的影响

检查VPC的网络访问控制列表(NACL):

  • 入站规则允许从Lambda子网的IP段访问443端口。
  • 出站规则允许从Lambda子网的IP段访问443端口。
    NACL是无状态的,必须双向允许流量,否则会阻断连接。

内容的提问来源于stack exchange,提问作者A. Gh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:38:12