为啥将 Spring Cloud 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性?
Posted
技术标签:
【中文标题】为啥将 Spring Cloud 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性?【英文标题】:Why Integrating Spring Cloud application with the AWS Parameter Store return no property from param store?为什么将 Spring Cloud 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性? 【发布时间】:2019-05-31 17:16:28 【问题描述】:意图:我正在开发一个 POC,它打算将 AWS 参数存储用作属性存储。这会将机密应用程序属性存储在 AWS SSM 的参数存储中。我正在使用 Java 8 和 spring启动/云版本 2。
Resource:我从 spring docs 关注 this ref guide 和
也是一篇综合文章Integrating the AWS Parameter Store with Spring Cloud。因此试图利用
spring-cloud-starter-aws-parameter-store-config.jar
因此在构建文件中添加了所需的依赖项。
预期输出:
实际输出:
这是来自 AWS 控制台的快照我正在尝试从 AWS 参数存储访问下面显示的参数
以下是我的 spring 属性文件:
application.yml
bootstrap.yml
我在 POM.xml
中使用具有以下依赖项的 maven <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-parameter-store-config</artifactId>
</dependency>
</dependencies>
我在这里错过了什么吗?如果有人已经遇到并解决了这个问题,请告诉我。
我可以从命令行输入和获取参数,只是无法让这个 java 库工作。
我正在尝试的示例的 GitHub 存储库 -
GitHub repo link
【问题讨论】:
参数存储的屏幕与ap-south-1是否来自同一区域? @slimane 是的..来自同一个区域.. ap-south-1,事实上我在我的 aws 实例的 Dev env 中只使用了那个区域 我在我的 aws 实例的 Dev env 中只使用那个区域是什么意思 @slimane 我有特定于环境的 aws 帐户,即 prod 和 dev 不同。在特定于 dev 的帐户中,所有概念证明都仅在 ap-south-1 区域中完成。我可以使用 CLI 从运行此应用程序的同一台机器上检索,它默认为 ap-south-1。 也许 region.auto=true 属性会覆盖静态值,你能验证一下吗? 【参考方案1】:我检查了你的应用程序,它没有像我预期的那样工作,因为我有 ~.aws/config 文件,这会导致 AWS 凭证配置错误(由 DefaultAWSCredentialsProviderChain
引起,阅读更多 here ),所以我删除了它,我又试了一次,但它没有说 spring 在 env 中找不到 aws 区域,所以显然在 application.yml 中指定的那些将不会被使用,直到 spring 从 AWS 参数存储加载属性。
我是如何做到的
我补充说:
System.setProperty("aws.accessKeyId","My_Key");
System.setProperty("aws.secretKey","Secret");
System.setProperty("aws.region","us-east-1");//same region where all your params exist
在SpringApplication.run(DemoApplication.class, args);
之前,然后它起作用了。
将aws.region
更改为另一个没有定义参数值的值时,我得到的结果与您的完全相同(空值)。
确保您的机器或 EC2 实例上没有任何会覆盖您应用中提供的配置的 aws 配置。
【讨论】:
是的,你是对的。.aws/config 文件有问题以上是关于为啥将 Spring Cloud 应用程序与 AWS Parameter Store 集成不会从参数存储中返回任何属性?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 spring cloud gcp starter 将 Spring Boot 与 Cloud SQL 连接
为啥我的Maven引入spring-cloud-starter-zookeeper-all报红?
为啥部署在 Docker 容器上的 Spring Cloud Netflix 应用需要显式设置 eureka.instance.hostname?
为啥 spring-cloud-starter-config 忽略 bootstrap.properties?
当 spring-cloud-starter-zipkin 使用 zipkin.brave 时,为啥需要 Spring sleuth?