从 SQS 队列启动 AWS Batch

问题描述 投票:0回答:2

我有一个长期运行的批处理作业,正计划迁移到 AWS Batch。由于运行这项工作需要几个小时,所以我不能使用 AWS Lambda。

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

我找不到任何关于此的参考文档。它甚至可行吗?

amazon-web-services amazon-sqs aws-batch
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 函数,但它不支持使用批处理作业进行同样的原生触发。作为解决方法,您必须触发一个 Lambda,它使用 REST 或您最喜欢的 AWS SDK(例如 Python Client.submit_job)实现对 Batch SubmitJob API 的调用。

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

© www.soinside.com 2019 - 2024. All rights reserved.