新サービス立ち上げ時に、CloudFrontのAssociateAlias APIを利用してドメイン切り替えしてみた

こんにちは、ReviCoで開発チーム(兼最近はPO)をやっているカムリです。

本日はややニッチな話題ではありますが、CloudFrontのAssociateAlias APIを利用して、ドメイン切り替え作業を実施してみたお話をしたいと思います。



(ecbeing社から分社化した)ReviCoでは、10月19日に新サービスである「ReviCoポータル」をリリースしました。 詳しくは以下URLについて参照ください。 prtimes.jp

背景

新サービスを展開するにあたって、経営層からのビジネス要件の一つとして

「すでにキャンペーンサイトとして運用しているwww.revico.jpドメインをポータルサイトとして置き換えたい、キャンペーンサイトはポータルサイトに統合したい」

という内容のものがありました。

新ドメインではなく既存のドメインを利用する理由としては、SEO対策として、既存のキャンペーンサイト運用で培ってきたrevico.jpドメインパワーを上手く利用してポータルサイトをオープンしたいという意図がありました。

ReviCoではクラウドインフラとして「AWS」を全面的に利用しており、CloudFrontをCDNサービスとして利用しています。

ゆえに代替ドメイン名とCloudFrontディストリビューションとが強く紐づいている状態であり、 これを考慮してドメイン切り替え作業を行う必要がありました。

考察

ドメイン切り替え手順を考えるにあたって、単純にこれを実施するとしたら、大きく二つの手段が考えられると思います。

手段1: CloudFrontディストリビューションのオリジンを書き換える

手段2: CloudFrontディストリビューションの代替ドメイン名を書き換える

まず手段1についてです。

こちらはすでにキャンペーンサイトとして運用しているCloudFrontディストリビューションに、新たにポータルサイトが稼働するオリジンを追加して書き換えるという方法です。

この方法は実施を見送りました。

その理由としては、既存のCloudFrontディストリビューションと、新規のCloudFrontディストリビューションとに多くのビヘイビアが設定されており、書き換えをするのに作業コストが高くついたためです。

次に手段2についてです。

こちらは移行先と移行元のCloudFrontディストリビューション間で、代替ドメイン名を書き換えるという方法です。

この方法は一見すると先の手段1よりも簡潔に、より素早く作業が完了しそうに思われ、実際に作業手順を文字に起こすと、

① すでに利用している移行元のCloudFrontディストリビューションの代替ドメイン名を空に設定する

② 移行先のCloudFrontディストリビューションの代替ドメイン名を移行先ドメイン(①の代替ドメイン名)に設定する

というやり方で簡単にできる!!

、、、はずなのですが、

過去のやってみた系のブログ*1を拝見すると、単純に代替ドメイン名を書き換えるだけでは上手くいかない事例を発見しました。

具体的には上記手順の②の設定タイミングで、なぜか画面上はCNAMEが重複していないのに「CNAMEAlreadyExists」エラーが起きたりしてしまう現象が起こることが分かり、 どうやらこの方法だとスムーズにドメイン切り替えできない可能性があることが分かりました。

さらに調査を進めていくと、AWSさん提供APIである「AssociateAlias API*2」を利用すると、今回のユースケースを簡単に実現できそうだということが分かりました。

この情報をもとにインフラつよつよの上長と相談したところ、今回の作業はこちらのAPIを利用してドメイン切り替え作業を実行することになりました。

ドメイン切り替えの手順

ドメイン切り替えにあたっては次の画像をもとに切り替えます。

①移行先のCloudFrontディストリビューション情報を控える

まず、移行先のCloudFrontディストリビューションにおける、ディストリビューションドメイン名とディストリビューションIDを控えます。

移行先なので、実際に移行したいサイトで利用するCloudFrontディストリビューションです。 今回の事例では、ReviCoポータルサイトを運営するCloudFrontディストリビューションのことを指します。

②Route53の設定を変更する

次に、Route53の設定を変更します。

移行先ドメインのTXTレコードとエイリアスレコードに、移行先のCloudFrontディストリビューションを設定します。

ややこしいですね、整理しましょう。

名称 説明
移行先ドメイン 置き換えたいドメインのこと。今回だと、「www.revico.jp」のことを指す
移行先のCloudFrontディストリビューション ①のディストリビューションを指す



上の情報をもとに、AWSマネジメントコンソール(以下、マネコンと表記)上からRoute53のホストゾーンから、移行先ドメインに飛びます。

最初に移行先ドメインのTXTレコードを追加します。このとき、レコードの値は移行先CloudFrontディストリビューションのディストリビューションドメイン名です。

文字にするとこんな感じです

_www.revico.jp TXT 「NEXT.cloudfront.net 」

続けてエイリアスレコードも変更します。値はTXTレコードのときに設定した値と同じものを設定します。

文字にするとこんな感じです

www.revico.jp Alias 「NEXT.cloudfront.net 」

このタイミングで、エイリアスレコードが変更されたから「移行先のサイトが見れるぞ!」と思われますが、実はアクセスしてもまだ移行できていません。

次のAPIでディストリビューションの代替ドメイン名を変更してあげる必要があります。

③CloudFrontのAssociateAlias APIを実行する

Route53の設定を変更したので、満を持してAssociateAlias APIを実行します。

マネコン上からは特にAssociateAlias APIを実行する画面はないので、CLIで実行します。

実行するうえで、引数はドキュメント*3を参考にしてほしいですが、以下の形式でコマンド実行します。

aws cloudfront associate-alias \
  --target-distribution-id {移行先のCloudFrontディストリビューションID} \
  --alias {移行先ドメイン}

成功した場合は特にエラーなくコマンド実行が終了します。

APIを実行するIAMユーザーの権限が足りなかったりする場合はエラーが起きるのでエラー文を確認後、再実行してみてください。 (このIAM関連のエラーで何度か実行に失敗して焦りました)

はい、これで見事に切り替わります。

また切り替えのタイミングで、移行元のディストリビューションの代替ドメイン名から移行先ドメインが消えることも確認できると思います。

マネコン上で、CloudFrontやRoute53の画面を往復したり、設定変更のタイミングを見計らうことなく、スムーズにドメインを切り替えることができます。

最後に

今回の記事では、CloudFrontのAssociateAlias APIを利用したドメイン切り替え方法について解説しました。

今までドメイン周りの作業をしたことがなく、ドメイン切り替えが上手くいくかドキドキでしたが、 AWSさんが用意してくださっているAssociateAlias APIを利用することで、スムーズにドメイン切り替え作業を実現することができました。

もし

  • CDNにCloudFrontを利用している

  • 既存のドメインを利用した、切り替え作業が必要

というケースになった場合には、是非CloudFrontのAssociateAlias APIを利用してみてください。

また、上記で解説したドメイン切り替え作業を経てローンチした、新サービス「ReviCoポータル」で気になる商品の口コミをご覧ください!
www.revico.jp

お知らせ

ecbeingでは新進気鋭なエンジニアを募集しております!
careers.ecbeing.tech