【发布时间】:2020-02-08 08:03:45
【问题描述】:
我正在使用 ECS 让 Spring Boot 微服务在 AWS 中运行。我们希望该服务从 Secrets Manager 或 Parameter Store 检索数据库用户名和密码值。我们正在使用所有 AWS 服务(CodeCommit、CodeBuild、CodeDeploy 等)
从 Parameter Store 读取这些值并将它们放入我们微服务的 application.properties 的最佳方法是什么?
我已尝试关注this guide on retrieving secrets。我能够读取这些秘密,但只能作为系统属性读取,我无法确定如何将它们放入 application.properties 文件中。
这里是taskdef.json
{
"executionRoleArn": "arn:aws:iam::ACCOUNT_ID:role/profile-service",
"containerDefinitions": [
{
"name": "profile-service",
"image": "<IMAGE1_NAME>",
"essential": true,
"environment": [
{
"name": "SPRING_PROFILES_ACTIVE",
"value": "dev"
}
],
"portMappings": [
{
"protocol": "tcp",
"containerPort": 8080
}
],
"secrets": [
{
"valueFrom": "arn:aws:secretsmanager:us-east-1:ACCOUNT_ID:secret:PROJECT/dev/rds-Y3B26E",
"name": "rdsmasterusername"
}
],
....
}
这是我用来测试的 Spring 的主文件。它正确打印了我只是不确定将它们放入属性的最佳方法的秘密。
public static void main(String[] args) {
String test1 = System.getenv("rdsmasterusername");
System.out.println(test1); // Correctly prints the RDS username
SpringApplication.run(Startup.class, args);
}
注意:目前,当我检索秘密时,它给了我某种同时具有用户名和密码的对象。我不确定如何在 java 中解析。
感谢您的帮助!
【问题讨论】:
-
如果
/dev/rds-Y3B26E是 String 属性,则不应返回 JSON。如果它是一个字符串,您应该可以在 application.properties 文件中执行${rdsmasterusername}。
标签: amazon-web-services spring-boot docker amazon-ecs aws-secrets-manager