如何将API Gateway用作CloudFront原始配置

发布时间:2020-07-07 15:50

对于上下文,我正在构建一个使用Django和Vue.js的小型应用程序。我要执行以下操作:

  1. 将Django请求(/api//admin/)发送到API网关,并在其中通过AWS Lambda函数提供服务
  2. 使用CloudFront中的S3来源为/media//assets/提供请求
  3. 通过S3网站处理所有其他请求,其中存储了我的Vue.js应用程序的静态资产

我想知道是否可以针对三个CloudFront原始配置中的每一个使用相同的域/子域来做到这一点。

我知道如何为API网关设置自定义域名,例如api.mysite.com。如果我有mysite.com的Route53 A记录指向它的CloudFront分布,我在想我可以设置一个自定义来源配置,该配置指向api.mysite.com/api/的路径模式上的/admin/mysite.com/api/health-check/。尝试执行此操作时,当我尝试访问api.mysite.com/api/health-check/时在CloudFront上出现502错误,但是当我访问stage(API网关自定义域名)时,我得到了良好的健康检查。

我认为我有一个XY Problem,因为我不确定这是建议还是可能的。我是否应该为API网关使用另一个子域并设置CORS,以便我的Vue应用程序可以向Django API发出请求?还是可以对S3网站,S3 Origin和API Gateway使用一个CloudFront发行版?

我正在使用CDK定义我的所有基础结构。我以前在与S3网站相同的域名上使用了ALB,并且可以在不需要CORS的情况下在相同域名上向API发出请求,但是我是API Gateway的新手,并且不确定其自定义域名如何工作。另外,ThisWorkbook.Worksheets("FFL").xxx.AddItem "hi"附加到API网关域的URL的事实令我感到困惑,我不确定这是否或将如何影响我的解决方案。

回答1

您可以在同一CloudFront发行版中使用多个来源来解决此问题。

您将进行以下设置:

  • 默认来源-路由到您的S3网站
  • “ / api / *”的来源-路由到API网关
  • “ / admin / *”的来源-路由到API网关
  • “ / media / *”的来源-路由到S3 Origin
  • “ / assets / *”的来源-路由到S3来源

默认的基于路径的路由之后的其他起点(尽管起点只能支持一条路径)。

如果这是所有设置,则可以将主机名分配给单个CloudFront分配。

有关setting up multiple origins的更多信息。