ECSコンテナーのヘルスチェックが未設定

アプリケーションの実際の状態を確認するヘルスチェックを設定してください。

説明

ECSタスク定義にコンテナーのHealthCheckがない場合、この仕組みではアプリケーションの応答状態を確認できません。プロセスが実行中でも、正常な応答は保証されません。

想定される影響

他の確認手段もなければ、応答しないコンテナーの発見と置き換えに時間がかかるおそれがあります。

対処方法

主要なコンテナーに適切なHealthCheckコマンド、間隔、タイムアウトを設定してください。必要なツールをイメージに含め、実際の起動時間と失敗時の動作を確認してください。

例

AppImageにはcurlが含まれ、8080番ポートの/でヘルスチェックに応答する必要があります。コンテナー設定の抜粋で、他のタスク属性は省略しています。

変更前

yaml
Resources:
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Name: app
          Image: !Ref AppImage
          Essential: true

変更後

yaml
Resources:
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Name: app
          Image: !Ref AppImage
          Essential: true
          HealthCheck:
            Command:
              - CMD-SHELL
              - curl -f http://localhost:8080/ || exit 1
            Interval: 30
            Retries: 3
            Timeout: 5

参考資料