Запуск нескольких задач ECS на основе одного определения задачи, но с разными переменными среды - PullRequest
1 голос
/ 17 мая 2019

У меня есть задача обработать большой объем данных, поэтому данные разбиваются на множество частей. Я написал определение задачи для этого типа работы, но теперь я знаю только, как настроить их вручную, зарегистрировав несколько определений задач для каждого env.

образец, где у каждой задачи есть свой env BATCH_ID

  aws ecs register-task-definition --cli-input-json file://taskdef1.json  
  aws ecs run-task --cluster $cluster --task-definition process_data_1

  aws ecs register-task-definition --cli-input-json file://taskdef2.json  
  aws ecs run-task --cluster $cluster --task-definition process_data_2

Было бы даже неплохо иметь файл .manifest всех заданий для кластера.

Есть ли способ запустить несколько похожих задач ECS с различными параметрами env более элегантным способом, чем создавать огромное количество различных файлов taskdefs?

Спасибо за любую помощь и предложения

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Вы можете переопределить переменную среды, когда запускаете задачу с флагом --overrides.Я использую это все время;Вы можете либо переопределить существующую переменную среды (определенную в определении задачи), либо просто добавить новую.--overrides принимает только JSON (без сокращенного синтаксиса);в вашем случае это будет выглядеть так:

{
  "containerOverrides": [
    {
      "name": "containerNameFromTaskDefinition",
      "environment": [
        {
          "name": "BATCH_ID",
          "value": "sampleBatchId"
        }
      ]
    }
  ]
}

и команда:

aws ecs run-task --cluster $cluster --task-definition process_data_1 --overrides {"containerOverrides":[...]} 

Вы можете использовать --overrides, чтобы переопределить еще больше вещей, конечно: https://docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html

1 голос
/ 19 мая 2019

Возможно, я неправильно понимаю проблему здесь, но не могли бы вы просто поместить переменную в свой входной файл cli .json и использовать sed для замены идентификатора пакета перед запуском задачи? Я сделал это для развертывания приложений, когда мне нужно поменять env vars.

Сначала поместите переменную, которую хотите заменить, в файл шаблона taskdef (например,% BATCH_ID%)

Затем сделайте что-то вроде этого: (ПРИМЕЧАНИЕ: скрипт Bash находится у меня на макушке и может нуждаться в исправлении)

sed 's/%BATCH_ID%/$BATCH_ID' generic_taskdef.json > process_data_$BATCH_ID.json 
aws ecs register-task-definition --cli-input-json file://process_data_$BATCH_ID.json
aws ecs run-task --cluster $cluster --task-definition process_data_$BATCH_ID
...