記事検索

検索ワードを入力してください。
Sky Tech Blog
【AWS】ECSの​ヘルスチェックに​ついて

【AWS】ECSの​ヘルスチェックに​ついて

ELBとECSを連携させる構成における、ECSのヘルスチェックの種類と挙動について解説します。ELBからのヘルスチェックとコンテナ内でのヘルスチェックの違い、猶予期間・開始期間の仕組み、ステータスの組み合わせによるタスクの再起動条件について整理しています。

Elastic Load Balancer(以降はELBと記載)とAmazon Elastic Container Service(以降はECSと記載)を連携させる構成は一般的ではありますが、その際に行われるECSのヘルスチェックについては思ったよりも分かりにくく理解しづらいものがあると感じましたので、今回は解説をしてみようと思います。

ヘルスチェックの​種類

ECSに関係するヘルスチェックは大きく二つ存在いたします。

  1. ELBのヘルスチェック
    ターゲットグループから行われるヘルスチェック。
    こちらはターゲットグループで指定されたパスに対してアクセスを行い、対象のコンテナが動作しているかを判断するものとなります。
    コンテナが外部からアクセスが可能かの判断を行うことができます。
  2. コンテナのヘルスチェック
    コンテナの定義内で行われるヘルスチェック
    タスク定義の中で記載する、Docker内でのヘルスチェック。
    コンテナの内部からのアクセスであり、サービスがきちんと起動できているかの判断を行うことができます。

簡単に図で示すと以下のようなイメージになります。

ヘルスチェックの​状態に​ついて

1. ELBの​ヘルスチェック

大きく以下の3つの状態に分かれます。

  • initial … 準備中の状態。この状態の間はタスクは落とされず保留状態のままとなる。
  • healthy … ヘルスチェックで応答があり、問題がない状態。
  • unhealthy … ヘルスチェックで想定通りの応答がなく、正しい状態ではない

また、ELBのヘルスチェックには「猶予期間」という仕組みがあります。
これはECSの状態を確定させるための時間であり、この時間が経過して初めてECSの状態が上記3つのいずれかに確定いたします。

2. コンテナの​ヘルスチェック

大きく以下の3つの状態に分かれます。

  • UNKNOWN … ヘルスチェックの判断中の状態(HEALTHY/UNHEALTHYのどちらでもない)
  • HEALTHY … ヘルスチェックで応答があり正常な状態
  • UNHEALTHY … ヘルスチェックで想定通りの応答がなく、正常ではない状態

コンテナのヘルスチェックは「開始期間」という仕組みがあります。
こちらはコンテナが起動してからコンテナのヘルスチェックの判定を開始するまでの時間となります。
開始期間+コンテナヘルスチェックの判定確定までにかかる期間は状態がUNKNOWNとなります。

各ステータスの​組み合わせと​その​際の​挙動

ELBのヘルスチェックとコンテナのヘルスチェックはそれぞれ独立しており
この組み合わせによって最終的にECSのサービスに対してAWS側でタスクの再起動などを行います。

initial healthy unhealthy
UNKNOWN 〇 ※1 ×
HEALTHY - ※2
UNHEALTHY × - ※2

〇…ヘルスチェックでOK(問題なくサービスが起動されたと判断された状態)
△…ヘルスチェック待機 or 判断中
×…ヘルスチェックで失敗し、タスク終了→新しいタスク起動を行う状態
-…存在しえないパターン

※1…コンテナのヘルスチェックが存在しない場合はUNKNOWNとして処理され、ELBのヘルスチェックの結果で判断される
※2…ELBのヘルスチェックがunhealthyで確定した時点で、タスク終了と新しいタスク起動が行われる

基本的には以下の挙動となります。

  • ELBのヘルスチェック、コンテナのヘルスチェックどちらか一方でもunhealthyまたはUNHEALTHYの場合はタスクが終了され新しいタスクが起動されます
  • ELBのヘルスチェックの方が先に判断されます

ここに前述の猶予期間と開始期間が加わることで、以下のような挙動となります。

  • 猶予期間はコンテナのヘルスチェックを判断するための期間であり、この期間内であればUNHEALTHYと判断されてもタスクは落とされない
    →逆に言いますと、この期間内にHEALTHYにならないと猶予期間終了と同時にタスク終了が行われます
  • 猶予期間が設定されていたとしても、ELBのタスクチェックでunhealthyとなった時点でタスク終了され新しいタスクが起動されます
  • 開始期間はコンテナのヘルスチェックの開始を行うまでの待機時間であり、初期処理に時間がかかるような場合にこの開始時間をうまく利用する
    →タスク自体が仮に5xxのステータスを返却していたとしても、開始期間中は無視されるので、開始期間が長すぎる場合はエラーとなっていてもタスクの再起動までに時間がかかることに注意

今回はECSのヘルスチェックについて簡単ですが紹介をいたしました。
ECSのタスクの処理によって、開始期間や猶予期間を適切に設けることで、無駄のないヘルスチェックを実現することができると思います。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム