ECS Fargate の stopTimeout 制限
Docker
AWS
ECS
Fargate
ECS Fargate における stopTimeout パラメータの制限事項について。
stopTimeout とは
- コンテナに SIGTERM シグナルが送信されてから、SIGKILL で強制終了されるまでの猶予時間(秒)
- この間にアプリケーションは正常にシャットダウン処理を行う必要がある
Fargate の制限
- 最大値: 120秒(2分)
- デフォルト値: 30秒
- Platform version 1.3.0 以降で利用可能
- この制限は Fargate のハードリミットで変更不可
EC2 起動タイプとの違い
- EC2 起動タイプでは
ECS_CONTAINER_STOP_TIMEOUT
環境変数で延長可能 - EC2 では実際に30分(1800秒)まで設定している事例もある
/etc/ecs/ecs.config
ファイルで設定
長時間実行タスクへの影響
- 40分かかる CSV インポート処理などは、2分で強制終了される
- データの不整合やトランザクションの中断が発生する可能性
- Fargate Spot では特に注意が必要(2分で強制終了)
推奨される対策
- 処理を中断可能な設計にする(チェックポイント機能)
- EC2 起動タイプへの移行を検討
- AWS Batch や Step Functions など、長時間実行に適したサービスを利用
- 処理を小さなチャンクに分割し、各処理を2分以内に収める
参考情報
- AWS Containers Roadmap で制限緩和の要望が上がっているが、現時点では未対応
- ALB 使用時は deregistration_delay の設定も考慮する必要がある