Как использовать AWS ECS для получения секретов базы данных из хранилища параметров

Я работаю над тем, чтобы микросервис Spring Boot работал в AWS с помощью ECS. Мы хотим, чтобы служба извлекала значения имени пользователя и пароля базы данных из диспетчера секретов или хранилища параметров. Мы используем все сервисы AWS (CodeCommit, CodeBuild, CodeDeploy и т. Д.)

Как лучше всего прочитать эти значения из хранилища параметров и поместить их в application.properties нашего микросервиса?

Я пробовал следовать это руководство по получению секретов. Я могу читать секреты, но только как свойства системы, и я не могу определить, как поместить их в файл 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.

Спасибо за любую помощь!


person Lucas A    schedule 10.10.2019    source источник
comment
Вы не должны получать JSON обратно, если /dev/rds-Y3B26E является свойством String. Если это строка, вы можете просто сделать ${rdsmasterusername} в файле application.properties.   -  person Mark B    schedule 11.10.2019


Ответы (1)


Последнее утверждение непонятно. rdsmasterusername содержит и имя пользователя, и пароль, или только имя пользователя? Я предполагаю, что он содержит как имя пользователя, так и пароль в строке JSON - на основе вашей последней заметки.

Если вы не хотите заниматься синтаксическим анализом строки JSON или созданием новых переменных среды, которые будут унаследованы позже, вы можете сохранить имя пользователя и пароль в двух разных секретах, ввести их в свой файл taskdef, а затем установить их в своих application.properties файлах, как описано в https://stackoverflow.com/a/35535138.

person RobS    schedule 10.10.2019