设置AWS ECS缩容保护时遭遇Response code 400(Bad Request)错误求助
ECS任务缩容保护PUT请求返回400 Bad Request的解决方法
核心问题:缺少必填请求头
ECS代理的任务保护端点必须携带X-ECS-Task-ID请求头,用来指定要设置保护的具体任务ID。你的代码里没有添加这个头,这是导致400错误的最可能原因。
修复步骤
- 获取当前任务ID:ECS代理会自动将
ECS_TASK_ID环境变量注入到任务容器中,直接读取即可。 - 添加请求头:在请求配置中加入
headers字段,带上X-ECS-Task-ID参数。
修改后的代码
const got = require("got"); const SCALE_IN_PROTECTION_DURATION_MINUTES = 15; const TASK_PROTECTION_URI = `${process.env.ECS_AGENT_URI}/task-protection/v1/state`; const TASK_ID = process.env.ECS_TASK_ID; try { const minutes = SCALE_IN_PROTECTION_DURATION_MINUTES; await got(TASK_PROTECTION_URI, { method: "PUT", headers: { "X-ECS-Task-ID": TASK_ID, "Content-Type": "application/json" }, json: { ProtectionEnabled: true, ExpiresInMinutes: minutes }, }); } catch (error) { logger.error(error); }
额外验证点
- 确认
ECS_TASK_ID环境变量有效性:可在容器内执行echo $ECS_TASK_ID查看是否有值。 - 检查参数范围:
ExpiresInMinutes必须在1-1440分钟之间,你的15分钟配置符合要求。 - 确认任务类型:该端点仅支持EC2启动类型的ECS任务,Fargate任务需通过AWS ECS API的
UpdateTaskProtection接口设置缩容保护。
内容的提问来源于stack exchange,提问作者Florian Ludewig
相关产品推荐
相关产品推荐

