从SQS队列开始AWS Batch

5

我有一个长时间的批处理作业,打算将其迁移到AWS Batch。由于此作业需要数小时运行,因此无法使用AWS Lambda。

但是,其中一个要求是从我的AWS SQS队列触发此作业。

我在文档中找不到任何相关参考资料。这可行吗?


你是只需触发批处理作业,还是需要在作业完成后进行监控和通知? - vivekveeramani
我只需要在 SQS 队列中添加新项目时触发作业。监控和通知现在不是优先考虑的问题,因为我们有其他可以完成相同工作的系统。 - Ashish Joseph
4
既然如此,为什么不为SQS队列配置一个Lambda触发器,使用boto3 Batch client.submit_job()启动批处理作业,并以成功或失败的作业启动状态或实际的submit_job返回状态退出呢? - vivekveeramani
对于 @vivekveeramani 建议的做法,我表示赞同。如果您已经熟悉 Lambda,可以使用它(以及 SQS 集成)来调用批处理作业,而不是直接运行逻辑。 - mreferre
2个回答

1
您可以在监听SQS消息时实现以下方法:
public void onMessage( Message message ) throws JMSException {

    SQSTextMessage sqsTextMessage = ( SQSTextMessage ) message;
    String text = sqsTextMessage.getText();
  
    AWSBatch awsBatch = AWSBatchClientBuilder.standard()
       .withCredentials(new DefaultAWSCredentialsProviderChain())
       .withRegion("region")
       .build();

    SubmitJobRequest submitRequest = new SubmitJobRequest()
       .withJobDefinition("job-definition-name")
       .withJobName("job-name")
       .withJobQueue("job-queue");
  
    SubmitJobResult submitResult = awsBatch.submitJob(submitRequest);
  }

0

很遗憾,虽然SQS可以本地触发AWS Lambda函数,但它不支持使用批处理作业进行相同的本地触发。作为解决方法,您将必须仅通过使用REST或您喜欢的AWS SDK(例如Python Client.submit_job)来触发实现对Batch SubmitJob API调用的Lambda。

注意:根据您的架构,您可以利用EventBridge,它允许您配置API目标点,这是可以作为EventBridge规则的目标调用的HTTP端点。在这种情况下,EventBridge Rule可以直接触发Batch,使您有可能从架构中删除SNS / SQS / Lambda。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接