AWS API Gateway 不适用于自定义域

Kri*_*han 6 amazon-web-services express aws-lambda aws-api-gateway google-domains

我已经创建了一个 expressjs api 并托管在 AWS lambda 中,并使用相同的 api 网关。它与 url 一起按预期工作正常:

https://[api-id].execute-api.[region].amazonaws.com/prod/api/v1/todos

但是我想使用自定义域来调用它,并且我使用 api 网关的自定义域选项对其进行了配置。我已经使用 google 域注册了我的域,并且在 DNS 配置中添加了 CNAME 条目以将其映射到 cloudfront 目标域名。到现在为止还挺好。

在此处输入图片说明

api网关自定义域配置如下,对应的映射如下。

在此处输入图片说明

我的问题是我在Cannot GET /aprod/api/v1/todos使用 url 调用时收到消息:

https://apis.mydomain.com/aprod/api/v1/todos

forbidden

https://apis.mydomain.com/api/v1/todos

.

我的 cloudwatch 日志如下。如果我不使用自定义域调用它可以正常工作(绿色块),否则没有特定消息(红色块)。

在此处输入图片说明

我已经在这个问题上度过了两个周末,非常感谢任何帮助。

Kai*_*aki 7

根据我的经验,有两个可能的原因。

专有网络链接

如果您的源服务器在私有 VPC 内,则需要创建 VPC 链路和网络负载均衡器 (NLB),而不是应用程序负载均衡器 (ALB)。

查看更多详细信息:https : //docs.aws.amazon.com/apigateway/latest/developerguide/set-up-private-integration.html

指向 API 网关端点

CNAME 应该指向 API Gateway 端点而不是 CloudFront。在这种情况下,CNAME 的值应该是这样的。

https://[api-id].execute-api.[region].amazonaws.com
Run Code Online (Sandbox Code Playgroud)

否则,通过自定义域的访问将直接传递到 CloudFront。

(另一个可能的原因)使用记录

就我而言,A 记录用于指向 NLB 的别名。这是Route53功能,但可能需要使用 A 记录而不是 CNAME。