如何使用我自己的 CloudFront 分佈設定 API Gateway?

3 分的閱讀內容
0

我想在 Amazon API Gateway 中使用邊緣優化 API 端點,但是我需要對 Amazon CloudFront 分佈有更多控制。如何建立和使用我自己的分佈?

簡短說明

如果您的 API 用戶端分散在各個地理位置,請考慮使用 API Gateway 中邊緣最佳化的 API 端點。這種類型的端點可作為具有 AWS 受管 CloudFront Web 分佈的區域端點,以改善用戶端連線時間。

若要使用全球 CloudFront 內容交付網路並對分佈保有更多的控制,請使用具有自訂 CloudFront Web 分佈區域 API

解決方法

在 API Gateway 中建立區域 API。然後,執行以下操作:

為您的 API 設定 GET 方法

1.    在 API Gateway 主控台中,選擇新區域 API 的名稱。

2.    在資源窗格中,選擇動作。然後,選擇建立方法。清單會出現在 / resource 節點下。

3.    從清單中選擇取得。然後,選擇核取記號圖示。

4.    在 / - GET - Setup 中的整合類型,選擇模擬。然後,選擇儲存
注意: 模擬整合會回應任何收到的請求,這有助於進行測試。

部署 API 並識別 API 的調用網址

1.    將您的 API 部署至階段

2.    在階段編輯器窗格頂端,將調用網址複製到剪貼簿。

API Gateway API 調用網址範例

https://restApiId.execute-api.region.amazonaws.com/stageName.

測試您的 API 是否傳回 200 OK 回應

若要確認您的 API 傳回 200 OK 回應,請使用 API Gateway 主控台、Postman 應用程式或 curl 來測試 API 的調用網址。

使用 curl 測試 API 是否傳回 200 OK 回應

根據您的作業系統,執行下列其中一個指令:

**注意:**在執行下列任一指令之前,請先以您 API 的調用網址取代 https://restApiId.execute-api.region.amazonaws.com/stageName

如果是 Linux,請執行以下指令:

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName

如果是 Windows PowerShell,請執行以下指令:

curl https://restApiId.execute-api.region.amazonaws.com/stageName

**注意:**如果您收到的狀態碼不是 200 OK 回應,請檢查主控台以確認下列事項:
您的 API 已部署到您的階段。
您的階段已在調用網址中指定。

建立 CloudFront Web 分佈

1.    在 CloudFront 主控台中,選擇建立分佈

2.    在選取內容交付方式頁面上的 Web 下,選擇開始使用

3.    在建立分佈頁面上的原始網域名稱,貼上您 API 的調用網址。然後,刪除階段名稱。

原始網域名稱範例

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com

4.    在原始路徑,輸入 API 的階段名稱,並在其前面加上斜線 (/stageName)。或者,如果您想在調用網址時自行輸入階段名稱,請勿輸入原始路徑
**注意:**調用 CloudFront 分佈時,在原始路徑輸入不正確的階段名稱有時會產生錯誤。例如,未經授權的請求錯誤會傳回 "Missing Authentication Token (缺少身分權杖)" 和 403 Forbidden (403 禁止) 回應碼

5.    對於最低原始 SSL 協定,最佳做法是選擇 TLSv1.2。請不要選擇 SSLv3。API Gateway 不支援 SSLv3 協定。

6.    在原始協定政策,選擇僅限 HTTPS
**注意:**API Gateway 不支援未加密 (HTTP) 端點。如需詳細資訊,請參閱 Amazon API Gateway 常見問答集

7.    (選擇性) 若要將自訂標頭轉送至您的原始伺服器,請在原始伺服器自訂標頭輸入一或多個自訂標頭。
**注意:**有些自訂標頭無法由 CloudFront 轉送至您的原始伺服器

8.    如果適用,請遵循如果您對 API 使用 IAM 驗證或對分佈使用自訂域名部分的說明進行操作。

9.    (選擇性) 在分佈設定下,設定您要自訂的任何其他設定。

10.    選擇建立分佈

11.    等待分佈進行部署。這需要 15 至 20 分鐘。當其狀態在主控台中顯示為已部署時,表示分佈已就緒。

如需詳細資訊,請參閱建立分佈

測試您的 CloudFront Web 分佈

1.    在 CloudFront 主控台中,將您分佈的網域名稱複製到剪貼簿。

非自訂網域名稱範例

a222222bcdefg5.cloudfront.net.

2.    使用先前在測試您的 API 區段中提到的指令之一,測試網域名稱是否傳回 200 OK 回應。如果您收到 500 server error (500 伺服器錯誤) 程式碼,該分佈則可能尚未部署。如果您沒有收到任何回應,則表示 CloudFront DNS 記錄尚未傳播。無論任何情況,請確認自您建立分佈以來已過了 15 至 20 分鐘。然後,重新再試。

