如何为同一域并排使用 AWS CloudFront 和 API 网关?

How can I use AWS CloudFront and API Gateway side by side for the same domain?

我将我网站的静态资产放在 S3 上,并设置 CloudFront 来分发它们。这些本质上包含用户在我的网站上对现有路径进行任何 GET 请求所需的内容,即错误的包罗万象。

我还有一些 POST 请求需要处理。表单提交、发送电子邮件、通知、与数据库交互。

如何为同一域同时设置 Lambda(或 API 网关)与 CloudFront,以便 CloudFront 处理 GET 请求,而 API 网关处理带有正文或 POST 请求。或者我可以通过个人 URL 以某种方式完成吗?

在 CloudFront 中创建分配并使其与 S3 一起使用。

然后添加第二个源,指向在 API 网关中分配的主机名。

然后在 CloudFront 中创建第二个缓存行为,使用 API 网关源,将其设置为 API 网关期望的适当路径模式(例如 /api/*),并且将其配置为转发所有方法(GET、POST、PUT 等……默认只有 GET 和 HEAD,但有一个单选按钮可以启用所有方法)。您可能想要转发一些 header,所以 select 那些...但不要转发原始主机 header,因为那样行不通。您可能还想转发查询字符串或 cookie,这些需要在同一屏幕上启用。

差不多就这些了。 CloudFront 根据路径匹配将请求发送到适当的后端。