AWS Batch是一个全托管的批处理调度服务,它可为用户管理所有基础设施,从而避免了预置、管理、监控和扩展批处理计算作业所带来的复杂性。当然AWS Batch已与 AWS 平台原生集成,让用户能够利用 AWS 的扩展、联网和访问管理功能。让用户轻松运行能够安全地从 AWS 数据存储(如 Amazon S3 和 Amazon DynamoDB)中检索数据并向其中写入数据的作业。AWS Batch可根据所提交的批处理作业的数量和资源要求预置计算资源并优化作业分配。能够将计算资源动态扩展至运行批处理作业所需的任何数量,从而不必受固定容量集群的限制。AWS Batch还可以利用 Spot 实例,从而进一步降低运行批处理作业产生的费用。

AWS Batch服务本身是免费的,仅收取实际使用的 EC2 实例费用。

我创建了一个Batch App demo来演示AWS Batch相关使用方法。该示例通过一个Restful API接口来提交批处理任务,Restful API通过ALB + Lambda函数来暴露服务。Lambda函数被触发后,将新任务请求发送到SQS服务。随后另一个Lambda将消费这个SQS,并将调用AWS Batch API来提交新的批处理任务,同时将任务信息储存到DynamoDB中。同时Demo创建了Batch任务会使用到的Docker Image,并且预先提交到ECR中。同时Batch任务定义了使用的EC2实例类型(c5系列实例,且包括Spot和按需两种计费方式的实例,且优先使用Spot实例),实例默认伸缩数量为0(没有可执行任务时将中止实例)。并且提交的任务分为计算任务和统计归并任务,统计归并任务会依赖所以计算任务执行完毕才开始执行。最后通过另一Restful接口查询计算任务的最终结果,该接口同样使用ALB + Lambda函数来实现。

Batch App架构图

Enjoy this Batch App demo orchestrated by AWS CDK.