【问题标题】:AWS execute-api endpoint request timeout / dial tcp i/o timeoutAWS execute-api 端点请求超时/拨号 tcp i/o 超时
【发布时间】:2019-05-29 13:21:14
【问题描述】:

我想从 VPC 中的 AWS Lambda 访问公共 Rest Api 网关。

我已经创建了一个 execute-api 端点并将 443 端口添加到安全组。我还禁用了私有 DNS 名称,但仍然收到“端点请求超时”/拨打 tcp 52.28。.:443: i/o timeout 错误。 我还测试了我想用邮递员访问的 API,它按预期工作。 我错过了什么。

【问题讨论】:

    标签: amazon-web-services aws-api-gateway vpc


    【解决方案1】:

    默认情况下,Lambda 中的 VPC 没有公共互联网访问权限。

    您有一个选择是在子网中设置一个NAT gateway Lambda 被部署以提供互联网访问权限,从而访问公共 REST API。更多在这里 -> Internet access for lambda functions

    AWS Lambda 使用您提供的 VPC 信息来设置 ENI,以允许您的 Lambda 函数访问 VPC 资源。每个 ENI 都从您指定的子网的 IP 地址范围内分配了一个私有 IP 地址,但没有分配任何公共 IP 地址。因此,如果您的 Lambda 函数需要 Internet 访问(例如,访问没有 VPC 终端节点的 AWS 服务),您可以在 VPC 内配置 NAT 实例,也可以使用 Amazon VPC NAT 网关。有关更多信息,请参阅 Amazon VPC 用户指南中的 NAT 网关。您不能使用连接到您的 VPC 的 Internet 网关,因为这要求 ENI 具有公共 IP 地址。

    或者你可以看看这里 -> Why can't I connect to my public API from an API Gateway VPC endpoint。它暗示了这一点

    使用 curl 命令行工具测试您的私有 API。在您的 curl 命令中,包括用于调用 API 的基本 URL,以及 Host 标头或 x-apigw-api-id 标头。有关更多信息,请参阅使用特定于端点的公共 DNS 主机名调用您的私有 API。

    调用 API 的基本 URL 包括 DNS 名称和阶段名称。它看起来像这样: https://vpceId.execute-api.awsRegion.vpce.amazonaws.com/stageName

    注意:将 vpceId 替换为您复制的 VPC 终端节点 ID。将 awsRegion 替换为您的私有 API 的 AWS 区域(例如,us-east-1)。将 stageName 替换为部署 API 的阶段的名称。

    Host 标头如下所示:

    主机:apiId.execute-api.awsRegion.amazonaws.com

    注意:将 apiId 替换为您复制的 API ID。将 awsRegion 替换为您的私有 API 的 AWS 区域(例如,us-east-1)。

    x-apigw-api-id 标头如下所示:

    x-apigw-api-id:apiId

    注意:将 apiId 替换为您复制的 API ID。

    如果您设置正确,您会收到 200 响应代码。

    【讨论】:

      【解决方案2】:

      尝试使用<vpce-id>.execute-api.<region>.vpce.amazonaws.com 访问API 并在Host 标头中传递<api_id>.execute-api.<region>.amazonaws.com

      【讨论】:

        猜你喜欢
        • 2019-01-31
        • 1970-01-01
        • 2018-09-12
        • 2022-01-22
        • 2021-03-31
        • 2019-12-31
        • 2019-08-21
        • 2019-09-10
        • 2021-06-11
        相关资源
        最近更新 更多