我有一个长时间的批处理作业,打算将其迁移到AWS Batch。由于此作业需要数小时运行,因此无法使用AWS Lambda。
但是,其中一个要求是从我的AWS SQS队列触发此作业。
我在文档中找不到任何相关参考资料。这可行吗?
我有一个长时间的批处理作业,打算将其迁移到AWS Batch。由于此作业需要数小时运行,因此无法使用AWS Lambda。
但是,其中一个要求是从我的AWS 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);
}
很遗憾,虽然SQS可以本地触发AWS Lambda函数,但它不支持使用批处理作业进行相同的本地触发。作为解决方法,您将必须仅通过使用REST或您喜欢的AWS SDK(例如Python Client.submit_job)来触发实现对Batch SubmitJob API调用的Lambda。
注意:根据您的架构,您可以利用EventBridge,它允许您配置API目标点,这是可以作为EventBridge规则的目标调用的HTTP端点。在这种情况下,EventBridge Rule可以直接触发Batch,使您有可能从架构中删除SNS / SQS / Lambda。