我有一个配置如下的SpringBoot SQSListener
@SqsListener(value = "${clients.xyz.queueName}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
public void onMessage(String message) {
}
这在我的本地计算机上工作正常,但在AWS中启动应用程序期间看到了异常
原因:org.springframework.beans.factory.BeanCreationException: 创建名称为'stackResourceRegistryFactoryBean'的bean时出错 在类路径资源中定义 [org / springframework / cloud / aws / autoconfigure / context / ContextStackAutoConfiguration $ StackAutoDetectConfiguration.class]: 调用init方法失败;嵌套异常为 com.amazonaws.services.cloudformation.model.AmazonCloudFormationException: 用户:arn:aws:sts :: xyz:assumed-role / xyz-instance / i-xyz不是 授权执行:cloudformation:ListStack资源上的资源: arn:aws:cloudformation:us-west-2:xyz:stack / xyz-preprod-qa-xyz-asg / * (服务:AmazonCloudFormation;状态代码:403;
我发现使用者正在尝试查找通过@SqsListener定义的队列,因此我授予了权限。授予权限后,我不再看到错误,但消息也未被读取。
看着上面的异常,我的ec2实例在arn:aws:cloudformation:us-west-2:xyz:stack / xyz-preprod-qa-xyz-asg上执行了ListStackResources。我试图弄清楚为什么它需要在ASG上执行ListStackResources?如何检测到队列?