📀
AWS CDK route53.HostedZone.fromLookupの挙動が予想外だった話
const hostedZoneId = route53.HostedZone.fromLookup(scope, "HostedZoneId", {
domainName: this.domainName,
});
エラー: The specified hosted zone does not exist
とある環境でroute53.HostedZone.fromLookupのメソッドを利用していたのですが、予想外の動きをしました。
状況:
- とある環境を、一度すべて壊して再生成できるか試していた
-
The specified hosted zone does not exist
のエラーが表示される - ドメインなどは間違っていない様子だった
route53.HostedZone.fromLookup() とは
ドキュメントにある通りですが、指定したAWSアカウントの指定したリージョン内にあるRoute53のホストゾーンをクエリ出来るメソッドになっています。
こんな感じで、特定のホストゾーンをクエリし、CDKでRoute53のリソースにアクセスできるようになります。
cdk.context.jsonに情報を保持する
さて、問題の挙動なのですが、route53.HostedZone.fromLookup()は初回実行時にローカルの情報を保持します。
こちらの issue コメントで知ることが出来ました。
初回実行後のcdk.context.jsonを見てみると、以下のような情報が格納されていました。
{
"hosted-zone:account=123456789012:domainName=example.com:region=ap-northeast-1": {
"Id": "/hostedzone/Z012341234XYZ34ABCD12",
"Name": "example.com."
}
}
そして、cdk.context.jsonに情報があれば、AWS側にクエリせずcdk.context.jsonの値を使うようになります。
回避策
cdk.context.jsonの該当箇所を削除して cdk deploy
をし直せば大丈夫です。
まとめ
この問題が発生しうるのが、Route53のホストゾーンごと削除したのちに再生成するときなので、発生頻度は多くありませんが、自分が困ったので記事にしました。
Discussion