😇

インスタンスIDは安易にクロススタック参照すべきでないかも

2022/09/22に公開

概要

intro

先日、CloudFormation(以下、CFn)で管理されているEC2に対して
ベースとなるAMIを変更してデプロイしたところ、インスタンスの新規作成→旧インスタンスの削除
が発生しました。ここまではよかったんですが

というメッセージとともに、UPDATE_ROLLBACK_IN_PROGRESSのステータスとなり
EC2の置き換えに失敗してしまいました。

CloudFormationのOutputsセクション

スタック内で作成したリソースを、Outputに指定すると
別のスタックから読み込む事ができます。

例)VPCIDをoutputして、サブネット作成テンプレートから呼び出す 等

しかし注意事項にも

他のスタックから参照されている出力が存在する場合は、スタックを削除することはできません。

とあるように、出力が参照されているリソースは削除ができません。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html
したがって、今回のようにEC2のインスタンスIDがALBのターゲットグループ管理スタックから参照されていた場合
変更のデプロイができないのです。

outro

今回の場合、ターゲットグループにインスタンスIDは書くべきでないのか
インスタンスIDをOutputすべきでなかったのかで議論が割れそうですが
設計をする上でこの辺の罠を知っておくにこしたことはなさそうです。

Discussion