[アップデート] Amazon ECS タスク定義のリビジョンが「削除」をサポートしました!

2023.02.28

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

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

ついに Amazon ECS タスク定義のリビジョンが「削除」をサポートしました!

いままで

今までの Amazon ECS タスク定義(のリビジョン)はACTIVEINACTIVEの2つのステータスで管理されていました。文字通りINACTIVE(非アクティブ)であるため、ECS コンソール上でタスク定義が削除できず、残り続けるような仕様でした。

今回のアップデートでINACTIVEなタスク定義のリビジョンを削除できるようになりました。

加えて、リビジョンを持たなくなったタスク定義は、コンソール上に表示されなくなりました。

やってみる

マネジメントコンソールで実際にタスク定義のリビジョンを削除してみます。

ACTIVE から INACTIVEへ

以下の画像から、タスク定義deletion-test-tdACTIVEなリビジョンのみを保持しています。

ACITVE なタスク定義リビジョン画面

INACITVE なタスク定義リビジョン画面

リビジョンの登録解除を行います。ACITVEなタスク定義リビジョン画面の「アクション」から、リビジョンの登録解除を行います。「アクション」を見ると、ACITVEなリビジョンから直接削除はできないことがわかります。

登録解除が完了すると、ACITVEなタスク定義リビジョンはINACITVEになります。

ACITVE なタスク定義リビジョン画面

INACITVE なタスク定義リビジョン画面

ここまでは今まで通りですね。では、リビジョンの削除を行いましょう。

INACTIVE から DELETE_IN_PROGRESS

リビジョンの削除を行っていきます。

INACITVEなタスク定義リビジョン画面の「アクション」から削除を選択します。

確認画面が出てくるので「delete」を入力後、削除を選択します。

削除を行うと、INACITVEなタスク定義リビジョンはDELETE_IN_PROGRESSになります。

INACITVE なタスク定義リビジョン画面

DELETE_IN_PROGRESS なタスク定義リビジョン画面

ちなみにですがDELETE_IN_PROGRESS状態のタスク定義の最終リビジョンステータスはINACITVEでした。

リビジョンの削除完了まで20-30分くらいかかりました。

削除が完了するとタスク定義がコンソール上に表示されなくなっていることがわかります。

もう一回作ってみる

タスク定義deletion-test-tdをもう一回作った時のリビジョンを見てみましょう。

なんと、リビジョン2でタスク定義が復活しました。ここ注意ですね。

ECS サービスをデプロイしてみる

ECS サービスをデプロイしてみます。

リビジョンを確認すると、削除済みのため最新リビジョン2以外が表示されていないですね。

リビジョン2を起動してみます。問題なく起動しました。

リビジョンを INACITVE にしてみる

リビジョンをINACITVEにしてみるとサービスのタスクは非アクティブで起動していることがわかります。

また、必要なタスクを2にするとINACITVEなリビジョンでもタスクを起動可能なことがわかります、

リビジョンを削除してみよう

さあ、ここからが本題です。タスク定義リビジョンを削除した場合のサービスの挙動はどうなるのか確認してみます。

ちなみにですが、リビジョン詳細画面からも「アクション」から削除できます。

無事、DELETE_IN_PROGRESSに移行しました。ECSサービス起動中でもリビジョンの削除が行えることがわかりました。

ECS サービスを確認してみる

ECS サービスを確認してみます。なんと、非アクティブの文字列が消えているではありませんか。

DELETE_IN_PROGRESS 状態のリビジョンからタスクを起動

リビジョンがDELETE_IN_PROGRESSの状態からタスクを起動してみます。

必要なタスクを3にするとDELETE_IN_PROGRESSなリビジョンでもタスクを起動可能なことがわかります。

ドキュメントによると、DELETE_IN_PROGRESSに移行したリビジョンは以下のような仕様みたいです。

  • 既存のタスクとサービスは中断なく実行され続ける
  • 新しいタスク、サービスの作成時、既存のサービスの更新時で利用できない
    • タスク、サービスが利用する新しいリビジョンの指定には削除済みリビジョンの指定ができないニュアンス

When you delete a task definition revision, it immediately transitions from the INACTIVE to DELETE_IN_PROGRESS. Existing tasks and services that reference a DELETE_IN_PROGRESS task definition revision continue to run without disruption. You can't use a DELETE_IN_PROGRESS task definition revision to run new tasks or create new services. You also can't update an existing service to reference a DELETE_IN_PROGRESS task definition revision.

Deleting a task definition revision using the console

DELETE_IN_PROGRESS から消えない

リビジョンがDELETE_IN_PROGRESSから2時間が経過しましたが、ECS サービスで起動しているためかリビジョンが削除されず残っていました。

※試しに ECS サービスの必要なタスクを0にしましたがDELETE_IN_PROGRESSからは動きがなかったです。

なお、ECS サービスで別のタスク定義を参照するよう更新後、リビジョンが削除されました。

ここは推測ですが、 ECS サービス上でDELETE_IN_PROGRESSのリビジョンを指定し続けているため、削除されないのではないかと思います。

INACITVE なタスク定義を DELETE_IN_PROGRESS に移行するシェル

書いてみました。スロットリングエラーが起こる場合は、sleep 5を挟んでみてください。

INACTIVATE_TASK_DEFINITIONS=`aws ecs list-task-definitions --status INACTIVE --query taskDefinitionArns[] --output text --no-cli-pager`
for INACTIVATE_TASK_DEFINITION in $INACTIVATE_TASK_DEFINITIONS
do
    INACTIVATE_TASK_REVISION=`echo "$INACTIVATE_TASK_DEFINITION" | cut -f 2 -d "/"`
    aws ecs delete-task-definitions --task-definition $INACTIVATE_TASK_REVISION --no-cli-pager
    echo "The task definition revision $INACTIVATE_TASK_REVISION has been DELETE_IN_PROGRESS"
    # sleep 5
done

今後に期待

AWS Blog によると、タスク定義のライフサイクルポリシーが導入予定とのことです。続報を待ちましょう。

Task definition deletion has been one of the most requested ECS features on our GitHub roadmap and we are excited to bring this to you. In the future, Amazon ECS will be delivering smarter and more automated mechanisms for customers to manage their task definition resources at scale. We plan to introduce task definition lifecycle policies, which customers can use to define rules to automate deregistration and deletion of their task definition resources. For instance, customers will be able to define a rule to automatically deregister a task definition revision that has not been in use for more than 180 days, and delete any task definition revision that has been unused and inactive for more than 90 days.

Announcing Amazon ECS Task Definition Deletion

まとめ

以上、Amazon ECS タスク定義のリビジョンが「削除」をサポートしました!でした。

削除したタスク定義と同じ名前でタスク定義を再作成する場合、リビジョン番号を引き継ぐ仕様は覚えてもいいかもですね。

このブログが誰かの参考になれば幸いです。AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!