首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java代码创建S3批处理作业时出现400错误请求错误

从Java代码创建S3批处理作业时出现400错误请求错误
EN

Stack Overflow用户
提问于 2020-08-14 11:48:48
回答 2查看 427关注 0票数 0

根据doc,我正在尝试从Java Code创建一个批处理作业。我可以从控制台创建一个具有相同角色和lambda arn的作业,但从代码中,我收到了400个错误请求。此外,根据此doc,我没有看到任何错误消息

这是我的代码片段-

代码语言:javascript
复制
JobOperation jobOperation = new JobOperation().withLambdaInvoke(new LambdaInvokeOperation()
                    .withFunctionArn("arn:aws:lambda:eu-west-1:<account_id>:function:s3BatchOperarationsPOCLambda"));

            JobManifest manifest = new JobManifest()
                    .withSpec(new JobManifestSpec().withFormat(JobManifestFormat.S3InventoryReport_CSV_20161130)
                            .withFields(new String[] { "Bucket", "Key" }))
                    .withLocation(
                            new JobManifestLocation().withObjectArn("arn:aws:s3:::<bucket_name>/manifest.csv")
                                    .withETag("e55392fa1ad40a08e40b13b3c000a0aa"));

            JobReport jobReport = new JobReport().withBucket(reportBucketName).withPrefix("testreport")
                    .withFormat(JobReportFormat.Report_CSV_20180820).withEnabled(true).withReportScope("AllTasks");

            AWSS3Control s3ControlClient = AWSS3ControlClientBuilder.standard().withRegion(Regions.US_WEST_1).build();

            String roleArn = "arn:aws:iam::<account_id>:role/S3-Batch-Role";
            String accountId = <account_id>;
            s3ControlClient.createJob(new CreateJobRequest().withAccountId(accountId).withOperation(jobOperation)
                    .withManifest(manifest).withPriority(12).withRoleArn(roleArn).withReport(jobReport)
                    .withClientRequestToken(uuid).withDescription("S3 job").withConfirmationRequired(false));


        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it and returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            System.out.println("test2" + e.getMessage());

            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }

角色拥有完全的IAM和s3批处理操作权限,lambda也拥有对s3的访问权限。还为批处理操作定义了信任策略。

这是我的错误日志-

代码语言:javascript
复制
 (Service: AWSS3Control; Status Code: 400; Error Code: 400 Bad Request; Request ID: null; Proxy: null)
com.amazonaws.services.s3control.model.AWSS3ControlException: null (Service: AWSS3Control; Status Code: 400; Error Code: 400 Bad Request; Request ID: null; Proxy: null)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1811)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1395)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1371)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:770)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:744)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:704)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:686)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:550)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:530)
    at com.amazonaws.services.s3control.AWSS3ControlClient.doInvoke(AWSS3ControlClient.java:1532)
    at com.amazonaws.services.s3control.AWSS3ControlClient.invoke(AWSS3ControlClient.java:1499)
    at com.amazonaws.services.s3control.AWSS3ControlClient.invoke(AWSS3ControlClient.java:1488)
    at com.amazonaws.services.s3control.AWSS3ControlClient.executeCreateJob(AWSS3ControlClient.java:265)
    at com.amazonaws.services.s3control.AWSS3ControlClient.createJob(AWSS3ControlClient.java:236)
    at com.code.platformintegrationsscheduler.handlers.test.createS3Job(test.java:68)
    at com.code.platformintegrationsscheduler.handlers.test.main(test.java:27)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-19 18:46:25

我得到了这个问题,这个问题与gradle版本有关,我们需要确保所有aws服务gradle版本都是相同的。

在我的情况下-

代码语言:javascript
复制
    compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.844'
    compile group: 'com.amazonaws', name: 'aws-java-sdk-iam', version: '1.11.844' 
    compile group: 'com.amazonaws', name: 'aws-java-sdk-events', version: '1.11.844'
    compile group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.844'
    compile group: 'com.amazonaws', name: 'aws-java-sdk-batch', version: '1.11.844'
    compile group: 'com.amazonaws', name: 'aws-java-sdk-s3control', version:'1.11.844'
票数 0
EN

Stack Overflow用户

发布于 2020-08-17 03:49:56

我今天遇到了同样的问题,在CLI上进行了一些调试和尝试相同的操作后,我发现new JobReport().withBucket(reportBucketName)接受bucketArn而不是存储桶名称。

在您的情况下,实际问题可能会有所不同。我建议您序列化来自代码的请求,并在CLI中尝试相同的操作,然后匹配这两个请求。

当我们真正需要AWS错误消息时,它们通常不是很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63406237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档