amazon-web-services - AWS API Gateway 不适用于自定义域

标签 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 条目以将其映射到云端目标域名。到现在为止还挺好。

enter image description here

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

enter image description here

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

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



forbidden

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



.

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

enter image description here

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

最佳答案

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

专有网络链接

如果您的源服务器位于私有(private) 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 的别名。这是一个 functionality of Route53但可能需要使用 A 记录而不是 CNAME。

关于amazon-web-services - AWS API Gateway 不适用于自定义域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57944161/

相关文章:

java - 在 AWS 中更改 Spring Boot Web 应用程序的 application.properties

sharepoint-2010 - 是否建议将 Amazon EC2 用于持久的面向公众的网站?

node.js - 引用错误 : [tablename] is not defined | Node. js、Express、Axios、PostgreSQL

arrays - 处理 Express 表单中的输入数组?

c# - AWS Systems Manager 参数存储 : Lambda function hangs

amazon-web-services - 如何与组织中的其他用户共享 lambda 函数

ios - 适用于 iOS 应用程序的亚马逊服务(db+REST webservices)

amazon-web-services - 使用 boto3.client.invoke 调用 lambda 时出现 error_message :“Key error”

javascript - 无法迭代 mongodb 集合

amazon-web-services - 从 aws lambda 函数返回图像