我有一个批处理过程,用PHP编写并嵌入到Docker容器中。基本上,它从多个Web服务加载数据,对数据进行一些计算(在大约1小时内),然后将计算后的数据发布到另一个Web服务,然后容器退出(如果正常,返回码为0,如果过程中某个地方失败,则返回1。 )。在此过程中,一些日志会写在STDOUT或STDERR上。该批次必须每天触发一次。
我想知道用于计划,执行和监视批处理过程的最佳AWS服务是什么:
现在,深入研究Fargate,我希望每天执行一次任务。
当我使用ECS的 Scheduled Task 功能时,它似乎工作正常:容器按时启动,进程运行,然后容器停止。但是CloudWatch缺少一些指标:未报告CPUReservation和CPUUtilization。此外,也无法知道批处理是否以退出代码0或1退出(所有执行均以状态“ STOPPED”停止)。因此,如果容器执行失败,我将无法发送CloudWatch警报。
我使用Fargate的“服务”功能,但是它无法处理批处理过程,因为容器每次停止时都会启动。这是正常现象,因为容器没有任何守护程序。无法安排服务。我希望我的容器仅在需要工作时才处于活动状态(每天最多1小时一次)。但是缺少的指标会在CloudWatch中正确报告。
这是我的问题:每天触发一次容器,让其运行以完成其任务并具有报告功能以跟踪执行(CPU使用率,批处理持续时间)(包括警报)的最合适的AWS管理服务是什么? SNS),当任务失败时?
答案 0 :(得分:0)
我们在确定失败的工作上也遇到了同样的问题。我建议您看一下AWS Batch,其中CloudWatch Logs中提供了FAILED作业的日志。看一下here。 您应该考虑的另一件事是最终选择的任何解决方案的总拥有成本。在这方面,Fargate非常昂贵。
答案 1 :(得分:0)
对于您的项目来说可能为时已晚,但我仍然认为它可以使他人受益。 您是否看过AWS Step Functions?可以定义工作流程并在ECS / Fargate(或在EKS上的工作)上启动任务,等待结果并发出警报/发送电子邮件...