🤖
CDK でハマった!リソースの参照ミス
AWS CDK を使っていると、「なぜかデプロイ時にエラーになる」ことがよくあります。今回遭遇したのは RDS のシークレット ARN をカスタムリソースに渡す処理で発生したエラー でした。
問題の発生
CDK で RDS クラスターを作成し、そのマスターユーザーのシークレット ARN を別のカスタムリソースに渡す処理をしていました。しかし、いざ cdk deploy
を実行すると 「トークンの解決に失敗」 するエラーが発生。
CDK では、secretArn
のようなプロパティは 実行時に確定する値 なので、リソースの作成順序が適切でないと参照が解決できずエラーになります。
エラーの原因
コードをよく見てみると、RDS クラスターのシークレット ARN を取得する際に、
MasterUserSecretArn: credential,
と書いていたのですが、credential
ではなく credential.secretArn
を使うべきでした。
この credential
というオブジェクトは、RDS の認証情報を管理するリソースとして定義していたのですが、正しくが取得できず、以下のようなトークンの解決エラーが発生していました。
Resolution error: Resolution error: Trying to resolve() a Construct at /Resources/${Token[...]/Properties/MasterUserSecretArn/node..
(※実際のエラーメッセージは省略していますが、トークンの解決に失敗していることがポイントです)
解決策
正しいリソースの参照を確認し、credential.secretArn
を使用することでエラーは解消しました。
MasterUserSecretArn: credential.secretArn,
ポイント:リソースの参照を間違えないこと!
まとめ
CDK を使うと AWS リソースの定義がシンプルに書けますが、 リソースの参照ミス には要注意!
もし CDK で「なんかトークンの解決に失敗してる!」というエラーに遭遇したら、「本当に正しいリソースを参照しているか?」 をまずチェックしてみてください!
Let's Happy Coding!
Discussion