如何在本地使用 spring-cloud-starter-aws 运行应用程序?
Posted
技术标签:
【中文标题】如何在本地使用 spring-cloud-starter-aws 运行应用程序?【英文标题】:How to run the app with spring-cloud-starter-aws locally? 【发布时间】:2020-07-12 22:21:22 【问题描述】:我需要在本地运行基于 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 堆栈在本地运行应用程序。
当我使用 AWS SDK for Java 时,默认使用 AWS 链没有任何问题 - 我不需要为应用程序的本地运行执行任何特定操作(在本地它从文件中读取凭证,在 EC2 上它使用实例元数据服务) .但是使用 Spring Boot 它不能开箱即用,我需要以某种方式启用本地运行。
我使用 2.2.2.RELEASE 版本的 Spring Boot 和 2.2.1.RELEASE 版本的 Spring Cloud。我感觉他们引入了回归,因为在以前的版本中它没有问题。
任何想法如何在本地运行应用程序?
【问题讨论】:
【参考方案1】:在配置中添加以下行会有所帮助:
cloud.aws.region.static=my region
cloud.aws.stack.auto=false
spring.autoconfigure.exclude=org.springframework.cloud.aws.autoconfigure.metrics.CloudWatchExportAutoConfiguration
所以 Spring 使用 AWS 默认链,但仅用于凭证。 AWS SDK 也将其用于区域和其他配置参数。 所以这肯定是 Spring 错误。 它仍然会在应用程序启动期间发出一次关于没有连接到实例元数据服务的警告,但此解决方案或多或少可用于本地运行。
如果我们没有排除 CloudWatchExportAutoConfiguration 的最后一行,则关闭应用程序时堆栈跟踪中会出现许多异常。我在我的应用中使用 CloudWatch 指标。
我猜排除 aws 自动配置的原因是它与启动执行器有冲突,但我不确定。
【讨论】:
我遵循了这些步骤,但我仍然面临同样的问题,即尝试连接 EC2 实例元数据 URL。您还有其他解决方案吗? 云:aws:堆栈:自动:错误区域:自动:错误静态:us-east-1以上是关于如何在本地使用 spring-cloud-starter-aws 运行应用程序?的主要内容,如果未能解决你的问题,请参考以下文章