繁体   English   中英

AWS API 网关不适用于自定义域

[英]AWS API Gateway not working with custom domain

我创建了一个 expressjs api 并托管在 AWS lambda 中,并带有一个 api 网关。 它与 url 的预期一样工作正常:

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

但是我想使用自定义域调用它,并且我使用 api 网关的自定义域选项配置了它。 我已经使用谷歌域注册了我的域,并且我已经将 DNS 配置中的 CNAME 条目添加到 map 到云端目标域名。 到目前为止,一切都很好。

在此处输入图像描述

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

在此处输入图像描述

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

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

forbidden

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

.

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

在此处输入图像描述

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

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

专有网络链接

如果您的源服务器在私有 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

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

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

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

“无法获取”错误代码不是 Lambda 或 API 网关错误代码,它看起来特定于 Express JS。

您发布的日志看起来像 lambda 日志,如果是,那么 lambda 正在被其他东西调用,或者您已使用“ https://apis.mydomain.com/aprod/通过 API 调用成功调用了您的 lambda 函数api/v1/todos ”作为用户“Sándor Bakos”的建议。

这意味着您不是在处理自定义域或 API 网关错误,而是从您的 Lambda 函数代码中看到此错误。 一些快速的谷歌搜索证明了这一点,我想知道这篇 SO 帖子是否会有所帮助? 节点,快递 - 无法获取路线

更详细一点,如果您要在 API Gateway 中调用不存在的 URI,除非您成功使用 SIGV4(IAM Auth),否则您将收到 403 错误消息“Missing Authentication Token”,即使如此除非您专门为其映射了网关响应,否则不会返回“无法获取”错误消息。

您是否检查了用于在API Gateway中为API设置自定义域名的官方文档 请注意,根据您选择的部署选项,建议是不同的-区域优化或边缘优化:

在为边缘优化的API创建自定义域名时,API Gateway会设置CloudFront分配。 但是,您必须设置DNS记录,以将绑定到自定义域名的API请求的自定义域名映射到CloudFront分配域名,该请求将通过映射的CloudFront分配路由到API网关。 您还必须提供自定义域名的证书。

当您为区域API创建自定义域名时,API Gateway会为API创建区域域名。 您必须设置DNS记录,以将自定义域名映射到区域域名,以绑定到要通过映射的区域API端点路由到API网关的自定义域名的API请求。 您还必须提供自定义域名的证书。

其他堆栈溢出线程也可能会有所帮助: 区域/边缘优化的API网关VS区域/边缘优化的自定义域名

我已通过使用 EMAIL 而不是 DNS 验证 CA 证书来解决此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM