java - 尝试使用 AWS SDK 从 Java 应用程序连接 SQS 时出现 403 禁止错误
问题描述
我正在尝试在 Prod 环境中使用 AWS-SDK 从我的 Java 应用程序访问 SQS 队列,如下所示:
@Profile("prod")
@Bean
public AmazonSQSAsyncClient getAmazonSQSClientProd() {
return (AmazonSQSAsyncClient) AmazonSQSAsyncClientBuilder.standard()
.withRegion(Regions.fromName(awsRegion))
.withCredentials(InstanceProfileCredentialsProvider.getInstance())
.build();
运行应用程序时,我收到以下异常:
15:06:12.415 [task-57] ERROR c.s.t.m.s.producer.SqsDataPublisher - Received exception from sqs
com.amazonaws.services.sqs.model.AmazonSQSException: Access to the resource https://sqs.us-west-2.amazonaws.com/123456/queue_1.fifo is denied. (Service: AmazonSQS; Status Code: 403; Error Code: AccessDenied; Request ID: 8901234)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:2202)
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2169)
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2158)
at com.amazonaws.services.sqs.AmazonSQSClient.executeSendMessage(AmazonSQSClient.java:1757)
at com.amazonaws.services.sqs.AmazonSQSClient.sendMessage(AmazonSQSClient.java:1729)
at com.salesforce.tm.messaging.sqs.producer.SqsDataPublisher.sendMessageAndWaitForResult(SqsDataPublisher.java:54)
at com.salesforce.tm.messaging.sqs.producer.SqsDataPublisher.sendInternal(SqsDataPublisher.java:60)
at com.salesforce.tm.messaging.sqs.producer.SqsDataPublisher.sendMessage(SqsDataPublisher.java:104)
at com.salesforce.tm.messaging.sqs.producer.SqsDataPublisher.sendMessage(SqsDataPublisher.java:81)
at com.salesforce.tm.messaging.sqs.producer.SqsDataPublisher.sendMessage(SqsDataPublisher.java:72)
at com.salesforce.tm.auditlog.AuditLogInterceptorHelper.saveAndPublish(AuditLogInterceptorHelper.java:36)
at com.salesforce.tm.auditlog.AuditLogInterceptorHelper$$FastClassBySpringCGLIB$$1ef9aa98.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
我没有得到任何关于如何解决这个问题的线索。
有人可以帮忙吗?谢谢。
解决方案
I see you are using SQS Java API V1. Try using the SQS V2 API. AN example is here:
推荐阅读
- android - AdMob MobileAds.initialize() 赞成和反对
- java - 我正在创建一个 android 项目,它将保存用户的用户名和密码,在设备上运行应用程序时出现错误
- java - URL 请求没有返回数据 - Java
- php - 如何在 single.php 中自定义 Wordpress 帖子导航链接默认模板?
- android - 何时在 Android AccessibilityService 中使用 event.getSource() 和 getRootInActiveWindow()
- objective-c - 在视图控制器之间传递字符串
- angular - 为什么我必须手动映射 SystemJS 配置文件中的所有 d3.js 依赖项?
- android - 如何获取所有前台应用程序?
- javascript - 在主 div 之后插入一个空 div
- python - 如何在 python selenium firefox webdriver 中设置标题