我创建了一个expressjs api,并将其托管在AWS lambda中,并具有相同的api网关。可以正常使用url:
https://[api-id].execute-api.[region].amazonaws.com/prod/api/v1/todos
但是我想使用自定义域来调用它,我使用api网关的custom domain选项来配置它。我已经使用google域注册了我的域,并在DNS配置中添加了CNAME条目以将其映射到cloudfront目标域名。到目前为止,一切都很好。
api网关自定义域配置如下,并带有相应的映射。
我的问题是,我在调用url时收到消息Cannot GET /aprod/api/v1/todos
:
和forbidden
on
。
我的cloudwatch日志如下。如果我不使用自定义域,则可以正常工作(绿色方框),否则没有特定消息(红色方框)。
我已经在这个问题上度过了两个周末,非常感谢您的帮助。
答案 0 :(得分:2)
根据我的经验,有两个可能的原因。
如果原始服务器位于专用VPC内部,则必须创建VPC链接和网络负载平衡器(NLB),而不是应用程序负载平衡器(ALB)。
查看更多详细信息:https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-private-integration.html
CNAME应该指向API网关端点,而不是CloudFront。在这种情况下,CNAME的值应如下所示。
https://[api-id].execute-api.[region].amazonaws.com
否则,通过自定义域的访问将直接传递到CloudFront。
在我的情况下,一条记录用于指向NLB的别名。它是functionality of Route53,但可能需要使用A记录代替CNAME。
答案 1 :(得分:0)
您是否检查了official documentation,以在API Gateway中设置API的自定义域名?请注意,根据您选择的部署选项,建议是不同的-区域优化或边缘优化:
在为边缘优化的API创建自定义域名时,API Gateway会设置CloudFront分配。但是,您必须设置DNS记录,以将绑定到自定义域名的API请求的自定义域名映射到CloudFront分配域名,该请求将通过映射的CloudFront分配路由到API网关。您还必须提供自定义域名的证书。
当您为区域API创建自定义域名时,API Gateway会为该API创建区域域名。您必须设置DNS记录,以将自定义域名映射到区域域名,以绑定到要通过映射的区域API端点路由到API网关的自定义域名的API请求。您还必须提供自定义域名的证书。
另一个堆栈溢出线程可能也有帮助:Regional/Edge-optimized API Gateway VS Regional/Edge-optimized custom domain name
答案 2 :(得分:0)
请检查以下链接,
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html
https://medium.com/@maciejtreder/custom-domain-in-aws-api-gateway-a2b7feaf9c74
https://aws.amazon.com/premiumsupport/knowledge-center/custom-domain-name-amazon-api-gateway/
https://datanextsolutions.com/blog/setup-custom-domain-for-an-api-in-aws-api-gateway/
答案 3 :(得分:0)
“无法获取”错误代码不是Lambda或API网关错误代码,而是特定于Express JS的。
您发布的日志看起来像lambda日志,如果这样,则lambda被其他人调用,或者您已通过API调用使用“ https://apis.mydomain.com/aprod/api/v1/todos”作为用户“ SándorBakos”建议。
这意味着您没有在处理自定义域或API网关错误,而是从Lambda函数代码中看到了此错误。一些快速谷歌搜索证明了这一点,我想知道这篇SO帖子对您有帮助吗? Node, Express - CANNOT GET route
有关更多详细信息,如果要在API网关中调用不存在的URI,除非您成功使用SIGV4(IAM Auth),否则将收到403,错误消息为“缺少身份验证令牌”,并且即使这样,它也不会返回“无法获取”错误消息,除非您专门为其映射了网关响应。