Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 基于相同的任务定义但使用不同的环境变量运行多个ECS任务_Amazon Web Services_Amazon Ec2_Amazon Ecs - Fatal编程技术网

Amazon web services 基于相同的任务定义但使用不同的环境变量运行多个ECS任务

Amazon web services 基于相同的任务定义但使用不同的环境变量运行多个ECS任务,amazon-web-services,amazon-ec2,amazon-ecs,Amazon Web Services,Amazon Ec2,Amazon Ecs,我的任务是处理大量数据,所以数据被分批处理成许多部分。我已经为这类工作编写了任务定义,但现在我只知道如何通过为每个环境注册多个任务定义来手动设置它们 每个任务都有自己的环境批处理ID的示例 aws ecs register-task-definition --cli-input-json file://taskdef1.json aws ecs run-task --cluster $cluster --task-definition process_data_1 aws ec

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

每个任务都有自己的环境批处理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文件包含为集群放置的所有任务ARN,那就更好了

有没有办法用不同的环境参数以更优雅的方式运行多个类似的ECS任务,然后创建大量不同的taskdefs文件


感谢您提供的帮助和建议

我可能误解了这里的问题,但您能否在运行任务之前将变量放入cli input.json并使用sed交换批处理ID?当我需要交换环境变量时,我已经为应用程序部署完成了这项工作

首先,将要替换的变量放入taskdef模板文件中(如%BATCH\u ID%)

然后这样做:(注意:Bash脚本已经超出我的想象,可能需要修改)


使用
--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
来覆盖更多的东西当然:

是的,我可以像你说的那样做。但无论如何,它将创建大量的任务,因此必须传递envs o register任务。我想知道是否可以将ecs cli compose或task definition等用于多个容器(针对每个特定环境)。我想自动化这个任务,只使用一个按钮。下面是为每个环境制定不同任务的建议,但这似乎不是最简单的方法。也许我错了,谢谢链接的文章是我所理解的“最佳实践”——一个taskdef中的多个容器应该限制为侧车。如果要使其成为“按钮”,可能需要编写一个脚本来组装taskdef(我使用的方法或其他海报推荐的方法--overrides),注册它们,假设你运行了5个任务定义实例,这将如何允许批处理ID为0,1,2,3,4?这是一个好问题,我认为会有一个ECS环境变量,但我没有找到任何
aws ecs run-task --cluster $cluster --task-definition process_data_1 --overrides {"containerOverrides":[...]}