🔖
@aws-cdk/aws-amplify » App の addDomainを使ってはいけない
TL;DR
- Amplifyではドメイン指定時、その前に接続先のブランチが作成されている必要がある
- にも関わらずCloudFormationの AWS:Amplify:Domain リソースでは、ブランチ名を文字列で取る
- したがってCloudFormationでAmplifyにドメイン付与する際はBranchに対する明示的なDependencyを指定する必要がある
- CDKはそんなこと考慮してくれない。
トラブルシュート
このようなエラーが発生します。しかし main
ブランチは存在するので、はぁ?となります。
A sub-domain can not point to a non existing branch: main
ここでの branch とは、リポジトリのブランチではなくAmplify AppのBranchリソースを指しています。
したがって、先に AWS:Amplify:Branchリソースができている必要があるんですね。
所感
CloudFormation の AWS:Amplify:Domain リソースをデザインしたAWSのエンジニアには反省を求めたい。
もしくは私の想像のつかない深い事情があるのかもしれない...
Discussion
CFnで書く場合
CFnのDocを見ると
と書くことでbranch nameが取れるので、これを使えばDependencyで指定する必要はないかと思います
CDKの
Cfn
プレフィックスなクラス(L1)を使う場合とすることで、上記のCFnと同じテンプレートを吐き出せるので、同じくCFnに依存関係を教えた上でbranch nameを参照できそうです。
加えて、CDKでも明示的に依存関係を示すことはできます。
CDKのL2を使う場合
Branchクラスにて
branch.branchName
にattrBranchName
を差してあげてて、Domainクラスでそれを使ってるので、L2のクラスを使って書けばCFn上で依存関係は示されるかと思います。addDomain
について言及してらっしゃるのでL2を使ってらっしゃるのですね。。。パッとコードを見る限り、2年前には割と完成している機能ではあるのですが、CDKかCFnのどちらかにバグがあるのかもしれません。もし最新版でも再現できるのであればissueを建てると解決してもらえそうです!