[小ネタ] ECS Console v2 からサービスを作成するとCloudFormation経由で実行されます

「ん、なんか身に覚えのないCFnスタックがあるぞ?」と思ったら、そういうことだったのね
2021.04.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ちゃだいん(@chazuke4649)です。

作業中に気づいたことがあり、かつドキュメントの記載を見つけることができなかったので共有します。

結論

  1. ECS Console v2 からサービスを作成するとCloudFormationスタック経由で実行される
  2. 1.のサービスを ECS Console v2 から削除するとCloudFormationスタックは削除されずに残留する(空のスタックが蓄積される)
  3. 1.のサービスの CloudFormationスタックを削除するとその ECS Service は削除される(CFn側からの誤削除注意)

どういうこと?

結論の通りなのですが、どうやら ECS Console v2から「サービスを作成」すると、内部的に CloudFormationスタックがデプロイされ、結果的にサービスが立ち上がる、といった仕様のようです。

ECS Console v2 については以下ブログをご覧ください。

Amazon ECSのマネジメントコンソールの新UIが提供開始されました! | DevelopersIO

公式ドキュメントとしては以下かと思いますが、現時点でその点についての記載は見つけられませんでした。

Creating a service using the new console - Amazon ECS

試してみる

Console v2からサービスを作成する

既存環境の既存ECSクラスターに対して、新しいサービスを[Deploy]します。

ECSサービス名はtest-stg-service-consolev2とします。他以下の通り設定で、実行します。

無事ECSサービスが立ち上がりました。

次に、CloudFormationコンソールを開いてみると、

ECS-Console-V2-Service-xxxxxxxxxというCFnスタックが作成されています。

スタックのリソースを確認すると、コンソールから作成したECSサービスで間違いありません。

Console v2から作成したサービスを更新する

Console v2から作成したサービスを更新すると、CFn側はどうなるか試してみます。

コンソールから操作し、タスク数を2に変更します。

CloudFormationコンソールを確認すると、特に先ほどから変更はないです。

Console v2から作成したサービスを削除する

次はConsole v2から作成したサービスを削除してみます。

ECSコンソール側では無事削除されました。
CloudFormationコンソール側を確認すると、スタックが残っていることがわかります。

リソースのない空のスタックが残ってしまうのはちょとビミョいですね...

Console v2から作成したサービスのCFnスタックを削除する

さっきのコンソール側から削除でなく、スタックの方を削除したらどうなるか試しました。

同じようにConsole v2からサービスを立ち上げて、以下の通りそのCFnスタックを削除します。

やはり、削除は成功し、スタックととおもにリソースであるECSサービスも削除されました。

CFn側の不要なスタック整理などの際に、誤って削除するとECSサービス側も削除してしまうのは注意が必要ですね。

終わりに

冒頭の結論を再掲します。

  1. ECS Console v2 からサービスを作成するとCloudFormationスタック経由で実行される
  2. 1.のサービスを ECS Console v2 から削除するとCloudFormationスタックは削除されずに残留する(空のスタックが蓄積される)
  3. 1.のサービスの CloudFormationスタックを削除するとその ECS Service は削除される(CFn側からの誤削除注意)

近年リリースされるサービスや新機能は、内部的・透過的に別のAWSサービスを利用しているケースがあり、CloudFormationはその中でもよく登場します。今回の件でECS Console v2のサービス作成は、裏側でCloudFormationが実行されていることがわかりました。

それではこの辺で。ちゃだいん(@chazuke4649)でした。