當我為 CloudFront 分佈設定 CNAME 別名時,如何解決 "CNAMEAlreadyExists" 錯誤?
我為 Amazon CloudFront 分佈設定正規名稱記錄 (CNAME) 別名時,我會收到 "CNAMEAlreadyExists" 錯誤。
簡短說明
您不能在一個以上的 CloudFront 分佈中使用相同的 CNAME 別名。您要新增的 CNAME 別名已與另一個 CloudFront 分佈產生關聯時,您會收到錯誤:
"One or more of the CNAMEs you provided are already associated with a different resource.(Service: AmazonCloudFront; Status Code: 409; Error Code: CNAMEAlreadyExists; Request ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*"
如果您同時擁有來源和目標分佈的存取權,則請從現有的 CloudFront 分佈中手動移除 CNAME 關聯。然後,將 CNAME 與新的 CloudFront 分佈產生關聯。
注意:若要手動關聯 CNAME,則您可能需要等待舊分佈的狀態為已部署時才能繼續。
如果您不知道分佈 ID,則請使用 ListConflictingAliases CloudFront API。這可讓您尋找有關分佈的部分資訊,以及與 CNAME 別名相衝突的 AWS 帳戶 ID。然後,使用 AssociateAlias API 將您的 CNAME 從現有的分佈 (來源分佈) 移至新分佈 (目標分佈)。
根據您的情況使用下列其中一項解決方法:
- 對於同一帳戶中的來源分佈和目標分佈,請參閱使用 AssociateAlias API 移動 CNAME 這一節。
- 對於跨帳戶來源分佈與目標分佈,請參閱停用衝突 CNAME 的來源分佈區段。
- 如果因為現有流量的停機時間而無法停用來源分佈,則請參閱使用萬用字元來移動替代網域名稱。
**注意:**您無法使用萬用字元來移動 Apex 網域 (example.com)。若要在來源分佈和目標分佈位於不同的帳戶時移動 Apex 網域,請參閱聯絡 AWS Support 來移動替代網域名稱。
解決方法
使用 AssociateAlias API 來移動您的 CNAME
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
若要移動 CNAME,請完成下列步驟:
-
在提出 API 請求之使用者或角色的 AWS Identity and Access Management (IAM) 政策中,新增下列資源層級的許可:
**注意:**將 SourceAcccount 取代為來源分佈的帳號。將 SourceDistroID 取代為來源分佈 ID。將 TargetAccountID 取代為目標分佈的帳號。使用目標發佈 ID 取代。{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudFrontCnameSwapSameAcc", "Effect": "Allow", "Action": [ "cloudfront:GetDistribution", "cloudfront:ListConflictingAliases", "cloudfront:AssociateAlias", "cloudfront:UpdateDistribution" ], "Resource": [ "arn:aws:cloudfront::SourceAcccount:distribution/SourceDistroID", "arn:aws:cloudfront::TargetAccount:distribution/TargetDistroID" ] } ] }
重要: 提出請求的 IAM 使用者或角色在來源分佈和目標分佈中必須具有資源層級許可。
-
識別衝突 CNAME 的分佈。如果您不知道哪個分佈具有衝突的 CNAME,則請使用 ListConflictingAliases API 來尋找該分佈:
**注意:**將 YourDistributionID 取代為分佈的 ID,並且將 YourCNAME 取代為衝突的 CNAME 別名。$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
-
若要驗證網域的擁有權,您必須擁有 YourDistributionID 的讀取權。您也必須擁有與 CloudFront 分佈關聯的 SSL/TLS 憑證,該憑證會保護衝突 CNAME。您準備好驗證擁有權時,請為 CNAME 建立 DNS TXT 記錄,以解析目標分佈的正規名稱。您的 TXT 記錄必須在 CNAME、Apex 或萬用字元之前包括底線:
_.example.com. 900 IN TXT "dexample123456.cloudfront.net"_cname.example.com. 900 IN TXT "dexample123456.cloudfront.net" _*.example.com. 900 IN TXT "dexample123456.cloudfront.net"
-
驗證目標分佈是否具有有效的 SSL/TLS 憑證。
**注意:**主旨名稱或主旨替代名稱必須與 CNAME 別名相符或重疊。最佳實務是擁有列在 Mozilla 的 CA 憑證清單中的 AWS Certificate Manager 或信任的 CA 所核發的有效憑證。如需詳細資訊,請參閱 Mozilla 的 CA 憑證計劃 (在 Mozilla 網站上)。 -
從擁有目標分佈的帳戶執行 AssociateAlias API 請求:
$ aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com
停用衝突 CNAME 的來源分佈
對於位於不同帳戶中的來源分佈和目標分佈,請關閉與衝突網域相關聯的來源分佈。然後,使用 AssociateAlias API 移動 CNAME。
使用 associate-alias 命令來移動不同帳戶之間的 Apex 網域:
- 開啟 CloudFront 主控台。
- 在導覽窗格中,選擇分佈。
- 選取來源分佈,然後選擇停用。
**注意:**如果您不知道哪個分佈具有衝突的 CNAME,請使用 ListConflictingAliases API 來尋找該分佈。將 YourDistributionID 取代為您的分佈 ID,並且將 YourCNAME 取代為衝突 CNAME 的名稱:$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
注意: ListConflictingAliases API 需要 GetDistribution 和 ListConflictingAliases 權限。
停用來源分佈之後,請遵循使用 AssociateAlias API 來移動 CNAME 區段中的步驟。
如果您沒有包含來源分佈的帳戶存取權,或您無法停用來源分佈,則請聯絡 AWS Support。
使用萬用字元來移動替代網域名稱
如果來源分佈和目標分佈位於不同的帳戶中,但您無法停用來源分佈,則請使用萬用字元來移動 CNAME。您必須同時擁有來源分佈和目標分佈的存取權來移動 CNAME。
此程序會涉及來源分佈和目標分佈的多項更新。等待每個分佈完全部署最新的變更後,才能繼續下一步。
若要移動替代網域名稱,請完成下列步驟:
-
更新目標分佈以新增涵蓋您要移動之替代網域名稱的萬用字元 CNAME。如果您的網域是 *.example.com 新增至目標分佈。
**注意:**您必須擁有保護萬用字元網域名稱的目標分佈的 SSL/TLS 憑證。 -
更新 CNAME 的 DNS 設定,以指向目標分佈的正規名稱。例如,如果您的網域是 的 DNS 記錄,將流量路由到目標分佈的正規名稱:
www.example.com. 86400 IN CNAME "dexample123456.cloudfront.net"
**注意:**由於替代網域名稱仍然與來源分佈相關聯,因此來源分佈仍會收到要使用替代網域名稱的要求。直到您在步驟 3 中從來源發佈中移除替代網域名稱為止,目標發佈不會接收要求 (切換)。
-
更新來源分佈來移除替代網域名稱。
**注意:**在此步驟中,即時流量不會中斷。由於請求的網域名稱與新增至目標分佈的萬用字元網域相符,因此即時流量會使用目標分佈設定。 -
若要新增您要移動的替代網域名稱,請更新目標分佈。
-
若要驗證 CNAME 的 DNS 記錄,請使用 dig 或類似的 DNS 查詢工具:
dig CNAME www.example.com +shortnslookup example.com
-
(選用) 若要移除萬用字元替代網域名稱,請更新目標分佈。
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 個月前
- AWS 官方已更新 1 年前