我需要在本地运行基于Spring Boot的应用程序。它使用spring-cloud-starter-aws依赖项。
问题在于它总是尝试连接到EC2元数据服务。设置“ cloud.aws。*”属性没有帮助。
我希望将使用默认的AWS凭证链,并且将从AWS首选方式之一读取凭证和区域(例如〜/ .aws / config和〜/ .aws / credentials文件)。
我尝试设置cloud.aws.credentials.useDefaultAwsCredentialsChain属性,但spring-cloud-starter-aws不在乎
我发现examples使用CloudFormation堆栈是出于非常奇怪的原因在本地运行应用程序。
当我使用适用于Java的AWS开发工具包时,默认使用AWS链而不会出现任何问题-我不需要为应用程序的本地运行做任何特定的事情(在本地它从文件中读取凭证,在EC2上它使用实例元数据服务) 。但是使用Spring Boot不能立即使用,我需要以某种方式启用本地运行。
我使用的是Spring Boot的2.2.2.RELEASE版本和Spring Cloud的2.2.1.RELEASE版本。我觉得他们引入了回归,因为在以前的版本中,回归没有问题。
有什么想法如何在本地运行该应用程序吗?
答案 0 :(得分:2)
在配置中添加以下几行会有所帮助:
cloud.aws.region.static=my region
cloud.aws.stack.auto=false
spring.autoconfigure.exclude=org.springframework.cloud.aws.autoconfigure.metrics.CloudWatchExportAutoConfiguration
因此,Spring使用AWS默认链,但仅用于凭证。 AWS开发工具包也将其用于区域和其他配置参数。 所以这肯定是Spring错误。
它仍然会发出警告,指示在应用程序启动期间一次不与实例元数据服务建立连接,但该解决方案或多或少可以用于本地运行。
如果没有除CloudWatchExportAutoConfiguration之外的最后一行,则在关闭应用程序时,堆栈跟踪中将有很多异常。我在应用中使用CloudWatch指标。
我想排除aws自动配置的原因是它与启动执行器有冲突,但是我不确定。