[アップデート] Amazon ECS タスク定義のリビジョンが「削除」をサポートしました!
こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。
ついに Amazon ECS タスク定義のリビジョンが「削除」をサポートしました!
いままで
今までの Amazon ECS タスク定義(のリビジョン)はACTIVE
とINACTIVE
の2つのステータスで管理されていました。文字通りINACTIVE
(非アクティブ)であるため、ECS コンソール上でタスク定義が削除できず、残り続けるような仕様でした。
今回のアップデートでINACTIVE
なタスク定義のリビジョンを削除できるようになりました。
加えて、リビジョンを持たなくなったタスク定義は、コンソール上に表示されなくなりました。
やってみる
マネジメントコンソールで実際にタスク定義のリビジョンを削除してみます。
ACTIVE から INACTIVEへ
以下の画像から、タスク定義deletion-test-td
はACTIVE
なリビジョンのみを保持しています。
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_)でした!