应用程序中的Localstack AWS端点

时间:2017-11-13 22:56:55

标签: java amazon-web-services amazon-sns atlassian-localstack

我想为我的应用程序运行功能测试,尝试向AWS SNS发布消息。我尝试了localstack,发现它可以完成我在本地模拟和发布消息所需的一切。但是我的应用程序使用amazon sdk客户端用于java,当我在本地运行时,它仍尝试将请求发布到亚马逊地区而不是localstack

确保应用程序与本地堆栈而不是AWS URL交互所需的配置是什么?我们可以在AWS配置中指定端点URL吗?我发现这是AWS CLI https://github.com/aws/aws-cli/issues/1270

中的一个未解决的问题

是否有人为此实施了任何解决方法?

2 个答案:

答案 0 :(得分:5)

要使用您的localstack,您必须设置EndpointConfiguration

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

您还应该使用localstack/localstack代替atlassian/localstack(不再主动维护)。

答案 1 :(得分:0)

如果您正在使用JUnit 5进行测试,请允许我向您推荐JUnit 5 extensions for AWS,这是一些JUnit 5扩展,可用于测试与AWS相关的代码。这些扩展可用于为由诸如localstack(或实际)之类的工具提供的AWS服务客户端注入客户端。 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);

        …
    }
}