ECS Fargate任务启动时为何暂停长达6小时?
ECS Fargate任务启动时Django命令精确暂停6小时导致健康检查失败循环
我有一个通过gunicorn运行Django应用的Fargate ECS任务,几周前启动后运行正常,后因AWS例行维护/更新被替换。替换后的任务启动成功,但在执行入口脚本时暂停时间超过负载均衡器健康检查宽限期,导致健康检查失败,ECS不断停止并替换任务,陷入循环。
任务使用的Docker镜像未做任何代码变更,原本预期任务能和之前一样正常运行。
启用ECS任务部署断路器停止循环后,我让处于暂停但运行状态的任务保持了一段时间,从Cloudwatch日志中发现任务每次在执行入口脚本过程中都会精确暂停6小时。以下是入口脚本:
set -euo pipefail cd /home/viewer/projects/server || exit export DJANGO_SETTINGS_MODULE=viewer_server.settings export PYTHONPATH="/home/viewer/projects/server/" echo "DJANGO_SETTINGS_MODULE and PYTHONPATH set." python manage.py makemigrations python manage.py migrate python viewer_server/create_django_superuser.py gunicorn --timeout 120 --graceful-timeout 120 --workers 3 --bind :80 viewer_server.wsgi:application
以下是Cloudwatch日志片段:
2024-06-10T08:44:37.294Z DJANGO_SETTINGS_MODULE and PYTHONPATH set. 2024-06-10T14:44:40.849Z No changes detected 2024-06-10T20:44:43.978Z Running migrations: 2024-06-10T20:44:43.978Z No migrations to apply. 2024-06-10T20:44:44.654Z Django superuser already exists. 2024-06-10T20:44:44.871Z Starting gunicorn 20.1.0 2024-06-10T20:44:44.871Z Listening at: http://0.0.0.0:80 (769) 2024-06-10T20:44:44.871Z Using worker: sync 2024-06-10T20:44:44.874Z Booting worker with pid: 771 2024-06-10T20:46:46.181Z WORKER TIMEOUT (pid:771) 2024-06-10T20:46:46.182Z Worker exiting (pid: 771) 2024-06-10T20:46:46.542Z Booting worker with pid: 782 2024-06-10T20:48:47.609Z WORKER TIMEOUT (pid:782) 2024-06-10T20:48:47.610Z Worker exiting (pid: 782)
还有更多gunicorn工作进程的日志,为了可读性做了精简,它们的表现一致。我通过启用gunicorn DEBUG级日志确认工作进程超时来自负载均衡器的健康检查GET请求。尽管未执行任何迁移,但Django命令执行时的暂停似乎导致Web服务器无法正常工作。
我在AWS文档中找到的唯一与ECS相关的6小时参考是关于IAM角色的内容,IAM角色与之前一致,不确定这是否相关。为了让ECS任务至少能正常运行,我尝试刷新任务从IAM角色获取的临时凭证,但未能找到可行方法。
[编辑]
我还将两个Django命令的冗长级别设置为3(调试),但在每次暂停前后均未收到任何日志输出。
内容的提问来源于stack exchange,提问作者Mibe
相关产品推荐
相关产品推荐

