(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【AWS/ECS】Taskの異常終了に伴う自動復旧時間の検証

スポンサーリンク

はじめに

ECSのサービスにてTaskを1つだけ稼働させ、そのTaskを異常終了させた際にどの程度の時間でECSが別のTaskを復旧させるのかを実機を用いて検証を行いました。

尚、構成としてはALBを経由してECSのサービス(Apacheをコンテナとして起動)に割り振りを行う構成で、ALB経由で通信を断続的に行うことで業務通信を想定して応答結果を整理しています。

構成概要

環境情報
  • ECS Fargate 1.4
  • aws-cli/2.15.5

障害の再現と計測対象

ECSのタスクの中に入り、EntryPointで指定したコマンドをkillします。

$ aws ecs execute-command --cluster xx --task xx --container apache --interactive --command "sh"
$ kill 9

その際にcurlの応答結果と、ECS Clusterより取得したコンテナの稼働数(runningCountとpendingCount)を以下コマンドから取得します。

検証結果/考察

経過秒 イベント
0s ECSのタスクを異常終了させる
0s curlコマンドへのレスポンスが200→500番台になる
10s runningCountが1→0になる
90s pendingCountが0→1になる
138s runningCountが0→1, pendingCountが1→0になる
143s curlコマンドへのレスポンスが500番台→200になる

コンテナの異常終了後、約1分後にコンテナの起動が開始して約2分程度で新たなコンテナが起動することを確認。尚、この時間は別で検証したコンテナの再起動の時間とも概ね合致していました。

今回はコンテナが異常終了することでALBが後続に割り振りができない状態となり、2分程度全ての通信がエラー応答となります。ただし、サービスとして二つのTaskを稼働させている場合は活きているコンテナがいるため、ALBのヘルスチェックによる切り離しが完了次第エラーは止まります。

終わりに

Kubernetesと比較すると自動復旧に時間がかかるので、タスクを1つでサービスを稼働させる場合は数分のシステムダウンを許容する必要があると感じました。

以上、ご参考になれば幸いです。