Передача аргументов командной строки в AWS контейнер Fargate - PullRequest
2 голосов
/ 13 июля 2020

Мы используем Terraform для динамического развертывания контейнера AWS ECS / Fargate для запуска приложения Spring Boot, и есть требование передать в приложение несколько аргументов командной строки. Доступная документация, кажется, предполагает, что правильный способ сделать это - определить «командный» блок в определении контейнера Terraform JSON и указать там один или несколько аргументов. Вот мое текущее определение контейнера:

 [{
"name": "${environment}-${app_name}",
"image": "${app_image}",
"cpu": ${fargate_cpu},
"memory": ${fargate_memory},
"networkMode": "awsvpc",
"command": [
   "--server.port",
   "${app_port}"
],
"logConfiguration": {
    "logDriver": "awslogs",
    "options": {
      "awslogs-group": "${environment}-${app_name}",
      "awslogs-region": "${aws_region}",
      "awslogs-stream-prefix": "ecs"
    }
},
"portMappings": [
  {
    "containerPort": ${app_port},
    "hostPort": ${app_port}
  }
]}]

Вы заметите, что я определил командный блок с аргументом - server.port и установил его значение переменной app_port. Однако при развертывании этот аргумент не подбирается приложением Spring Boot, работающим внутри контейнера, и вместо него используется порт по умолчанию.

Мой вопрос прост: как следует go указать аргументы командной строки для приложений, работающих внутри контейнеров Fargate?

1 Ответ

0 голосов
/ 13 июля 2020

Похоже, из-за синтаксиса вы передаете системное свойство. Вы можете легко протестировать это на своей локальной системе перед тем, как запустить его облако. передать с -Dserver.port=8081

docker run -it --net host --rm hello-world java -jar -Dserver.port=8081 /data/hello-world-0.1.0.jar

output

2020-07-13 03:31:59.316  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-07-13 03:31:59.631  INFO 1 --- [ main] : Tomcat started on port(s): 8081 (http) with context path ''
2020-07-13 03:31:59.636  INFO 1 --- [           main] c.d.hello.Application                    : Started Application in 4.031 seconds (JVM running for 4.875)

Почему аргументы JVM начинаются с «-D»?

-Dproperty=value

Устанавливает значение системного свойства. Переменная свойства - это строка без пробелов, представляющая имя свойства. Переменная значения - это строка, представляющая значение свойства. Если value представляет собой строку с пробелами, заключите ее в кавычки (например, -Dfoo="foo bar").

Таким образом, CMD станет

  
command: ["java", "-Dserver.port=${app_port}", "-jar", "/data/hello-world-0.1.0.jar"] 
...