如何为调度AWS Batch作业的EventBridge规则配置shareIdentifier
通过AWS Web控制台配置EventBridge规则用于触发AWS Batch作业,规则本身可正常触发,但调用作业时返回如下400错误:
shareIdentifier must be specified. (Service: AWSBatch; Status Code: 400; Error Code: ClientException; Request ID: 07da124b-bf1d-4103-892c-2af2af4e5496; Proxy: null)
由于目标作业关联了调度策略,提交时必须传入shareIdentifier参数,但EventBridge规则的控制台配置界面仅支持设置作业重试次数,未提供该参数及其他高级作业参数的配置入口;查阅AWS CLI put-rule命令的官方文档也未找到对应参数的配置说明,需要可行的解决方案及可运行参考示例。
EventBridge控制台内置的AWS Batch作业目标模板为简化配置版本,仅覆盖了无调度策略的普通作业提交场景,不支持传入shareIdentifier这类调度策略关联的扩展必填参数,因此直接通过控制台配置Batch作业目标无法满足关联调度策略的作业提交要求。
方案1:EventBridge + Lambda中转提交
将EventBridge规则的触发目标设置为自定义Lambda函数,在Lambda函数代码中调用AWS Batch的SubmitJob接口,完整传入shareIdentifier及其他所需作业参数即可。该方案保留EventBridge的定时/事件触发能力,同时支持所有Batch作业提交参数的配置。方案2:直接通过AWS SDK定时提交作业(已验证可用)
无需依赖EventBridge规则,直接在业务定时任务逻辑中调用AWS Batch SDK提交作业,可完整支持所有作业配置参数,Java语言实现核心逻辑如下:- 引入AWS Batch Java SDK相关依赖
- 初始化Batch客户端,构造提交作业请求时显式传入
shareIdentifier参数,核心实现代码:
AWSBatch client = AWSBatchClientBuilder.standard().withRegion("eu-central-1").build(); SubmitJobRequest request = new SubmitJobRequest() .withJobName("example-test-job-java-sdk") .withJobQueue("job-queue") .withShareIdentifier("default") .withJobDefinition("job-type"); SubmitJobResult response = client.submitJob(request); log.info("job spawn response: {}", response);
注意:
shareIdentifier的取值需要和作业队列绑定的调度策略中配置的份额标识完全匹配,未自定义份额的场景填写default即可适配默认配置。
内容的提问来源于stack exchange,提问作者Patrik

