我正在努力使用ECS在AWS上运行Spring Boot微服务。我们希望该服务从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中进行解析。
谢谢您的帮助!
答案 0 :(得分:3)
最后一个陈述不清楚。 rdsmasterusername
是否同时包含用户名或密码或仅包含用户名?我猜想它会在JSON字符串中同时包含用户名和密码-根据您的上次记录。
如果您不想处理解析JSON字符串或创建稍后将被继承的新环境变量,则可以将用户名和密码存储在两个不同的秘密中,将它们注入到taskdef文件中,然后在{ https://stackoverflow.com/a/35535138中所述的{1}}个文件。