Конечная точка Localstack AWS в приложении

Я хотел бы запустить функциональные тесты для своего приложения, которое пытается опубликовать сообщение в AWS SNS. Я попробовал LocalStack и обнаружил, что он делает все, что мне нужно, для имитации и публикации сообщений локально. Но мое приложение использует клиент amazon sdk для java, и когда я запускаю его локально, он все еще пытается отправлять запросы в регион amazon вместо LocalStack.

Какая конфигурация требуется, чтобы приложение взаимодействовало с локальным стеком, а не с URL-адресом AWS? Можно ли указать URL-адрес конечной точки в конфигурации AWS? Я обнаружил, что это открытая проблема в AWS CLI https://github.com/aws/aws-cli/issues/1270

Есть ли какое-нибудь обходное решение, которое кто-нибудь реализовал для этого?


person Pratik Shelar    schedule 13.11.2017    source источник
comment
Используйте slack-перехватчики в качестве промежуточного программного обеспечения   -  person Abdennour TOUMI    schedule 14.11.2017


Ответы (2)


Чтобы использовать локальный стек, вы должны установить EndpointConfiguration.

AmazonSNS amazonSNS = AmazonSNSClientBuilder.standard()
  .withEndpointConfiguration(new EndpointConfiguration("http://localhost:4575", "eu-west-1")) 
  .build();

Вам также следует использовать localstack / localstack вместо atlassian / localstack (больше не поддерживается).

person Guillaume Vauvert    schedule 21.01.2018

Если вы используете JUnit 5 для тестов, позвольте мне порекомендовать вам расширения JUnit 5 для AWS, несколько расширений JUnit 5, которые могут быть полезны для тестирования кода, связанного с AWS. Эти расширения можно использовать для внедрения клиентов для клиентов сервисов AWS, предоставляемых такими инструментами, как localstack (или настоящими). Поддерживаются как AWS Java SDK v 2.x, так и v 1.x:

public static class Endpoint implements AWSEndpoint {
    @Override
    public String url() { return "http://localhost:4575"; }

    @Override
    public String region() { return "us-east-1"; }

    @Override
    public String accessKey() { return ""; }

    @Override
    public String secretKey() { return ""; }
}

@ExtendWith(SNS.class)
class AmazonDynamoDBInjectionTest {
    @AWSClient(endpoint = Endpoint.class)
    private AmazonSNS client;

    @Test
    void test() throws Exception {
        Assertions.assertNotNull(client);

        …
    }
}
person madhead    schedule 28.09.2019