如何在 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

据我所知(花了半天时间研究文档和论坛),这是不可能的。 computeEnvironmentsecsClusterArn 是在创建计算环境后立即分配的,无法更改。

有趣的是 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 文件并覆盖批处理设置。也许它也适用于集群!