CloudFront ディストリビューションで CNAME エイリアスを設定する際に、 CNAMEAlreadyExists エラーが表示された場合の解決方法を教えてください。

最終更新日: 2021 年 8 月 18 日

Amazon CloudFront ディストリビューションで CNAME エイリアスを設定する際に、CNAMEAlreadyExists エラーが表示されます。

簡単な説明

CloudFront ディストリビューションに CNAME エイリアスを追加しようとすると、次のようなエラーが発生します。

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 エイリアスを使用することができないため、このエラーが発生します。CNAMEAlreadyExists エラーは、追加しようとしている CNAME エイリアスが既に別の CloudFront ディストリビューションに関連付けられている場合に発生します。

このエラーを解決するには、AssociateAlias または ListConflictingAliases CloudFront API を使用して、CNAME の場所を特定して移動します。

シナリオに応じて、次の解決方法のいずれかを選択してください。

  • ソースディストリビューションとターゲットディストリビューションが同じアカウント上にある場合は、「Use the AssociateAlias API to move your CNAME」セクションにある手順を実行します。
  • ソースディストリビューションとターゲットディストリビューションが異なるアカウント上にある場合は、「Use the ListConflictingAliases API to move your CNAME」セクションにある手順を実行します。

解決方法

AssociateAlias API を使用して CNAME を移動する

1.    (必須) ソースディストリビューションとターゲットディストリビューションの両方の AWS Identity and Access Management (IAM) ポリシーで、API リクエストを行う IAM ユーザーまたはロールに次のリソースレベルのアクセス許可を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapSameAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:GetDistribution",
        "cloudfront:ListConflictingAliases",
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::123456789:distribution/SourceDistroID",
        "arn:aws:cloudfront::123456789:distribution/TargetDistroID"
      ]
    }
  ]
}

重要: リクエストを行う IAM ユーザーまたはロールには、ソースディストリビューションとターゲットディストリビューションの両方の IAM ポリシーで前述のリソースレベルのアクセス許可が必要です。

2.    競合する CNAME があるディストリビューションを特定します。

どのディストリビューションに競合する CNAME があるかわからない場合は、 ListConflictingAliases API を使用してそのディストリビューションを特定します。例:

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributiontID --alias YourCNAME

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

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"

4.    ターゲットディストリビューションに有効な証明書があることを確認します。

注: サブジェクト名またはサブジェクト代替名は、指定された CNAME エイリアスと一致、または重複している必要があります。Mozilla Included CA Certificate List に一覧表示されている信頼できる CA 、または AWS Certificate Manager から有効な証明書を発行することがベストプラクティスです。

5.    ソースおよび送信先ディストリビューションが属している同じアカウントから AssociateAlias API リクエストを実行します。

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

ListConflictingAliases API を使用して CNAME を移動する

重要: ソースディストリビューションは、エッジ最適化された Amazon API Gateway などの AWS マネージドサービスによって、お客様に代わってデプロイすることができません。

ソースディストリビューションのステータスを [無効] に設定する必要があります。ディストリビューションを無効にする方法

1.    CloudFront コンソールを開きます。

2.    ナビゲーションペインで、[ディストリビューション] を選択します。

3.    ディストリビューションを選択してから、[無効] を選択します。

どのディストリビューションに競合する CNAME があるかわからない場合は、 ListConflictingAliases API を使用してそのディストリビューションを特定します。例:

$ aws cloudfront list-conflicting-aliases --distribution-id YourDistributiontID --alias YourCNAMEtoAdd

ListConflictingAliases API には、GetDistribution および ListConflictingAliases のアクセス許可が必要です。

注: 所有権を確認するには、YourDistributionID への読み込みアクセス権が必要です。また、競合する CNAME を保護する証明書を関連付ける必要があります。

その後、次の操作を実行します。

1.    (必須) ターゲットディストリビューションの IAM ポリシーで、API リクエストを行う IAM ユーザーまたはロールに次のリソースレベルのアクセス許可を追加します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudFrontCnameSwapCrossAcc",
      "Effect": "Allow",
      "Action": [
        "cloudfront:AssociateAlias",
        "cloudfront:UpdateDistribution"
      ],
      "Resource": [
        "arn:aws:cloudfront::123456789:distribution/TargetDistroID"
      ]
    }
  ]
}

2.    ターゲットディストリビューションの正規名を解決する CNAME の DNS TXT レコードを作成して、ドメインの所有権を確認します。TXT レコードには、CNAME または Apex の前にアンダースコアを含める必要があります。例:

_cname.example.com.   900   IN   TXT     "dexample123456.cloudfront.net"
_.example.com.        900   IN   TXT     "dexample123456.cloudfront.net

3.    ターゲットディストリビューションに有効な証明書があることを確認します。

注: サブジェクト名またはサブジェクト代替名は、指定された CNAME エイリアスと一致、または重複している必要があります。Mozilla Included CA Certificate List に一覧表示されている信頼できる CA 、または AWS Certificate Manager から有効な証明書を発行することがベストプラクティスです。

4.    ListConflictingAliases API を実行します。

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

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?