LoginSignup
3
0

More than 3 years have passed since last update.

AWS CDKで暗黙の依存関係が削除できないとき

Posted at

CDKでクロススタック参照するリソースを作成したとき

CDKで複数スタックを定義して、スタック間でリソースを共有したいケースはよくあると思います。
スタックAで定義したLambda関数をスタックBでも使いたい、とかそういう感じのやつです。

基本的にCDKは頭がいいので、渡したいリソースを適当に変数にでも入れて別のスタックに引き渡してやれば、明示的にアウトプットを定義してやらなくても勝手に依存関係を理解していい感じにしてくれますよね。

しかし、いざクロススタック参照していたリソースを削除しようとすると、CloudForamtionがこんな感じにエラーを出してきます。

Export StackA:ExportsOutputFnGetAttLambdaFnstacka07BAF5DArn93F62DF0 cannot be deleted as it is in use by StackB

どうしてですか?

CDKは賢いので、StackAで作成したLambdaがStackBで使われなくなった事に気付いてアウトプットを削除します。
そしてcdk deployを走らせると、StackBはStackAに依存しているため、先にStackAのデプロイが走ります。

そう!!StackBより先に!!StackAを更新しようとするのである!!!

そうすると、LambdaがStackBで使われているためアウトプットの削除が出来ないのです。

解決方法

先にStackBだけ単体で更新する

まあ、当然といえば当然なのですが、StackBを先に単体で更新してからStackAを更新するとうまくいきます。

cdk deploy -e StackB

デプロイ時にオプション-eをつけると、指定したスタックのみ更新してくれます。

これでStackBからStackAのLambdaを参照しなくなり、依存関係がなくなったため、以降は前述のエラーなくStackA、StackB共にデプロイできるようになるはずです。

めでたし!!!!!!!!!!

知らなかったの私だけかもしれないですけどね!!
なかなか-eオプションにたどり着けなかったので……。
ちゃんとドキュメントを読みましょうというお話でした。

ドキュメントを読もう:AWS CDK Toolkit (cdk command)

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0