【发布时间】:2016-12-03 15:12:39
【问题描述】:
我正在尝试在 Elastic Beanstalk 上运行“hello world”复杂性的 Web 应用程序。我在 Elastic Beanstalk 上使用 Spring Boot 没有问题。
但是当我尝试使用 Spring Cloud AWS 时,我遇到了无数的问题。参考指南从未提到在 Beanstalk 上运行是可能的,所以也许我在找错树?
我似乎遇到的根本问题是 stackResourceRegistryFactoryBean 在尝试识别正在使用的“堆栈”时爆炸 - 即 CloudFormation 堆栈。但我使用的是 Elastic Beanstalk,而不是 CloudFormation。根本异常是:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.aws.core.env.stack.config.StackResourceRegistryFactoryBean]: Factory method 'stackResourceRegistryFactoryBean' threw exception; nested exception is java.lang.IllegalAccessError: tried to access class org.springframework.cloud.aws.core.env.stack.config.AutoDetectingStackNameProvider from class org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 89 more
Caused by: java.lang.IllegalAccessError: tried to access class org.springframework.cloud.aws.core.env.stack.config.AutoDetectingStackNameProvider from class org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration
at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration.stackResourceRegistryFactoryBean(ContextStackAutoConfiguration.java:71)
at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration$$EnhancerBySpringCGLIB$$432c7658.CGLIB$stackResourceRegistryFactoryBean$0(<generated>)
at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration$$EnhancerBySpringCGLIB$$432c7658$$FastClassBySpringCGLIB$$47c6e7d2.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
...
如果相关,生成的 EC2 实例上存在“aws:cloudformation:stack-id”和“aws:cloudformation:stack-name”的标签,我的理解是 Beanstalk 在幕后使用 CloudFormation 堆栈。我已经尝试通过@EnableStackConfiguration 手动指定堆栈的名称,但由于名称是生成的,我宁愿不这样做,即使它确实有效。
所以我的问题是: 1) 是否可以在 Elastic Beanstalk 上运行基于 Spring Cloud AWS 的应用程序? 2)如果是这样,是否需要任何特殊步骤?例如,我已经发现了关于角色需要 CloudFormation 读取访问权限的内容。 3)有没有办法禁用Spring Cloud AWS试图从堆栈中获取资源名称的部分?目前我的应用不需要这个。
提前致谢, k
【问题讨论】:
标签: amazon-elastic-beanstalk spring-cloud