在我嘗試為 Amazon API Gateway API 建立邊緣最佳化的自訂網域名稱時,出現「CNAMEAlreadyExists」錯誤。
簡短描述
如果出現以下情況,即會發生 "CNAMEAlreadyExists" 錯誤:
- 您自訂網域名稱的 CNAME 記錄類型已存在,並指向 Amazon CloudFront 分佈。
- 有一個 CloudFront 分佈設定的備用網域名稱或 CNAME 與您的自訂網域名稱相符。
**注意:**當您在短時間範圍內進行多次自訂網域名稱更新時,收到「請求過多」錯誤的情況並不少見。發生這些錯誤的原因是 CreateDomainName API 的配額較低 (每個帳戶每 30 秒一個請求)。如需詳細資訊,請參閱適用於建立、部署和管理 API 的 API Gateway 配額。
**重要:**您不能將同一個 CNAME 記錄用於一個以上 CloudFront 分佈。使用同一個 CNAME 記錄會傳回以下錯誤: 「您提供的一個或多個 CNAME 已經與不同的資源相關聯。(Service: AmazonCloudFront; Status Code: 409;錯誤代碼: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*"
若要解決這些錯誤並建立邊緣最佳化的自訂網域名稱,您必須先刪除指向 CloudFront 分佈的現有 CNAME 記錄。
解決方案
確認自訂網域名稱之前是否存在
1.若要確認自訂網域名稱之前是否存在,請對該網域名稱執行 DNS 查詢命令。
在 Linux、Unix 或 macOS 系統上:
dig abc.example.com +all
在 Windows 上:
nslookup abc.example.com
**注意:**請以您的網域名稱來取代 abc.example.com。
2.如果自訂網域名稱之前已存在並且其 DNS 記錄仍然存在,請使用 dig 來取得輸出中的 CNAME 記錄:
abc.example.comcom. 0 IN CNAME d27am47dhauq2.cloudfront.net.
重要:
您必須先刪除此記錄,才能建立自訂網域名稱。
- 最佳實務是先在開發或測試環境中修改 DNS 設定。手動修改生產 DNS 設定可能會造成停機。
- 如果輸出顯示 A 記錄 (IPv4 地址) 而不是 CNAME 記錄,則您必須更新該記錄。更新的記錄必須將自訂網域名稱 (A 別名) 指向 CloudFront 分佈。
如果對網域名稱進行了 dig 或 nslookup 並且記錄是 A 別名,請檢查 CloudFront 分佈。請確保 CloudFront 分佈未設定備用網域名稱。如需詳細資訊,請參閱別名與 CNAME 記錄的比較。
刪除 CNAME 記錄或更新 CloudFront 分佈
根據您的組態,執行以下一項或兩項作業:
如果您有第三方 DNS 服務供應商,請按照供應商的程序刪除指向 CloudFront 分佈的 CNAME 記錄。
如果您使用 Amazon Route 53,請刪除 Route 53 中指向 CloudFront 的記錄。
進行組態變更後,請等待幾分鐘,以讓 DNS 變更生效。然後,重試建立自訂網域名稱。
**注意:**如果您收到 "CNAMEAlreadyExists" 錯誤,請參閱在為 Amazon CloudFront 分佈設定 CNAME 別名時,該如何解決 CNAMEAlreadyExists 錯誤?
相關資訊
如何為 API Gateway API 設定自訂網域名稱?
使用 Amazon API Gateway 和 AWS Lambda 建置多區域無伺服器應用程式