【问题标题】:S3 get metadata of older version objectsS3 获取旧版本对象的元数据
【发布时间】:2017-09-18 00:10:36
【问题描述】:

在尝试使用 Lambda Java 函数检索旧版本 S3 对象的元数据时,我遇到了一个不允许的 405 方法。

AmazonS3 amazonS3 = getAmazonS3();
GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, templateKey, versionId);
ObjectMetadata objectMetadata = amazonS3.getObject(getObjectRequest).getObjectMetadata(); // Exception thrown at this line

public AmazonS3 getAmazonS3() {
    String region = PropertyManager.getValue(PropertyKey.AWS_REGION.getKey(stage));
    return AmazonS3ClientBuilder.standard().withRegion(region)
                .withCredentials(new EnvironmentVariableCredentialsProvider()).build();
    }

Lambda 中的堆栈跟踪:

    The specified method is not allowed against this resource. (Service: Amazon S3; Status Code: 405; Error Code: MethodNotAllowed; Request ID: 1D12DDA5F0493282): com.amazonaws.services.s3.model.AmazonS3Exception
com.amazonaws.services.s3.model.AmazonS3Exception: The specified method is not allowed against this resource. (Service: Amazon S3; Status Code: 405; Error Code: MethodNotAllowed; Request ID: 1D12DDA5F0493282), S3 Extended Request ID: jTNnAl8ifgsUlPMV0GEHAEVBtWwjTprEJy45C9BMJ5kTk/Qn8Pne8/ZM/tH27ZoeUtHrd1NeuyQ=
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:742)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4187)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4134)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1385)
    at com.ghx.templateengine.template.GetTemplateVersions.handleRequest(GetTemplateVersions.java:66)

【问题讨论】:

  • 在尝试获取对象本身而不是其元数据时,您是否会遇到同样的异常?
  • 我可以在不指定 versionId 时获取对象。如果我指定,则会收到类似的错误。

标签: amazon-s3 lambda aws-java-sdk


【解决方案1】:

一些旧版本的 S3 对象具有删除标记​​strong>。 AWS 支持表示,尝试将对象作为删除标记的版本导致 405 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2016-08-23
    • 2021-08-27
    相关资源
    最近更新 更多