Amazon-Web-Services

如何將 AWS CloudFront 和 API Gateway 並排用於同一個域?

  • March 30, 2018

我將我網站的靜態資產放在 S3 上,並設置 CloudFront 來分發它們。這些基本上包含使用者在我的站點上的任何 GET 請求所需的內容,以及現有路徑,即包含錯誤的全部內容。

我還有一些需要處理的 POST 請求。表單送出、發送電子郵件、通知、與數據庫互動。

如何將 Lambda(或 API Gateway)與 CloudFront 並排設置為同一域,以便 CloudFront 處理 GET 請求,而 API Gateway 處理帶有正文或 POST 請求的請求。或者我可以通過個人網址以某種方式做到這一點嗎?

我完全按照您提出的設計執行了多個 Web 應用程序,並提取了 gofaas(一個教育性的 Go 和 Lambda 應用程序)來分享這些技術。

您需要兩個單獨的域,例如www.gofaas.netS3 + 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);
   });

以下是設置所有這些的一些指南:

使用 S3、CloudFront 和 ACM 的靜態網站

使用 Lambda、API 網關、CORS 和 JWT 實現 API 安全性

引用自:https://serverfault.com/questions/839197