Установить опцию извлечения данных в корзине S3 для класса хранения ледника - PullRequest
0 голосов
/ 04 сентября 2018

Мой вопрос касается данных, которые я хранил в корзине 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 часов

здесь - это класс RestoreObjectRequest из документов aws. Там я вижу функцию setType (String type) Устанавливает тип запроса на восстановление. Но нет описания установки одного из упомянутых параметров (1-3). Было бы неплохо, если бы кто-то мог сказать мне, если это возможно установить с помощью java sdk aws.

EDIT:

Здесь я могу прочитать, что setTier (уровень строк) должен это делать. Уровень доступа к данным, используемый при восстановлении архива. Стандартное значение по умолчанию.

Тип: Enum

Допустимые значения: ускорено | Стандарт | Bulk

Предки: RestoreRequest А теперь у меня появляется сообщение об ошибке, если я изменяю Запрос по умолчанию:

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

Исключение в потоке "main" com.amazonaws.services.s3.model.AmazonS3Exception: предоставленный вами XML не был правильно сформирован или не соответствует нашей опубликованной схеме

используя как-то старую версию Java SDK

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

1 Ответ

0 голосов
/ 23 октября 2018

Возможно, опоздал на вечеринку, но я попал в ту же ситуацию ... и я думаю, что-то не так в Java SDK.

Я мог бы достичь ожидаемого результата, задав GlacierJobParameters требуемым уровнем, а затем добавив GlacierJobParameters в запрос на восстановление.

Небольшой фрагмент Scala, который, похоже, генерирует действительный XML для S3

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 Я вижу, что withTier, установленный непосредственно в RestoreObjectRequest, будет создавать действительный XML при выполнении запроса SELECT, но в вашем и моем случае нам потребуется GlacierJobParameters.

...