使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

3 分的閱讀內容
0

我想要在 Amazon API 閘道中有一個邊緣最佳化的 API 端點,但我想為它建立自己的 Amazon CloudFront 分佈。

簡短說明

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

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

解決方法

**先決條件:**建立 AWS Lambda 函數,以與您的 API 閘道 REST API 整合,並在 API 閘道中建立區域 API。

us-east-1 區域的 AWS Certificate Manager (ACM) 中建立 SSL/TLS 憑證與您的 API 閘道 REST API 相同的 AWS 區域。若要取得由 ACM 發行或匯入至 ACM 的網域名稱的憑證,請完成下列步驟:

  1. 註冊您的網際網路網域。您可以使用 Amazon Route 53 或第三方認可的網域註冊商。
  2. 在 ACM 中為網域名稱建立 SSL/TLS 憑證,或將其匯入到 ACM 中。

為您的 API 設定 GET 方法

完成下列步驟:

  1. 開啟 API Gateway 主控台
  2. 選擇新區域 API 的名稱。
  3. 選擇建立資源
  4. 資源名稱,輸入問候語
  5. 選擇建立方法
  6. 選擇 GET方法類型,然後選擇 ** Lambda 函數整合類型**。然後,切換 Lambda 代理整合按鈕並選擇您的 Lambda 函數。

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

完成下列步驟:

  1. 將您的 API 部署至階段
  2. 階段編輯器窗格頂端,將問候資源的 GET HTTP 方法的調用網址複製到剪貼簿。

API Gateway API 調用網址範例:

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

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

若要確認您的 API 傳回 200 OK 回應,請透過 API Gateway 主控台、Postman 應用程式或 curl 來測試 API 的調用網址。有關 Postman 和 curl 的更多資訊,請參閱 Postman 網站curl 網站

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

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

**注意:**使用您的 API 調用網址取代 https://restApiId.execute-api.region.amazonaws.com/stageNamee/greetings

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

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

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

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

**注意:**如果您收到 200 OK 以外的狀態代碼,請檢查主控台以確認您的 API 已部署到您的階段。此外,請確認您的調用網址是否正確指定您的階段。

建立 CloudFront Web 分佈

完成下列步驟:

  1. 開啟 CloudFront 主控台

  2. 選擇建立分佈

  3. 原始網域名稱中,輸入您的 API 調用網址。然後,刪除階段和資源名稱。
    原始網域名稱範例:

    https://restApiId.execute-api.region.amazonaws.com
  4. 對於協定,選擇僅限 HTTPS
    **注意:**API Gateway 不支援未加密 (HTTP) 端點。如需詳細資訊,請參閱 Amazon API Gateway 常見問答集

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

  6. 原始路徑,輸入 API 階段名稱,並在其前面加上斜線 (/stageName)。或者,要在調用網址時自己輸入階段名稱,請不要在原始路徑中輸入任何內容。
    注意:如果您為原始路徑輸入不正確的階段名稱,然後調用 CloudFront 分佈,則可能會出現錯誤。例如,您可能會收到未經授權的請求錯誤會傳回 "Missing Authentication Token (缺少身分權杖)" 和 403 Forbidden (403 禁止) 回應碼

  7. (選擇性) 若要將自訂標頭轉送至您的原始伺服器,請在原始伺服器自訂標頭輸入一或多個自訂標頭。

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

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

  10. 選擇建立分佈

  11. 請等待 15-20 分鐘以便部署您的分佈。當分佈狀態在主控台中顯示為已部署時,表示分佈已就緒。

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

測試您的 CloudFront Web 分佈

完成下列步驟:

  1. 開啟 CloudFront 主控台

  2. 將分佈的分佈網域名稱複製到剪貼簿。
    非自訂網域名稱範例:

    a222222bcdefg5.cloudfront.net
  3. 測試網域名稱是否有 200 OK 回應。如果您收到 500 server error (500 伺服器錯誤) 程式碼,該分佈則可能尚未部署。如果您沒有收到任何回應,那麼則表示 CloudFront DNS 記錄尚未傳播。在任何一種情況下,請在建立發佈後等待 15-20 分鐘,然後重試該程序。

**重要:**上述步驟適用於未針對任何資源方法開啟 AWS Identity and Access Management (IAM) 驗證的 API 資源。如果您有具有 IAM 驗證的方法,請在調用 API 時,將資源名稱附加到發佈網域名稱的結尾。完整的調用網址 (包括資源名稱) 與下列範例之一相似。

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

https://distributionDomainName/stageName/resourceName

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

https://distributionDomainName/resourceName

如需有關如何測試您的發佈的詳細資訊,請參閱如何啟用 API 閘道 API 的 IAM 驗證?

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

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

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

完成下列步驟:

  1. 建立 CloudFront 分佈。
  2. 建立分佈頁面中,針對預設快取行為和快取金鑰與原始請求,選擇舊版快取設定。
  3. 標頭的下拉清單中選擇包含下列標頭。然後,從顯示的標頭清單中選擇授權。設定要轉寄至 API 的標頭。
    -或-
    對於快取金鑰和原始請求,在快取政策下,選擇現有的快取政策或建立新的快取政策。這項政策必須將授權標頭新增至 CloudFront 允許清單。
  4. (選擇性) 若要測試設定,請執行下列動作:
    [以程式設計方式為您的 API Gateway 端點建立所需的 Signature Version 4 簽章](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。在 host 值,輸入您的 API Gateway 調用網址。在 endpoint 值,輸入您的 CloudFront Web 分佈網址。
    API Gateway 調用網址範例:
    example_api_id.execute.example_region.amazon.com
    CloudFront Web 分佈網址範例:
    d######.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 網頁發佈,但在原始網域名稱,輸入您的 API Gateway 目標網域名稱,而不是 API 調用網址。
    注意:在自訂網域詳細資料的端點****設定區段中尋找您的 API Gateway 目標網域名稱
    API Gateway 目標網域名稱範例:

    d-######.execute-api.example-region.amazonaws.com
  4. 建立分佈頁面,針對預設快取行為和快取金鑰與原始請求,選擇舊版快取設定。

  5. 標頭的下拉清單中選擇包含下列標頭。然後,從顯示的標頭清單中選擇主機授權。設定要轉寄至 API 的標頭。
    -或-
    對於快取金鑰和原始請求,在快取政策下,選擇現有的快取政策或建立新的快取政策。這項政策必須將授權標頭新增至 CloudFront 允許清單。

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

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

  8. 在您部署 CloudFront Web 分佈之後,設定 DNS 記錄,將自訂網域對應至 CloudFront Web 分佈。若要執行此操作,請建立別名或 CNAME 記錄。如需詳細資訊,請參閱透過新增替代網域名稱 (CNAME) 來使用自訂 URL

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