Реализация идемпотентности для запросов выборки AWS

используя Java AWS SDK для создания запросов экземпляра EC2. В отличие от случаев по требованию,API для спотовых запросов не имеет ничего похожего наClientToken и, следовательно, не поддерживает идемпотентность из коробки.

Самый простой способ сделать это - установитьLaunchGroup свойство к уникальному UUID; когда я проверяю это, я звонюDescribeSpotInstanceRequests и посмотреть, если у меня уже есть запрос с той же группой запуска.

К моему удивлению, кажется, чтоЗадержка перед вызовом описания возвращает спотовые запросы, отправленные ранее. Я написал для этого тест JUnit, и кажется, что для того, чтобы он был согласованным, мне нужно было установить тайм-аут не менее 60 с между двумя вызовами (запросить точечный экземпляр и описать запросы точечного экземпляра). Мне нужно иметь степень детализации 10 с, потому что мои запросы могут повторяться приложением с этим интервалом в случае любого сбоя - то есть что-то ломается после того, как я отправил запрос, но прежде чем я смог прочитать результат, я вернулся из Amazon. В этом случае я неЯ не хочу повторять запрос, я просто хочу, чтобы он был зарегистрирован и двигаться дальше.

@Test
public void testRunSpotInstances() throws Exception {

    activity.execute(execution);

    timeout(TIMEOUT);

    // shouldn't do anything
    activity.execute(execution);

    timeout(TIMEOUT);

    DescribeSpotInstanceRequestsResult result = client.describeSpotInstanceRequests(
            new DescribeSpotInstanceRequestsRequest().withFilters(new Filter()
                .withName("launch-group").withValues(BUSINESS_KEY)));

    assertThat(result.getSpotInstanceRequests()).hasSize(1);

    timeout(TIMEOUT);
}

Тест срабатывает каждый раз, если для параметра TIMEOUT установлено значение 60 с; в течение 40-50 лет это работает с перебоями. Что-нибудь ниже этого терпит неудачу каждый раз.

Кому-нибудь удалось обойти эту задержку? Возможно ли реализовать идемпотентность для спотовых запросов, используя только API AWS и не сохраняя состояние в клиентском приложении?

Ответы на вопрос(1)

Ваш ответ на вопрос