CloudFront ディストリビューションに CNAME エイリアスを設定したときに発生する CNameAlreadyExists エラーを解決する方法を教えてください。
Amazon CloudFront ディストリビューションに Canonical Name record (CNAME) エイリアスを設定すると、「CNameAlreadyExists」というエラーが表示されます。
簡単な説明
同じ CNAME エイリアスを複数の CloudFront ディストリビューションに使用することはできません。追加しようとしている CNAME エイリアスがすでに別の CloudFront ディストリビューションに関連付けられている場合、エラーが表示されます:
「指定した 1 つ以上の CNAME は、すでに別のリソースに関連付けられています。(サービス: AmazonCloudFront; ステータスコード: 409; エラーコード: CNAME はすでに存在しています。リクエスト ID: a123456b-c78d-90e1-23f4-gh5i67890jkl*"
ソースディストリビューションとターゲットディストリビューションの両方にアクセスできる場合は、既存の CloudFront ディストリビューションから CNAME アソシエーションを手動で削除します。次に、CNAME を新しい CloudFront ディストリビューションに関連付けます。
**注:**CNAME を手動で関連付ける場合は、続行する前に、古いディストリビューションのステータスが Deployed になるまで待つ必要がある場合があります。
ディストリビューション ID がわからない場合は、ListConflictingAliases CloudFront API を使用してください。これにより、ディストリビューションに関する部分的な情報と、競合している CNAME エイリアスのアカウント ID を検索できます。次に、AssociateAlias API を使用して CNAME を既存のディストリビューション (ソースディストリビューション) から新しいディストリビューション (ターゲットディストリビューション) に移動します。シナリオに応じて、次のいずれかの解決策を使用してください:
- 同じアカウントにあるソースディストリビューションとターゲットディストリビューションについては、「AssociateAlias API を使用して CNAME を移動する」セクションを参照してください。
- クロスアカウントのソースディストリビューションとターゲットディストリビューションについては、「CNAME が競合しているソースディストリビューションを無効にする」セクションを参照してください。
- 既存のトラフィックのダウンタイムが原因でソースディストリビューションを無効にできない場合は、「ワイルドカードを使用して代替ドメイン名を移動する」を参照してください。
**注:**ワイルドカードを使用して Apex ドメイン (example.com) を移動することはできません。ソースとターゲットのディストリビューションが異なる AWS アカウントにある場合に Apex ドメインを移動するには、AWS サポートに連絡して別のドメイン名に移動してください。
解決策
AssociateAlias API を使用して CNAME を移動します
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
1.API リクエストを行うユーザーまたはロールの AWS Identity and Access Management (IAM) ポリシーに、次のリソースレベルの権限を追加します:
重要: リクエストを行う IAM ユーザーまたはロールには、ソースディストリビューションとターゲットディストリビューションの両方でこれらのリソースレベルの権限が必要です。
{ "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" ] } ] }
**注:**SourceAccount をソースディストリビューションの AWS アカウント番号に置き換えてください。SourceDistroID をソースディストリビューション ID に置き換えてください。TargetAccountID をターゲットディストリビューションの AWS アカウント番号に置き換えてください。TargetDistroID をターゲットディストリビューション ID に置き換えてください。
2.CNAME が競合しているディストリビューションを特定します。CNAME が競合しているディストリビューションがわからない場合は、ListConflictingAliases API を使用してそのディストリビューションを探してください:
$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME
**注:**YourDistributionID をディストリビューションの ID に置き換えてください。YourCNAME を競合する CNAME エイリアスに置き換えてください。
3.ドメインの所有権を確認するには、YourDistributionID への読み取りアクセス権が必要です。また、競合する CNAME を保護する CloudFront ディストリビューションに関連付けられた SSL 証明書も必要です。
所有権を確認する準備ができたら、ターゲットディストリビューションの正規名に解決される 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"
4.ターゲットディストリビューションに有効な SSL 証明書があることを確認します。
**注:**サブジェクト名またはサブジェクト代替名は、指定された CNAME エイリアスと一致するか、重複している必要があります。Mozilla の CA 証明書リストまたは AWS 証明書マネージャーに記載されている信頼できる CA から有効な証明書を発行してもらうのがベストプラクティスです。
5.ターゲットディストリビューションを所有するアカウントから AssociateAlias API リクエストを実行します:
$ aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com
CNAME が競合しているソースディストリビューションを無効にする
ソースディストリビューションとターゲットディストリビューションが異なる AWS アカウントにある場合は、まず、競合するドメインに関連付けられているソースディストリビューションを無効にします。次に、AssociateAlias API を使用して CNAME を移動します。
associate-alias コマンドを使用して、異なる AWS アカウント間で Apex ドメインを移動できます。
1.CloudFront コンソールを開きます。
2.ナビゲーションペインで、[ディストリビューション] を選択します
3.ソースディストリビューションを選択し、[無効化] を選択します。
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 アカウントにアクセスできない場合、またはソースディストリビューションを無効にできない場合は、AWS サポートにお問い合わせください。
ワイルドカードを使用して代替ドメイン名を移動する
ソースディストリビューションとターゲットディストリビューションが異なるアカウントにあるものの、ソースディストリビューションを無効にできない場合は、CNAME を移動してください。これを行うには、ワイルドカードを使用します。このプロセスでは、ソースディストリビューションとターゲットディストリビューションの両方にアクセスできる必要があります。
このプロセスには、ソースディストリビューションとターゲットディストリビューションの両方に対する複数の更新が含まれます。各ディストリビューションで最新の変更が完全にデプロイされるのを待ってから、次のステップに進んでください。
1.ターゲットディストリビューションを更新して、移動する代替ドメイン名をカバーするワイルドカード CNAME を追加します。ドメインが www.example.com の場合は、ワイルドカード代替ドメイン名 *.example.com をターゲットディストリビューションに追加します。
**注:**ターゲットディストリビューションには、ワイルドカードドメイン名を保護する SSL/TLS 証明書が必要です
2.CNAME の DNS 設定を、ターゲットディストリビューションの正規名を指すように更新します。たとえば、ドメインが www.example.com の場合、www.example.com の DNS レコードを更新して、トラフィックをターゲットディストリビューションの正規名にルーティングします:
www.example.com. 86400 IN CNAME "dexample123456.cloudfront.net"
注: DNS 設定を更新した後でも、ソースディストリビューションは代替ドメイン名を使用するリクエストを処理します。これは、代替ドメイン名が引き続きソースディストリビューションに関連付けられているためです。
3.ソースディストリビューションを更新して、代替ドメイン名を削除します。
**注:**このステップでは、ライブトラフィックが中断されることはありません。リクエストされたドメイン名が、ターゲットディストリビューションに追加されたワイルドカードドメインと一致するため、ライブトラフィックはターゲットディストリビューション設定を使用します。
4.移動する代替ドメイン名を追加するには、ターゲットディストリビューションを更新します。
5.CNAME の DNS レコードを検証するには、dig または同様の DNS クエリツールを使用してください:
dig CNAME www.example.com +short nslookup example.com
6.(オプション) ワイルドカード代替ドメイン名を削除するには、ターゲットディストリビューションを更新します。
関連するコンテンツ
- 質問済み 4ヶ月前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 5年前lg...
- AWS公式更新しました 8ヶ月前
- AWS公式更新しました 1年前