【发布时间】:2021-03-07 20:32:39
【问题描述】:
这里是 SQS 和 Spring Cloud 的双重新手。我已经(使用控制台)创建了一个 SQS 队列。我正在工作的公司 wiki 说要生成临时凭据,结果如下所示:
aws_access_key_id = <secret>
aws_secret_access_key = <secret>
region = us-west-2
aws_session_token = <secret and VERY LONG, like 240 characters>
注意:稍后会详细介绍“aws_session_token”。
所以,一旦我这样做了,我就可以从 CLI 发送一条消息,就像这样。
`aws --endpoint-url https://sqs.us-west-2.amazonaws.com/99999999999999/<queue name>.fifo sqs send-message --queue-url https://sqs.us-west-2.amazonaws.com/99999999999999/<queue name>.fifo --message-body "cli test msg 2" --message-group-id "azgroup"`
到目前为止一切顺利。但是现在,我想实现一个 SqsListener 来连续监听。所以,我在这里查看了代码https://github.com/sixthpoint/spring-boot-sqs-fifo-tutorial,这是一个最小的 Spring Cloud SQS 应用程序,并按照自述文件中所示设置所有配置。我的听众现在看起来很简单:
@SqsListener(value=SQSURL)
public void process(String json) throws IOException {
System.out.println("here");
System.out.println(json);
}
但是,当我尝试启动应用程序时,我得到了这个错误:
com.amazonaws.services.sqs.model.AmazonSQSException: The security token included in the request is invalid. (Service: AmazonSQS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID:....)
我认为发生了什么是在启动时,侦听器试图联系我的队列,但被拒绝,因为它没有发送那个 aws_session_token。 (公司 wiki 再次这样说:“您将看到 aws_session_token。这是您以前没有的东西。您的密钥需要它才能工作!”)
那么,有没有办法显式设置我的 AWS 参数,无论是在定义 @SqsListener 的 Java 代码中,还是在配置中的某处,以便传递 aws_session_token?似乎无法传递 AwsCredentials 对象。 (编辑)而且这似乎对我没有帮助,因为 AwsCredentials 不包含该字段。
或者。 . .有没有其他方法可以解决这个问题?
【问题讨论】:
标签: amazon-web-services spring-boot amazon-sqs