天道酬勤,学无止境

How to Set an existing ECS cluster to a compute environment in AWS Batch

问题

我在我的环境中运行了一个ECS cluster ,它配置了任务、存储库和服务以及自动缩放。

我正在发现AWS Batch服务,当我创建一个新的compute environment时,一个新的集群被添加到ECS服务中。 我想知道如何为我现有的集群设置compute environment

回答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

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

有趣的是,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 ,但我也找不到可以更改的地方。

但是,您可能可以通过相反的方法实现最初的目标——创建非托管CE,并遍历您希望在该 CE 中的实例,将ECS_CLUSTER中的/etc/ecs/ecs.config更改为$that_autogenerated_CE_arn ,重新启动ecs-agent (或相关的 docker,如果那不是 Amazon Linux)。 现在您的容器属于另一个集群,唯一的区别在于集群的名称。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