AWS Amplify に AWS CloudFormation でカスタムドメイン (Zone Apex) を設定する

こんにちは、広野です。

AWS Amplify は以前はカスタムドメインに Zone Apex を設定できなかった記憶があるのですが、今ではできるようになっていました。(※私の勘違いかもしれませんが)

そして、マネジメントコンソールでは簡単に設定できますが、AWS CloudFormation ではどのように設定すればよいのかわかりませんでした。AWS 公式ドキュメントにも掲載がなく、ネット上の情報もなかったので、ここで紹介しておきます。

参考: マネジメントコンソールでの設定方法

ストレートに Zone Apex の設定方法が書かれていないのですが、「ルートを除外する」だと Zone Apex を登録しない、「ルートを含む」だと Zone Apex を登録するようになっています。

設定すると、AWS が自動でデプロイした Amazon CloudFront ディストリビューションをターゲットにした Amazon Route 53 エイリアスレコードが作成されました。モザイクで隠していますが、レコードは Zone Apex です。この Amazon CloudFront ディストリビューションは AWS 管理下にあり、このドメイン名に対してさらにエイリアスレコードを作成しようとしても、拒否されました。

AWS CloudFormation による設定方法

カスタムドメインは AWS::Amplify::Domain のリソースとして設定します。

公式ドキュメントでは、その中の Prefix という項目でサブドメインを設定できます。例えば www.domain.com であれば Prefix に www を設定します。では、URL を Zone Apex (この場合、domain.com) にしたい場合はどう書くのか?は掲載されていませんでした。

実のところ簡単で、Prefix に空文字 “” を指定すればよいだけのことでした。

以下、AWS CloudFormation テンプレートの抜粋です。

  AmplifyDomainProd:
    Type: AWS::Amplify::Domain
    Properties:
      AppId: !GetAtt AmplifyConsole.AppId
      DomainName: xxxxxx.xxx
      CertificateSettings:
        CertificateType: CUSTOM
        CustomCertificateArn: !Ref CertificateArn
      SubDomainSettings:
        - BranchName: main
          Prefix: ""
      EnableAutoSubDomain: false

これにて、マネジメントコンソールで設定したときと同じ状態にすることができました。

まとめ

いかがでしたでしょうか。

今回はニッチな情報でしたが必要な方には必要なものだと思います。

本記事が皆様のお役に立てれば幸いです。

著者について
広野 祐司

AWS サーバーレスアーキテクチャと React を使用して社内向け e-Learning アプリ開発とコンテンツ作成に勤しんでいます。React でアプリを書き始めたら、快適すぎて他の言語には戻れなくなりました。近年は社内外への AWS 技術支援にも従事しています。AWS サービスには AWS が考える IT 設計思想が詰め込まれているので、そこを理解できると他のことにも活かせるので、いつも AWS を通して勉強させて頂いてまます。
取得資格:AWS 認定は15資格、IT サービスマネージャ、ITIL v3 Expert 等
2020 - 2025 Japan AWS Top Engineer 受賞
2022 - 2025 AWS Ambassador 受賞
2023 当社初代フルスタックエンジニア認定
好きなAWSサービス:AWS AppSync Events / AWS Step Functions / AWS CloudFormation

広野 祐司をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSアプリケーション開発クラウドソリューション
シェアする
タイトルとURLをコピーしました