我想为我的应用程序运行功能测试,尝试向AWS SNS发布消息。我尝试了localstack,发现它可以完成我在本地模拟和发布消息所需的一切。但是我的应用程序使用amazon sdk客户端用于java,当我在本地运行时,它仍尝试将请求发布到亚马逊地区而不是localstack
确保应用程序与本地堆栈而不是AWS URL交互所需的配置是什么?我们可以在AWS配置中指定端点URL吗?我发现这是AWS CLI https://github.com/aws/aws-cli/issues/1270
中的一个未解决的问题是否有人为此实施了任何解决方法?
答案 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);
…
}
}