スキップしてコンテンツを表示

CloudFront ディストリビューションに CNAME エイリアスを設定する際に発生する "CNAMEAlreadyExists" エラーを解決する方法を教えてください。

所要時間2分
0

Amazon CloudFront ディストリビューションに Canonical Name Record (CNAME) エイリアスを設定する際に、"CNAMEAlreadyExists" というエラーが発生します。

簡単な説明

同じ CNAME エイリアスを複数の CloudFront ディストリビューションに使用することはできません。追加したい 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 を手動で関連付けるには、既存ディストリビューションのステータスが Deployed になるまで待つ必要がある場合があります。

競合する CNAME エイリアスに関するディストリビューションおよび AWS アカウント ID について部分的な情報を取得するには、AWS コマンドラインインターフェイス (AWS CLI) コマンド list-conflicting-aliases を実行します。次に associate-alias コマンドを実行し、CNAME を既存のディストリビューション (ソースディストリビューション) から新しいディストリビューション (ターゲットディストリビューション) に移動します。

シナリオに応じて、次のいずれかの解決策を実施してください。

  • ソースディストリビューションとターゲットディストリビューションが同じアカウントにある場合は、「CNAME を移動する」セクションを参照してください。
  • クロスアカウントのソースディストリビューションとターゲットディストリビューションについては、「CNAME が競合しているソースディストリビューションを無効にする」セクションを参照してください。
  • ソースディストリビューションを無効にできない場合は、「ワイルドカードを使用して代替ドメイン名を移動する」セクションを参照してください。
    注: ワイルドカードを使用して apex ドメイン (example.com) を移動することはできません。ソースとターゲットのディストリビューションが異なるアカウントにある場合は、Apex ドメインを移動するには、サポートにお問い合わせのうえ代替ドメイン名を移動してください。

解決策

CNAME を移動する

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

CNAME を移動するには、ソースディストリビューションとターゲットディストリビューションの両方にアクセスできる必要があります。

CNAME を移動するには、次の手順を実行します。

  1. API リクエストを行うユーザーまたはロールの AWS Identity and Access Management (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"
          ]
        }
      ]
    }

    注: IAM ユーザーまたはロールには、ソースディストリビューションとターゲットディストリビューションに対する上記のアクセス許可が必要です。上記のポリシーでは、SourceAccount をソースディストリビューションのアカウント番号に、SourceDistroID をソースディストリビューションの ID に置き換えます。さらに、TargetAccount をターゲットディストリビューションのアカウント番号に、TargetDistroID をターゲットディストリビューションの ID に置き換えます。

  2. list-conflicting-aliases コマンドを実行し、競合する CNAME を含むディストリビューションを特定します。

    aws cloudfront list-conflicting-aliases --distribution-id YourDistributionID --alias YourCNAME

    注: YourDistributionID をディストリビューションの ID に、YourCNAME を競合している CNAME エイリアスに置き換えます。

  3. 所有権を検証するために、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"

    注: ドメインの所有権を確認するには、YourDistributionID への読み取りアクセス許可が必要です。さらに、CloudFront ディストリビューションに関連付けられた SSL/TLS 証明書が必要です。これにより、競合する CNAME が保護されます。

  4. ターゲットディストリビューションに有効な SSL/TLS 証明書があることを確認します。
    注: サブジェクト名またはサブジェクト代替名は、CNAME エイリアスと一致するか、重複している必要があります。AWS Certificate Manager または Mozilla's CA 証明書リストに記載されている信頼された認証機関 (CA) から有効な証明書を取得することをおすすめします。詳細については、Mozilla のウェブサイトで「認証機関」を参照してください。

  5. ターゲットディストリビューションを所有するアカウントから associate-alias コマンドを実行します。

    aws cloudfront associate-alias --target-distribution-id YourTargeDistributiontID --alias your_cname.example.com

    注: 実際のものでそれぞれ、YourTargetDistributionID をターゲットディストリビューションの ID に、your_cname.example.com をドメインに置き換えます。

競合する CNAME を持つソースディストリビューションを無効にする

ソースディストリビューションとターゲットディストリビューションが異なるアカウントにある場合は、競合しているドメインに関連付けられたソースディストリビューションを無効にします。次に、「CNAME を移動する」セクションの手順を実行します。

競合しているドメインに関連付けられたソースディストリビューションを無効にするには、次の手順を実行します。

  1. CloudFront コンソールを開きます。
  2. ナビゲーションペインで [ディストリビューション] を選択します
  3. ソースディストリビューションを選択し、[無効] を選択します。

ソースディストリビューションを含むアカウントにアクセスできないか、ソースディストリビューションを無効にできない場合は、AWS サポートにお問い合わせください。

ワイルドカードを使用して代替ドメイン名を移動する

ソースディストリビューションとターゲットディストリビューションが異なるアカウントにあるものの、ソースディストリビューションを無効にできない場合は、ワイルドカードを使用して CNAME を移動してください。

次の手順では、各ディストリビューションが更新を完全にデプロイするまで待ってから、次のステップに進んでください。

代替ドメイン名を移動するには、以下の手順を実行します。

  1. ターゲットディストリビューションを更新し、移動する代替ドメイン名に対応するワイルドカード CNAME を追加します。たとえば、ドメインが www.example.com の場合は、ワイルドカード代替ドメイン名 *.example.com をターゲットディストリビューションに追加します。
    注: ターゲットディストリビューションには、ワイルドカードドメイン名を保護する SSL/TLS 証明書が必要です。

  2. CNAME の DNS レコードを更新し、トラフィックをターゲットディストリビューションの正規名にルーティングします。

    www.example.com.         86400   IN   CNAME     "dexample123456.cloudfront.net"

    注: 代替ドメイン名はまだソースディストリビューションに関連付けられているため、ソースディストリビューションは引き続き代替ドメイン名を使用するリクエストを受け付けます。ターゲットディストリビューションは、ソースディストリビューションから代替ドメイン名を削除した後にのみリクエストを受け付けます。

  3. ソースディストリビューションを更新し、代替ドメイン名を削除します。
    注: 更新中にライブトラフィックが中断されることはありません。リクエストされたドメイン名は、ターゲットディストリビューションに追加したワイルドカードドメインと一致するため、ライブトラフィックはターゲットディストリビューションの設定を使用します。

  4. 移動する代替ドメイン名を追加するには、ターゲットディストリビューションを更新します。

  5. CNAME の DNS レコードを検証するには、dig または同様の DNS クエリツールを使用してください:

    dig CNAME www.example.com +shortnslookup example.com
  6. (オプション) ワイルドカード代替ドメイン名を削除するには、ターゲットディストリビューションを更新します。

コメントはありません

関連するコンテンツ