AWS Batch提交作业时如何指定选择On-Demand/Spot计算环境
AWS Batch 按作业类型匹配按需/竞价计算环境的实现方法
结论:无法在单作业队列提交作业时直接覆盖默认的计算环境优先级规则,但可以通过拆分作业队列的方式低成本实现你要的调度效果,具体方案如下:
你当前单队列绑定两个计算环境的配置存在调度逻辑限制:同一个作业队列内AWS Batch会严格按照ComputeEnvironmentOrder的优先级分配资源,只要Order=1的按需计算环境还有剩余可用vCPU,所有提交到该队列的作业都会优先运行在按需环境,只有按需环境达到MaxvCpus上限无可用资源时,新提交的作业才会溢出到Order=2的竞价环境,不存在提交作业时给单个作业单独指定计算环境的参数。
正确实现方式是拆分两个独立作业队列,分别绑定对应计算环境:
- 新建专属按需作业队列,队列内仅绑定On-Demand计算环境,专门承接稳定性要求高、不允许中断的作业
- 新建专属竞价作业队列,队列内仅绑定SPOT计算环境,专门承接可中断、对成本敏感的作业
- 作业提交阶段直接指定对应队列即可,不需要额外调整调度规则:
- 提交高稳定性作业时,将提交参数中的
jobQueue指定为按需队列名,作业将始终调度到按需实例运行 - 提交成本敏感可中断作业时,将提交参数中的
jobQueue指定为竞价队列名,作业将始终调度到竞价实例运行
- 提交高稳定性作业时,将提交参数中的
调整后的作业队列CloudFormation配置参考如下:
# 按需实例专属作业队列 DragenOnDemandJobQueue: Type: AWS::Batch::JobQueue Properties: JobQueueName: dragen-ondemand-queue Priority: 100 State: ENABLED ComputeEnvironmentOrder: - Order: 1 ComputeEnvironment: !Ref DragenComputeEnvironmentOnDemand # 竞价实例专属作业队列 DragenSpotJobQueue: Type: AWS::Batch::JobQueue Properties: JobQueueName: dragen-spot-queue Priority: 100 State: ENABLED ComputeEnvironmentOrder: - Order: 1 ComputeEnvironment: !Ref DragenComputeEnvironmentSpot
如果需要做资源兜底,可以给竞价队列额外配置Order=2的按需计算环境,这样当竞价实例资源不足、价格超出阈值无法启动时,提交到竞价队列的作业可以自动溢出到按需环境运行,不会阻塞任务流程;注意不要给按需队列添加竞价计算环境,避免高稳定性作业被调度到竞价实例出现中断。
内容的提问来源于stack exchange,提问作者Quentin Chartreux
相关产品推荐
相关产品推荐

