🎉
ECS Fargateのソフトウェア・アップデート運用を考える
やりたいこと
ECS Fargateの省エネ運用
ソフトウェア・アップデート
ECS Fargate使ってる人なら一度は見たことあるこの通知。
Fargateの更新なので基本的には避けられず更新するしかないのと、たまに通知を忘れてて勝手に更新されちゃうなんてこともある。
Event type code: AWS_ECS_SECURITY_NOTIFICATION
English follows Japanese | 英語のメッセージは日本語の後にございます
ソフトウェアアップデートが Fargate にデプロイされました。これには、CVE パッチまたはその他の重要なパッチが含まれています。お客様で必要なアクションはございません。起動されたすべての新しいタスクは、自動的に最新のソフトウェアバージョンを使用します。実行中のタスクでは、これらの更新を適用するにはタスクを再起動する必要があります。下記のECSサービスの一部として実行されているタスクは、日本時間2023年1月19日 09:00:00 から自動的に更新されます。
影響を受けるリソースの一覧は、[影響を受けるリソース] (Affected resources) タブから [クラスタ] (Cluster) | [サービス] (Service) 形式でご確認いただけます。
日本時間2023年1月19日 09:00:00 以降、Fargateはこれらのタスクを徐々に再開し始めます。通常、サービスは更新中にほとんど中断されないはずです。タスクがローカルの一時ストレージに保存したデータは、スケールダウンイベントと同様に利用できなくなります。この再起動のタイミングを制御したい場合は、force-new-deployment を指定する ECS コマンドラインインターフェイスからupdate-service コマンドを実行することにより、日本時間2023年1月19日 09:00:00 より前にサービスを更新できます。例:
$ aws ecs update-service --service service_name \
--cluster cluster_name --force-new-deployment
Fargate の更新プロセスの詳細については、ECS 開発者ガイド [1] を参照してください。
ご質問やご不明な点がある場合は、AWS サポート [2] までお問い合わせください。
[1] https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-maintenance.html
[2] https://aws.amazon.com/support
Affected resources (showing 3 of 3)
XXXcluster/XXXservice
XXXcluster/XXXservice
XXXcluster/XXXservice
この通知の対応方法は2種類
- コマンドを実行して手動更新
- 放置して自動更新
ミッションクリティカルなリソースは手動更新も手ではある
$ aws ecs update-service --service service_name \
--cluster cluster_name --force-new-deployment
さほど重要ではないorリスクを認識して自動更新させる場合せめて障害発生した場合に備えて更新したかの通知は出してほしい。
そんな時はEventBridge経由でメンテナンス発生時にECSが自動で入れ替わった時のイベントから通知設定ができる。
EventBridge:
Type: "AWS::Events::Rule"
Properties:
Name: "ecs-patch-maintenance-notification"
EventPattern:
source:
- "aws.ecs"
detail:
lastStatus:
- "STOPPED"
stoppedReason:
- "ECS is performing maintenance on the underlying infrastructure hosting the task"
State: "ENABLED"
Targets:
- Arn: !Ref SNSTopic
Id: "SNS Topic Name"
EventBusName: "default"
一歩踏み込んだ手法でこのイベントに紐付けてシステムの正常性チェックを行い問題があれば通知するといったところまで組めたら更に良いかもしれない。
参考
Discussion