如何在 AWS Batch 中将现有 ECS 集群设置为计算环境
How to Set an existing ECS cluster to a compute environment in AWS Batch
我的环境中有一个 ECS cluster
运行,它配置有任务、存储库和服务以及自动缩放。
我发现了 AWS Batch
服务,当我创建一个新的 compute environment
时,一个新集群被添加到 ECS
服务。
我想知道如何为我现有的集群设置 compute environment
?
据我所知(花了半天时间研究文档和论坛),这是不可能的。 computeEnvironments
的 ecsClusterArn
是在创建计算环境后立即分配的,无法更改。
有趣的是 Batch 以某种方式修改 /etc/ecs/ecs.config
在托管 CE 中新创建的实例:
... // config from my AMI
ECS_CLUSTER=my_cluster_name
... //
ECS_CLUSTER={ENVIRONMENT NAME HERE}_Batch_{RANDOM UUID HERE}
ECS_DISABLE_IMAGE_CLEANUP=false
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=2m
ECS_IMAGE_CLEANUP_INTERVAL=10m
ECS_IMAGE_MINIMUM_CLEANUP_AGE=10m
ECS_NUM_IMAGES_DELETE_PER_CYCLE=5
ECS_RESERVED_MEMORY=32
ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]
,第一个 ECS_CLUSTER
被第二个擦除。这看起来像是一些预定义的 user-data
,但我也找不到可以更改的位置。
但是,也许您可以通过相反的方法实现最初的目标——创建 unmanaged CE,然后遍历您想在该 CE 中的实例,更改 ECS_CLUSTER
在 /etc/ecs/ecs.config
到 $that_autogenerated_CE_arn
中,重新启动 ecs-agent
(或相关 docker,如果那不是亚马逊 Linux)。现在你的容器属于另一个集群,唯一的区别是集群的名称。
我知道这是一个很老的问题,而且情况并不完全相同,但我一直在努力解决类似的问题,因此它可能对某人有所帮助。在我的例子中,Batch 覆盖了我的 ECS_DISABLE_IMAGE_CLEANUP
设置,导致我的特殊专用超高优先级作业队列(及其计算环境)丢失其图像,导致不得不再次拉动它们时出现恼人的延迟。
为了解决这个问题,我必须创建一个启动模板(在 EC2 控制台中),它的所有内容都设置为 "don't change",还有一些额外的 "user data"(在高级部分的末尾) :
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_DISABLE_IMAGE_CLEANUP=true>>/etc/ecs/ecs.config
--==MYBOUNDARY==--
然后我不得不重新创建计算环境以使用此启动模板,这导致将此额外行添加到 ecs.config
文件并覆盖批处理设置。也许它也适用于集群!
我的环境中有一个 ECS cluster
运行,它配置有任务、存储库和服务以及自动缩放。
我发现了 AWS Batch
服务,当我创建一个新的 compute environment
时,一个新集群被添加到 ECS
服务。
我想知道如何为我现有的集群设置 compute environment
?
据我所知(花了半天时间研究文档和论坛),这是不可能的。 computeEnvironments
的 ecsClusterArn
是在创建计算环境后立即分配的,无法更改。
有趣的是 Batch 以某种方式修改 /etc/ecs/ecs.config
在托管 CE 中新创建的实例:
... // config from my AMI
ECS_CLUSTER=my_cluster_name
... //
ECS_CLUSTER={ENVIRONMENT NAME HERE}_Batch_{RANDOM UUID HERE}
ECS_DISABLE_IMAGE_CLEANUP=false
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=2m
ECS_IMAGE_CLEANUP_INTERVAL=10m
ECS_IMAGE_MINIMUM_CLEANUP_AGE=10m
ECS_NUM_IMAGES_DELETE_PER_CYCLE=5
ECS_RESERVED_MEMORY=32
ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]
,第一个 ECS_CLUSTER
被第二个擦除。这看起来像是一些预定义的 user-data
,但我也找不到可以更改的位置。
但是,也许您可以通过相反的方法实现最初的目标——创建 unmanaged CE,然后遍历您想在该 CE 中的实例,更改 ECS_CLUSTER
在 /etc/ecs/ecs.config
到 $that_autogenerated_CE_arn
中,重新启动 ecs-agent
(或相关 docker,如果那不是亚马逊 Linux)。现在你的容器属于另一个集群,唯一的区别是集群的名称。
我知道这是一个很老的问题,而且情况并不完全相同,但我一直在努力解决类似的问题,因此它可能对某人有所帮助。在我的例子中,Batch 覆盖了我的 ECS_DISABLE_IMAGE_CLEANUP
设置,导致我的特殊专用超高优先级作业队列(及其计算环境)丢失其图像,导致不得不再次拉动它们时出现恼人的延迟。
为了解决这个问题,我必须创建一个启动模板(在 EC2 控制台中),它的所有内容都设置为 "don't change",还有一些额外的 "user data"(在高级部分的末尾) :
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_DISABLE_IMAGE_CLEANUP=true>>/etc/ecs/ecs.config
--==MYBOUNDARY==--
然后我不得不重新创建计算环境以使用此启动模板,这导致将此额外行添加到 ecs.config
文件并覆盖批处理设置。也许它也适用于集群!