MeWrite Docs

AWS ECS: Task stopped unexpectedly

AWS ECSでタスクが予期せず停止した場合の原因調査と解決策

概要

AWS ECSでコンテナタスクが予期せず停止する問題の調査と解決方法です。

エラーメッセージ

``` Task stopped at: 2024-01-01T00:00:00Z Stop code: EssentialContainerExited Stop reason: Essential container in task exited ```

原因

  1. アプリケーションエラー: コンテナ内のプロセスがクラッシュ
  2. メモリ不足: タスク定義のメモリ制限超過
  3. ヘルスチェック失敗: ALB/NLBのヘルスチェック
  4. シグナル処理の問題: SIGTERM を正しく処理していない

解決策

1. 停止理由を確認

```bash

AWS CLI

aws ecs describe-tasks
–cluster my-cluster
–tasks arn:aws:ecs:region:account:task/xxx
–query ’tasks[0].{stopCode:stopCode,stoppedReason:stoppedReason,containers:containers[*].{name:name,exitCode:exitCode,reason:reason}}' ```

2. CloudWatch Logsを確認

```bash

ログストリームを取得

aws logs describe-log-streams
–log-group-name /ecs/my-service
–order-by LastEventTime
–descending

ログを取得

aws logs get-log-events
–log-group-name /ecs/my-service
–log-stream-name ecs/container/xxx ```

3. タスク定義のリソースを調整

```json { “containerDefinitions”: [{ “name”: “app”, “memory”: 1024, “memoryReservation”: 512, “cpu”: 512, “healthCheck”: { “command”: [“CMD-SHELL”, “curl -f http://localhost:8080/health || exit 1”], “interval”: 30, “timeout”: 5, “retries”: 3, “startPeriod”: 60 } }] } ```

4. グレースフルシャットダウンを実装

```javascript // Node.js process.on(‘SIGTERM’, async () => { console.log(‘SIGTERM received, shutting down…’); server.close(() => { console.log(‘Server closed’); process.exit(0); });

// 10秒後に強制終了 setTimeout(() => process.exit(1), 10000); }); ```

5. ECS Execでデバッグ

```bash

コンテナに接続

aws ecs execute-command
–cluster my-cluster
–task xxx
–container app
–interactive
–command “/bin/sh” ```

よくある間違い

  • ログドライバーを設定しない
  • ヘルスチェックのstartPeriodが短すぎる
  • essential=trueのコンテナが先に終了

関連エラー

関連エラー

AWS の他のエラー

最終更新: 2025-12-11