如何在同一域中同时使用 AWS CloudFront 和 API Gateway?

Cos*_*dis 9 amazon-cloudfront amazon-web-services amazon-api-gateway

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

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

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

Gro*_*uez 6

您可以创建一个 lambda 函数,设置 API 网关,然后配置 CloudFront 以将某些路径(例如 /rest/*)转发到 API 网关,并提供来自 S3 存储桶的所有其他内容。

这是一个完整的演练,展示了如何执行此操作:https : //www.codeengine.com/articles/process-form-aws-api-gateway-lambda/


小智 2

我完全按照您提出的设计运行了多个 Web 应用程序,并提取了gofaas(一个 Go 和 Lambda 教育应用程序)来分享这些技术。

您需要两个单独的域,例如www.gofaas.net用于 S3 + CloudFront 和api.gofaas.netAPI Gateway + Lambda。

然后,您可以让您的静态站点通过 API Gateway CORS 配置和一些 JavaScript 与 API 进行交互:

fetch(`https://api.gofaas.net/work`, {
    method: "POST",
    mode: "cors",
    headers: {
        "Accept": "application/json",
        ...
    },
    body: JSON.stringify(...)
})
    .then(function(response) {
        return response.json();
    })
    .then(function (json) {
        // use response
    })
    .catch(function (err) {
        console.log("fetch error", err);
    });
Run Code Online (Sandbox Code Playgroud)

以下是一些设置指南:

使用 S3、CloudFront 和 ACM 的静态网站

使用 Lambda、API 网关、CORS 和 JWT 实现 API 安全