重要事項:如果您為特定 API 資源的方法開啟了 AWS Identity and Access Management (IAM) 驗證,在調用 API 時,則必須將資源名稱附加至分佈網域名稱結尾。完整的調用網址 (包括資源名稱) 與下列範例之一相似。輸出取決於您在建立分佈時是否輸入了原始路徑

包含原始路徑的 API Gateway API 調用網址範例

https://distributionDomainName/stageName/resourceName

不含原始路徑的 API Gateway API 調用網址範例

https://distributionDomainName/resourceName

如需有關測試的詳細資訊,請參閱如何啟用 API Gateway API 的 IAM 驗證?

您的 API 現在使用您建立的 Web 分佈。資源可以在 API CloudFront 網址上存取。

如果您對 API 使用 IAM 驗證或對 CloudFront Web 分佈使用自訂域名

根據預設,CloudFront 不會將傳入的 Authorization 標頭轉送至原始伺服器 (在此使用案例中為 API Gateway)。如果您對 API 使用 IAM 驗證或對分佈使用自訂域名,則必須執行以下操作之一:

(適用於 IAM 驗證) 將 Authorization 標頭新增至您的 CloudFront 允許清單

1.    如果尚未完成,請依照本文建立 CloudFront Web 分佈區段中的步驟 1 至 7 操作。

2.    在建立發佈頁面上的快取和原始請求設定,選擇使用快取政策和原始請求政策。然後,在快取政策下,選擇現有的快取政策或建立新的快取政策,將授權標頭新增至 CloudFront 允許清單。

3.    如果您使用現有的快取政策,在根據所選取請求標頭進行快取,選擇白名單。然後,在白名單標頭,將授權新增至允許的標頭清單中。

重要事項:如果您將根據所選取請求標頭進行快取設定變更為全部,或者如果允許主機標頭,您的設定則無法運作。如需詳細資訊,請參閱根據請求標頭快取內容

4.    (選擇性) 若要測試設定,請執行下列動作:
[以程式設計方式為您的 API Gateway 端點建立所需的 Signature Version 4 簽章](https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html#sig-v4-examples-get-auth-header)。在 host 值,輸入您的 API Gateway 調用網址。在 endpoint 值,輸入您的 CloudFront Web 分佈網址。

API Gateway 調用網址範例

<api-id>.execute.<region>.amazon.com

CloudFront Web 分佈網址範例

dxxxxx.cloudfront.net

注意:如果您使用 Postman 應用程式,在授權索引標籤中的類型,請選擇 AWS 簽章。然後,輸入存取金鑰私密金鑰。Postman 會使用您輸入的憑證產生必要的標頭。

然後,使用從 Signature Version 4 程序產生的授權標頭 (以及所有 SignedHeaders),將 API 請求傳送至 CloudFront 分佈。

(適用於自訂網域名稱或 IAM 驗證) 在 API Gateway 中設定區域自訂網域名稱,以存取您的 API

1.    在 API Gateway 中建立新的區域 API,或將邊緣最佳化 API Gateway API 改為區域 API

2.    為 API 設定區域性自訂網域名稱,並為您的 API 建立 API 映射
**注意:**當您透過 CloudFront 存取 API 時,請使用此自訂網域名稱。

3.    依照本文建立 CloudFront Web 分佈區段中的說明建立 CloudFront Web 分佈,但有一個例外。步驟 3 中,在原始網域名稱,輸入您的 API Gateway 目標網域名稱,而不是 API 的調用網址。
注意:在自訂網域詳細資料的端點設定中尋找您的 API Gateway 目標網域名稱。

**API Gateway 目標網域名稱範例 **

d-xxxx..execute-api.<region>.amazonaws.com

4.    在建立發佈頁面上的快取和原始請求設定,選擇使用快取政策和原始請求政策。然後,在快取政策下,選擇現有的快取政策或建立新的快取政策,將授權主機標頭新增至 CloudFront 允許清單。

5.    如果您使用現有的快取政策,在根據所選取請求標頭進行快取,選擇白名單。然後,在白名單標頭,將授權主機增至允許的標頭清單中。

6.    在分佈設定下的備用網域名稱,輸入您建立的自訂網域名稱。

7.    在 SSL 憑證,選取自訂 SSL 憑證。然後,新增該網域的 AWS Certificate Manager (ACM) 憑證

  1. 部署 CloudFront Web 分佈之後,設定 DNS 記錄,將自訂網域對應至 CloudFront Web 分佈。透過建立別名或 CNAME 記錄來執行此操作。如需詳細資訊,請參閱透過新增備用網域名稱 (CNAME) 使用檔案的自訂網址

9.    (選擇性) 若要測試設定,以程式設計方式為您的自訂網域名稱建立 Signature Version 4 已簽署請求
**注意:**Postman 應用程式可用於測試設定。


相關資訊

在 API Gateway 中初始化 REST API 設定

選擇端點類型以設定 API Gateway API

將邊緣最佳化 API 匯入至 API Gateway