ドメインアタッチ時の CNAME Already exist エラーを回避する

発生条件

Shifter にアタッチしようとしているドメインが、既存の CloudFront にすでに登録されている場合に発生します。

発生理由

Shifter は CDN に CloudFront を採用しており、AWS の仕様に従い、CloudFront 上でドメイン名はユニークでなければなりません。そのため、同じドメインを別の CloudFront に設定しようとするとエラーが発生します。

Use custom URLs by adding alternate domain names (CNAMEs)

回避策

以下のいずれかの方法でエラーを回避できます。

回避策A 既存のドメインとは別なドメインを Shiter にアタッチし、運用する

既存のドメインとは異なるドメインを使用することで、エラーを回避できます。

  • 例:既存のドメイン example.com に対し、Shifter 用のドメイン shifter.example.com を使用する。

回避策B 既存の CloudFront から当該ドメインをデタッチ・削除した後、 Shifter にアタッチする

  1. 既存の CloudFront から対象ドメインを削除する。
  2. Shifter のサイトに接続するよう DNS レコードを変更する。
  3. 変更後、Shifter のサイトにドメインをアタッチする。
  4. Shifter のサイトをジェネレートする。

注意: CloudFront からドメインを削除した時点で、そのドメインによるアクセスが一時的に 403 Forbidden となる可能性があるため、アクセスが少ない時間帯に実施することを推奨します。

CloudFrontのCNAMEAlreadyExistsエラーを解決するフローチャート(2021年夏版) の記事が分かりやすいです。

回避策C Shifter のアーティファクトに対してのみドメインを適用する (要 shifter-cli)。

Shifter 全体ではなく、アーティファクトに対してのみカスタムドメインを適用することで、CNAME Already Exists エラーを回避できます。ただし、この方法を使用する場合、リバースプロキシなどを設定し、外部サーバーからのアクセスを適切に転送する必要があります。

実行手順:

  1. shifter-cli をインストールする。
  2. 以下のコマンドを実行し、カスタムドメインをアタッチする。
$ shifter attach --username USERNAME --password PASSWORD --site-id YOUR-SITE-ID --domain DOMAIN --no-shifter-cdn

参考: