Как использовать переменные окружения для docker изображения в AWS -ECR? - PullRequest
0 голосов
/ 16 апреля 2020

Я сделал docker изображение из Spring-Boot-App, которое имеет application.properties. Например, одно свойство - user.name=xxx. Теперь я загрузил изображение в репозиторий AWS -ECR. Есть ли способ ввести эту переменную через ECS-Task или, может быть, другим способом? Для развертывания я использую Terraform.

1 Ответ

1 голос
/ 16 апреля 2020

Spring Boot позволяет задавать конфигурацию с помощью множества различных способов:

Spring Boot использует очень специфический порядок PropertySource, который разработан для обеспечения разумного переопределения значений , Свойства рассматриваются в следующем порядке:

  1. Свойства глобальных настроек Devtools для вашего домашнего каталога (~ / .spring-boot-devtools.properties, когда активен devtools).
  2. @ TestPropertySource аннотации в ваших тестах.
  3. @ SpringBootTest # свойства атрибута аннотации в ваших тестах.
  4. Аргументы командной строки.
  5. Свойства из SPRING_APPLICATION_ JSON (встроенные JSON встроены в переменная окружения или системное свойство)
  6. Параметры инициализации ServletConfig.
  7. Параметры инициализации ServletContext.
  8. Атрибуты JNDI из java: comp / env.
  9. Java Системные свойства (System.getProperties ()).
  10. Переменные среды ОС.
  11. RandomValuePropertySource, свойства которого имеют только случайные свойства. *.
  12. Профиль-спецификация c свойства приложения за пределами вашего упакованного jar-файла (application- {profile} .properties и YAML-варианты)
  13. Профиль-спецификация c свойства приложения pac kaged внутри вашего jar (application- {profile} .properties и YAML-варианты)
  14. Свойства приложения вне вашего упакованного jar (application.properties и YAML-варианты).
  15. Свойства приложения, упакованные внутри вашего jar-файла (application.properties и YAML-варианты).
  16. @ PropertySource аннотации к вашим классам @Configuration.
  17. Свойства по умолчанию (задаются с помощью SpringApplication.setDefaultProperties).

Самое простое - установить переменные среды для определения контейнера ECS , чтобы они внедрялись в задачу во время выполнения. Это также переопределит любые свойства, установленные в application.properties из-за их упорядочения.

Очень простой c пример определения задачи в Terraform будет выглядеть примерно так:

resource "aws_ecs_task_definition" "example" {
  family                = "example"
  container_definitions = <<TASK_DEFINITION
[
    {
        "cpu": 10,
        "command": ["sleep", "10"],
        "entryPoint": ["/"],
        "environment": [
            {
                "name": "USER_NAME"
                "value": "xxx"
            }
        ],
        "essential": true,
        "image": "example",
        "memory": 128,
        "name": "example",
        "portMappings": [
            {
                "containerPort": 80,
                "hostPort": 8080
            }
        ]
    }
]
TASK_DEFINITION

}
...