You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CDK部署的AWS ECS Scheduled Task定时任务未执行无日志排查求助

1. 检查任务定义的日志配置

  • Fargate默认不会自动把容器日志推送到CloudWatch Logs,需要显式配置日志驱动,确认你的CDK代码中scheduledFargateTaskImageOptions下是否遗漏了相关配置,参考正确配置如下:
scheduledFargateTaskImageOptions: {
  image: ecs.ContainerImage.fromEcrRepository(ecrRepository, 'latest'),
  environment: {},
  secrets: {},
  // 新增日志驱动配置
  logConfiguration: {
    logDriver: ecs.LogDriver.awsLogs({
      streamPrefix: 'my-scheduler',
      logRetention: logs.RetentionDays.ONE_WEEK
    })
  }
}

2. 检查任务执行角色的权限

  • 即使已经配置了ECR拉取权限,还需要确认任务执行角色拥有CloudWatch Logs的写入权限,对应需要的权限动作包括logs:CreateLogStream、logs:PutLogEvents、logs:CreateLogGroup(如果配置为自动创建日志组)。如果使用CDK的awsLogs方法默认会自动附加对应权限,手动配置角色需要自行添加。

3. 检查CloudWatch Events目标配置是否完整

  • 你在自定义Rule中直接将mySchedulerTask作为EcsTask目标,可能存在配置缺失问题,默认直接传ScheduledFargateTask实例不会自动带入全部启动参数,会导致任务启动失败,正确的target配置参考如下:
targets: [new targets.EcsTask({
  cluster: cluster,
  taskDefinition: mySchedulerTask.taskDefinition,
  subnetSelection: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, // 和原有任务的子网配置保持一致
  securityGroups: mySchedulerTask.taskDefinition.defaultSecurityGroups,
  taskCount: 1
})]

4. 查看任务停止原因

  • 进入ECS集群的「任务」tab,筛选「已停止」的任务,点击对应任务查看详情,停止原因会明确提示故障类型:比如镜像拉取失败、权限不足、资源不足、容器退出代码异常等,其中容器退出代码0代表正常执行完退出,代码1代表程序执行报错,代码137代表内存不足被强制终止。

5. 排查VPC网络问题

  • 如果Fargate任务部署在私有子网,需要确认私有子网配置了NAT网关/ NAT实例,能够访问公网拉取ECR镜像、调用CloudWatch Logs接口;如果部署在公有子网,需要确认任务已经分配公网IP,否则无法访问公网服务导致任务启动失败。

额外注意事项

  • 你当前的配置会导致任务每6小时执行1次+每天4个固定时间点执行,存在重复调度的问题,如果不需要重复调度可以删除ScheduledFargateTask初始化参数中的schedule配置,只保留自定义的4个CloudWatch Rule即可。

内容的提问来源于stack exchange,提问作者Bikash Lama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:36:03