【问题标题】:How to Set an existing ECS cluster to a compute environment in AWS Batch如何在 AWS Batch 中将现有 ECS 集群设置为计算环境
【发布时间】:2017-06-06 12:13:23
【问题描述】:
我有一个ECS cluster 在我的环境中运行,它配置了任务、存储库和服务以及自动缩放。
我发现了AWS Batch 服务,当我创建一个新的compute environment 时,一个新的集群被添加到ECS 服务中。
我想知道如何为我现有的集群设置compute environment?
【问题讨论】:
标签:
amazon-web-services
cluster-computing
solution
amazon-ecs
【解决方案1】:
我知道这是一个相当古老的问题,而且情况并不完全相同,但我正在努力解决类似的问题,所以它可能对某人有所帮助。在我的例子中,Batch 覆盖了我的 ECS_DISABLE_IMAGE_CLEANUP 设置,导致我特殊的专用超高优先级作业队列(及其计算环境)丢失了图像,当它们不得不再次被拉出时会导致烦人的延迟。
为了解决这个问题,我必须创建一个启动模板(在 EC2 控制台中),其中所有内容都设置为“不要更改”,以及一些额外的“用户数据”(在高级部分的末尾):
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 文件并覆盖批处理设置。也许它也适用于集群!
【解决方案2】:
据我所知(花了半天时间研究文档和论坛),这是不可能的。 computeEnvironments 的ecsClusterArn 是在创建计算环境后立即分配的,不能更改。
有趣的是,Batch 以某种方式修改了托管 CE 中新创建的实例上的 /etc/ecs/ecs.config:
... // 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 中的实例,将 /etc/ecs/ecs.config 中的 ECS_CLUSTER 更改为 @987654329 @,重新启动 ecs-agent(或相关的 docker,如果那不是 Amazon Linux)。现在您的容器属于另一个集群,唯一的区别是集群的名称。