在 S3 存储桶上为冰川存储类设置数据检索选项



我的问题是关于我存储在具有存储类冰川的 S3 存储桶中的数据。我想使用最快的选项检索它,但我找不到合适的方法来实现这一目标。似乎默认请求正在使用标准检索选项。

在 aws 文档中,我找到了一种恢复数据的好方法。

从这里我有这个代码示例:

import java.io.IOException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.RestoreObjectRequest;
public class RestoreArchivedObject {
public static void main(String[] args) throws IOException {
String clientRegion = "*** Client region ***";
String bucketName = "*** Bucket name ***";
String keyName = "*** Object key ***";
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Create and submit a request to restore an object from Glacier for two days.
RestoreObjectRequest requestRestore = new RestoreObjectRequest(bucketName, keyName, 2);
s3Client.restoreObjectV2(requestRestore);
// Check the restoration status of the object.
ObjectMetadata response = s3Client.getObjectMetadata(bucketName, keyName);
Boolean restoreFlag = response.getOngoingRestore();
System.out.format("Restoration status: %s.n",
restoreFlag ? "in progress" : "not in progress (finished or failed)");
}
catch(AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process 
// it, so it returned an error response.
e.printStackTrace();
}
catch(SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}

这很好,而且有效。但是,如果我想在以下选项之间进行选择,我在文档中找不到如何设置检索选项:

  1. 批量检索 5-12 小时
  2. 加急琐事 1-5 分钟
  3. 标准琐事 3-5 小时

下面是来自 AWS 文档的 RestoreObjectRequest 类。在那里我可以看到一个函数setType(字符串类型(设置还原请求类型。但是没有关于设置上述选项之一的描述(1-3(。如果有人能告诉我是否可以使用 java sdk aws 进行设置,那就太好了。

编辑:

在这里我可以读到setTier(字符串层(应该这样做。 还原存档时要使用的数据访问层。标准是默认值。

类型:枚举

有效值:加急 |标准 |散装

祖先:恢复请求现在,如果我将默认请求更改为:

RestoreObjectRequest requestRestore = new RestoreObjectRequest(bucketName, keyName, 2).withTier("Standard");

线程"main"中的异常 com.amazonaws.services.s3.model.AmazonS3异常:您提供的 XML 格式不正确或未根据我们发布的架构进行验证

以某种方式使用旧版本的Java SDK

浏览器
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.386</version>
</dependency>

可能参加聚会迟到了,但我发现自己陷入了同样的情况......我猜 Java SDK 有问题。

我可以通过使用所需的层定义 GlacierJobParameters,然后将 GlacierJobParameters 添加到还原请求中来实现预期的结果。

一个小的 Scala 代码片段,似乎可以为 S3 生成有效的 XML

val glacierJobParameters = (new GlacierJobParameters).withTier(tier)
val restoreObjectRequest =
new RestoreObjectRequest(bucketName.value, key.value, expirationInDays)
.withGlacierJobParameters(glacierJobParameters)

更新检查后 https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html 我可以看到直接在 RestoreObjectRequest 上设置的 withTier 在执行 SELECT 查询时会创建一个有效的 XML,但在您和我的情况下,我们需要 GlacierJobParameters。

最新更新