根据相同的任务定义但使用不同的环境变量来运行多个ECS任务

时间:2019-05-17 13:42:03

标签: amazon-web-services amazon-ec2 amazon-ecs

我的任务是处理大量数据,因此数据被分为许多部分。我已经为这种类型的工作编写了任务定义,但是现在我只知道如何通过为每个环境注册多个任务定义来手动设置它们。

每个任务都有自己的环境 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

最好为集群中的所有任务arns添加一些 .manifest 文件。

是否有某种方式可以以更优雅的方式运行具有不同环境参数的多个相似ECS任务,然后创建大量不同的taskdefs文件?

感谢您的帮助和建议

2 个答案:

答案 0 :(得分:2)

使用--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 :(得分:1)

我可能在这里误解了这个问题,但是您可以在运行任务之前将变量放入cli输入.json并使用sed换出批次ID吗?当我需要换出环境变量时,已经为应用程序部署完成了此操作。

首先,将要替换的变量放入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