🤷

Amplify Gen2でカスタムドメイン設定ができなくて困った

2024/04/10に公開

はじめに

2024年4月10日時点では、Amplify Gen2のカスタムドメイン等一部機能が使えません。
コンソール画面をGen1に戻す機能が提供されていないため、一度Gen2でアプリを作成してしまうと詰みます(以下ポスト参照)。
https://x.com/derricknico13/status/1741857661845709067
本記事では、AWS CLIで設定する解決策を、従来のコンソールからの利用方法と対応づけて紹介します。

前提

  • Amplify Gen2のアプリが立ち上がっている
  • AWS CLIがインストールされている
  • Route53にドメインが存在している

AWS CLIのプロファイルを変更する

まずは、AWS CLIに対象のAmplifyアプリにアクセスできるように、適切なプロファイルを設定しましょう。

aws configure list
Name                    Value             Type    Location
----                    -----             ----    --------
profile                <not set>             None    None
access_key     ****************XAH2 shared-credentials-file    
secret_key     ****************0UgZ shared-credentials-file    
region           ap-northeast-1      config-file    ~/.aws/config

現時点では、profileに何も設定されていません。
すでに設定がお済みの方はスキップしていただいて問題ありません。

ローカルのプロファイル情報を確認する

cat ~/.aws/credentials
[example]
aws_access_key_id=xxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

例でexampleというprofileで設定してみます。

環境変数で任意のプロファイルを設定する

グローバル環境変数にAWSのプロファイルをexampleとして設定しましょう。
シェルで実行すればよいです。

export AWS_PROFILE=example

現在設定されているプロファイルを確認する

aws configure list
Name                    Value             Type    Location
----                    -----             ----    --------
profile       example              env    ['AWS_DEFAULT_PROFILE', 'AWS_PROFILE']
access_key     ****************IGI6 shared-credentials-file    
secret_key     ****************Fno7 shared-credentials-file    
region           ap-northeast-1      config-file    ~/.aws/config

exampleがプロファイルとして設定されました。

カスタムドメインメニューでやりたいことをAWS CLIで実現する

必要な情報を準備する

まずはAWS CLIの引数で利用するapp-iddomain-nameを準備しましょう。

AmplifyアプリID:

Amplify Consoleからアプリを選択し、「App settings」>「全般設定」から確認できます。

ドメイン名:
カスタムドメインのフルドメイン名(例:example.com、abc.example.com)。

Amplifyアプリとドメインの紐づきを確認する

まずは、現在のドメイン状況を確認しましょう。

Amplify Gen1のドメイン管理画面 「ドメイン情報」
ドメインを指定して取得:

aws amplify get-domain-association --app-id <アプリID> --domain-name <ドメイン名>

一覧取得:

aws amplify list-domain-association --app-id <アプリID>

上記のget/listコマンドを実行すると次のようなJSONオブジェクトが返ってきます。

{
    "domainAssociations": [
        {
            "domainAssociationArn": "arn:aws:amplify:ap-northeast-1:00000000000:apps/xxxxxxxxxx/domains/example.com",
            "domainName": "example.com",
            "enableAutoSubDomain": false,
            "domainStatus": "AVAILABLE",
            "certificateVerificationDNSRecord": "_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example.com. CNAME _xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxx.acm-validations.aws.",
            "subDomains": [
                {
                    "subDomainSetting": {
                        "branchName": "main"
                    },
                    "verified": false,
                    "dnsRecord": " CNAME xxxxxxxxxxxxxx.cloudfront.net"
                }
            ]
        }
    ]
}

コンソール画面で見られる「利用可能」がdomainStatus、「URL」がdomainName、「ブランチ」がbranchNameに紐づいているみたいですね。

ドメインを追加する


Amplify Gen1のドメイン管理画面 「ドメイン追加機能」

aws amplify create-domain-association --app-id <アプリID> --domain-name <ドメイン名>

上記のcreateコマンドでドメインを新たに追加できます。
先程紹介したgetコマンドで確認してみてください。

終わりに

AWSの機能はドメインの設定に限らずAPIで提供されているので、コンソールでは利用できない機能も、CLIやSDK経由で使うことができます。
また、Amplify Gen2が正式にリリースされ、本記事が不要になることを願います。
楽しみですね!
https://docs.amplify.aws/gen2/

参考

https://docs.aws.amazon.com/cli/latest/reference/amplify/get-domain-association.html

https://docs.aws.amazon.com/cli/latest/reference/amplify/list-domain-associations.html

https://docs.aws.amazon.com/cli/latest/reference/amplify/create-domain-association.html

Discussion