2017-06-22 48 views
0

我使用envContainerOverrides从stepfunctions读取输出,然后使用此nodejscode调用批处理作业:在这里,我正在读取传递给批量作业。如何在java类(lambda函数)中使用AWS批处理提交批作业

Stepfunctions输出:

{"bucketName":"bucketName","filesList":["filelist-bucket/filelist1.txt","filelist-bucket/filelist2.txt"]} 

此代码的NodeJS不能如果其抓取的阵列[文件清单:桶/ filelist1.txt“”文件列表斗/ filelist2.txt]它完美如果其一个单一的价值。

我想这个转换代码的NodeJS成Java:

'use strict'; 

const AWS = require('aws-sdk'); 

console.log('Loading function'); 

exports.handler = (event, context, callback) => { 
    // Take the data from step 1 and modify, send to standard output 
    var comment = event.Comment ; 

    var envContainerOverrides ={ 
     "environment" :[ 
      { 
      "name":"s3Bucket", 
      "value":event.bucketName 
      }, 
      { 
      "name":"s3FileList", 
      "value":event.filesListUrl 
      } 
     ] 
    }; 
    const params = { 
     jobDefinition: process.env.JOB_DEFINITION, 
     jobName: process.env.JOB_NAME, 
     jobQueue:process.env.JOB_QUEUE, 
     containerOverrides: envContainerOverrides || null, 
     parameters: event.parameters || null, 
    }; 


    // Submit the Batch Job 
    new AWS.Batch().submitJob(params, (err, data) => { 
     if (err) { 
      console.error(err); 
      const message = `Error calling SubmitJob for: ${event.jobName}`; 
      console.error(message); 
      callback(message); 
     } else { 
      const jobId = data.jobId; 
      console.log('jobId:', jobId); 
      callback(null, "Job Id : "+jobId); 
     } 
    }); 



}; 

我做这样的事情:

public class InitiateBatchJob1 { 

    public static BatchJobRequest process(BatchJobRequest batchJobRequest) throws Exception { 


     String s3Bucket = batchJobRequest.getBucketName(); 
     List<String> s3FileList = batchJobRequest.getFilesListUrl(); 

     Job job = new Job(); 
     job.setJobDefinition("testbatchjobenv:2"); 
     job.setJobQueue("nbatchjobqueue"); 
     job.setJobName("Filedownload"); 


     /*// Submit the Batch Job 
     new AWS.Batch().submitJob(params, (err, data) => { 
      if (err) { 
       console.error(err); 
       const message = `Error calling SubmitJob for: ${event.jobName}`; 
       console.error(message); 
       callback(message); 
      } else { 
       const jobId = data.jobId; 
       console.log('jobId:', jobId); 
       callback(null, "Job Id : "+jobId); 
      } 
     }); 
*/ 



     return null; 
    } 


} 

BatchJobRequest.java

import java.util.List; 

public class BatchJobRequest { 

    private String bucketName; 

    private List<String> filesListUrl; 

    public String getBucketName() { 
     return bucketName; 
    } 

    public void setBucketName(String bucketName) { 
     this.bucketName = bucketName; 
    } 

    public List<String> getFilesListUrl() { 
     return filesListUrl; 
    } 

    public void setFilesListUrl(List<String> filesListUrl) { 
     this.filesListUrl = filesListUrl; 
    } 

} 

Job.java:

public class Job { 

    private String jobDefinition; 
    private String jobName; 
    private String jobQueue; 
    private String containerOverrides; 
    private String parameters; 
    public String getJobDefinition() { 
     return jobDefinition; 
    } 
    public void setJobDefinition(String jobDefinition) { 
     this.jobDefinition = jobDefinition; 
    } 
    public String getJobName() { 
     return jobName; 
    } 
    public void setJobName(String jobName) { 
     this.jobName = jobName; 
    } 
    public String getJobQueue() { 
     return jobQueue; 
    } 
    public void setJobQueue(String jobQueue) { 
     this.jobQueue = jobQueue; 
    } 
    public String getContainerOverrides() { 
     return containerOverrides; 
    } 
    public void setContainerOverrides(String containerOverrides) { 
     this.containerOverrides = containerOverrides; 
    } 
    public String getParameters() { 
     return parameters; 
    } 
    public void setParameters(String parameters) { 
     this.parameters = parameters; 
    } 


} 

,我发现这个API AWSBatch http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/batch/AWSBatch.html#cancelJob-com.amazonaws.services.batch.model.CancelJobRequest-

但不知道它在我的class.I使用正确的API在网上搜心不是在Java中使用AWS批量多链接。

基本上我需要知道如何设置作业denfition,jobName,作业队列和使用java类提交batchjob。任何人都可以帮助我这个。

回答

0

你必须做这样的事情: http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/batch/AWSBatch.html#submitJob-com.amazonaws.services.batch.model.SubmitJobRequest-

AWSBatch client = AWSBatchClientBuilder.standard().build(); 
    SubmitJobRequest request = new SubmitJobRequest().withJobName("some-name") 
      .withJobQueue("job-queue-name") 
      .withJobDefinition("job-definition-name-with-revision-number:1"); 
    SubmitJobResult response = client.submitJob(request); 

我用这个代码与lambda函数与AWSBatchFullAccess我在AWS控制台创建的IAM角色。因此,在aws上构建并加载jar之后,我的'客户'使用lambda中的数据进行初始化。在你的应用程序中,你似乎也需要添加数据来初始化客户端。您必须使用该方法

AWSBatch build(AwsSyncClientParams params) 

查看AWSBatchClientBuilder类。

您仍然需要创建作业队列和作业定义。 另外我会建议你开始使用aws控制台。这里有很好的教程来了解aws批处理工作流程http://technology.finra.org/code/enjoying-auto-scaling-integrated-authentication-low-host-cost.htmlhttp://www.awsomeblog.com/analysing-exif-data-with-aws-batch/。在本教程之后,您可以添加用于在myHandler方法中提交作业的代码,并查看作业如何启动。