😎
CDK で ECS のタスク定義を作成するときに過去のリビジョンを INACTIVE にしない方法
背景
CDK でタスク定義を作成すると最新のリビジョンのみ ACTIVE になり、過去のリビジョンがすべて INACTIVE になってしまい、ECS サービスを過去のタスク定義に戻すことができませんでした。
通常、バグが発生しデプロイしたコードをロールバックしたいときは、リバートブランチをデプロイすることでアプリケーションをロールバックすると思います。
しかし、重大なバグが発生し一刻も早くロールバックしたいときはデプロイフローを経ずに ECS サービスのリビジョンを戻すのが最も早いため、念の為過去のリビジョンを INACTIVE にしたくありませんでした。
そこで CDK で ECS のタスク定義を作成するときに過去のリビジョンを INACTIVE にしない方法を調べました。
やり方
タスク定義に RemovalPolicy.RETAIN
を設定すれば過去のリビジョンは INACTIVE になりません。
import { RemovalPolicy } from 'aws-cdk-lib';
import * as ecs from 'aws-cdk-lib/aws-ecs';
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef');
taskDefinition.addContainer('DefaultContainer', {
image: ecs.ContainerImage.fromRegistry("amazon/amazon-ecs-sample"),
memoryLimitMiB: 512,
});
// こちら
taskDefinition.applyRemovalPolicy(RemovalPolicy.RETAIN)
タスク定義のデフォルトの RemovalPolicy は DESTROY のため、それを RETAIN に変更するコードとなります。
ただ RemovalPolicy.RETAIN
を設定するとスタックを削除したり、スタックからタスク定義のリソースを削除しても、タスク定義は削除されず残ってしまいます。
削除されず残ったものと同じファミリー名でタスク定義を作成してもエラーにならず、そのタスク定義がスタックで使われるため、大きな問題は出ないと思いますが、不要なタスク定義が残ってしまうのは気になりますね。
Discussion