java - 如何在本地使用 spring-cloud-starter-aws 运行应用程序?

标签 java amazon-web-services spring-boot spring-cloud

我需要在本地运行基于 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 SDK 时,使用默认 AWS 链没有任何问题 - 我不需要为应用程序的本地运行做任何特定的事情(在本地它从文件读取凭证,在 EC2 上它使用实例元数据服务) .但是对于 Spring Boot,它并不是开箱即用的,我需要以某种方式启用本地运行。

我使用 2.2.2.RELEASE 版本的 Spring Boot 和 2.2.1.RELEASE 版本的 Spring Cloud。我感觉他们引入了回归,因为在以前的版本中它没有问题。

对如何在本地运行该应用程序有任何想法吗?

最佳答案

将以下几行添加到配置中会有所帮助:

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 自动配置背后的理由是它与启动执行器有冲突,但我不确定。

关于java - 如何在本地使用 spring-cloud-starter-aws 运行应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60966289/

相关文章:

amazon-web-services - key 对 'AdvancedCFN' 不存在(服务 : AmazonEC2; Status Code: 400; Error Code:

java - 为什么非托管类中会自动弹出 @Autowitred 字段

java - 如果终结器使对象可达怎么办?

java - 在 Java 中如何递归打印 arrayList?

node.js - 如何在Lambda函数中访问API网关请求模型?

java - "one shot"程序可以用spring boot吗

spring-boot - 端点 "/api-docs"不适用于自定义 GsonHttpMessageConverter

java - 如何查看时间是否在纽约时间下午 2 点到凌晨 1 点之间?

java - 如何创建数据并将其插入到具有特殊名称的表中?

python - 如何从本地 Docker 容器中从 S3 中提取数据