Hi, I want to send notifications to SNS from my spring boot app using spring-cloud-aws-messaging-starter and run localstack using docker compose and I cannot connect to the service because everytime I get exception com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: bd8fc6cc-c725-56fa-8559-9293584c0aca). How to solve this ?
My Bean which I use to connect to SNS
@Bean
public NotificationMessagingTemplate notificationMessagingTemplate(final AmazonSNS amazonSNS) {
return new NotificationMessagingTemplate(amazonSNS);
}
my application.properties
cloud.aws.credentials.accessKey=foo
cloud.aws.credentials.secretKey=bar
my docker-compose.yml file:
localstack:
image: localstack/localstack
environment:
- SERVICES=sns,sqs
ports:
- "4575:4575"
- "4576:4576"
- "8000:8080"
my pom
```
Exception in thread "pool-3-thread-2" Exception in thread "pool-3-thread-1" com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: 37dee342-f9e4-5333-bc5a-b71d668ddd7c)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:669)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:651)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:515)
at com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2488)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2457)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2446)
at com.amazonaws.services.sns.AmazonSNSClient.executeGetEndpointAttributes(AmazonSNSClient.java:987)
at com.amazonaws.services.sns.AmazonSNSClient.getEndpointAttributes(AmazonSNSClient.java:958)
at com.stepstone.listingsdatapipeline.aws.NotificationsAmazonSNSService.sendNotification(NotificationsAmazonSNSService.java:33)
at com.stepstone.listingsdatapipeline.pipeline.PipelineExecutor.run(PipelineExecutor.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
com.amazonaws.services.sns.model.AmazonSNSException: The security token included in the request is invalid. (Service: AmazonSNS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: bd8fc6cc-c725-56fa-8559-9293584c0aca)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1660)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1324)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1074)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:745)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:719)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:701)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:669)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:651)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:515)
at com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2488)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2457)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2446)
at com.amazonaws.services.sns.AmazonSNSClient.executeGetEndpointAttributes(AmazonSNSClient.java:987)
at com.amazonaws.services.sns.AmazonSNSClient.getEndpointAttributes(AmazonSNSClient.java:958)
at com.stepstone.listingsdatapipeline.aws.NotificationsAmazonSNSService.sendNotification(NotificationsAmazonSNSService.java:33)
at com.stepstone.listingsdatapipeline.pipeline.PipelineExecutor.run(PipelineExecutor.java:37)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
```
Currently got the same issue, any ideas ?
@lucienfregosi I solved it back then and I don't remember exactly what was the root cause I think some shitty property was missing. Right now it works and I have such application.properites (regarding AWS stack):
cloud.aws.region.static=eu-*****-1
cloud.aws.stack.auto=false
cloud.aws.credentials.accessKey=foo
cloud.aws.credentials.secretKey=bar
Also my AmazonSNS bean:
@Bean
public AmazonSNS amazonSNS(final AWSCredentialsProvider awsCredentialsProvider) {
final AmazonSNS amazonSNS = AmazonSNSClientBuilder.standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:4575", "us-east-1"))
.withCredentials(awsCredentialsProvider)
.build();
amazonSNS.createTopic(AmazonSNSConfig.AWS_SNS_TOPIC);
return amazonSNS;
}
@solveretur @lucienfregosi Thanks for reporting, and thanks for confirming the fix - glad we were able to get it running in the end. 馃憤
Most helpful comment
@lucienfregosi I solved it back then and I don't remember exactly what was the root cause I think some shitty property was missing. Right now it works and I have such application.properites (regarding AWS stack):
Also my AmazonSNS bean: