如何使用 VPC 链接和 VPC 端点从私有子网内的 Lambda 响应 API 网关 Web 套接字

问题描述

我正在从私有子网中有 Lambda 的架构迁移,与具有 NatGateway 的公共子网通信,由 API 网关 WebSocket 触发。现在我删除了 Nat 网关并插入了一个带有 VPC 链接的 VPC 端点。我在链接中找到的:https://d1.awsstatic.com/whitepapers/private-api-best-practices.pdf

我的 VPC 终端节点当前的策略全部打开,我没有使用启用私有 DNS 名称 ,因为在我的 VPC 中还有另一个与 API Gateway 对话的项目。

我的 API 网关触发了 Lambda,但无法响应返回消息。我的 lambda 超时。

在我的旧架构中,我的返回端点是 https://{restapi-id}.execute-api.{region}.amazonaws.com/{stage},现在当我尝试响应时,它不适用于该端点。

我是否必须更改端点?

在我完成此连接测试之前,我的安全组和 NACL 非常开放。 VPC Link 和 API Gateway Endpoint 配置了 Lambda 子网和 Lambda 安全组。

VPC Link 或 VPC Endpoint 中是否缺少某些内容

编辑:我在 ApiGateway 中激活了日志,并在 lambda 日志返回之前:

{
    "requestId": "em-5aGamaDDAdtd=","ip": "","caller": "-","user": "-","requestTime": "30/Apr/2021:17:57:42 +0000","eventType": "MESSAGE","routeKey": "lambda","status": "504","connectionId": "em-5abCDaaDBJtw="
}

客户端收到消息:

{
message: "Endpoint request timed out",connectionId: "enBZ-dFG2oAFDA4a=",…}

connectionId: "em-5abCDaaDBJtw="
message: "Endpoint request timed out"
requestId: "em-5aGamaDDAdtd="

解决方法

我发现了我的问题,我的 VPC 链接丢失了与 API 网关的连接。 在AWS::ApiGatewayV2::Integration中,我需要插入VPC Link的连接。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...