什么是ECS任务组?如何创建一个?

时间:2018-03-05 16:45:14

标签: amazon-web-services amazon-ecs

这是我为任务组找到的唯一doc,它并没有解释如何或在何处创建一个。{/ p>

我无法找到任何充分解释任务组实际内容的文档,并举例说明如何创建和使用一个。这听起来像是一种服务运行多种不同的任务定义的方式,这对我来说很有用。

例如,我在任务定义中添加了一个容器,该服务正在平衡群集上的多个实例。但是我想要与第一个容器一起部署另一个容器,但我只想要运行它的单个实例。所以我无法将其添加到同一个任务定义中,因为我正在创建它的多个实例并消耗不必要的资源。这似乎是任务组的用途。

1 个答案:

答案 0 :(得分:1)

您确实是对的,没有相关的正确文档(我在AWS团队中打开了一个支持案例进行验证!)。

然而,一切都不会丢失。确实存在解决您的难题的解决方案,并且是我们每天使用的解决方案。您不必使用任务组,无论那是什么(因为我们实际上还不知道(AWS工程师正在为我编写一些文档,将在此处发布)我得到了他们))。

您只需要展示位置约束(您的同一个文档),这些都很容易设置。如果您有启动配置,则可以向Advanced>添加类似的内容。用户数据部分,以便在启动期间运行(或者只是在手动启动实例时添加它(或者如果您感觉异常hacky,您可以登录到您的实例并运行命令手动..为科学和东西)):

echo ECS_INSTANCE_ATTRIBUTES={\"env\": \"prod\",\"primary\": \"app1\",\"secondary\": \"app2\"} >> /etc/ecs/ecs.config

引号中的所有内容都是由您任意定义的,因此请使用适合您的用例的任何标记和值。如果您选择此路线,请确保将以下行添加到泊坞窗启动命令:--env-file=/etc/ecs/ecs.config

现在您已经有一个正确标记的实例(并确保它只是您想要的单个实例(这意味着您可能需要针对此特定类型实例的专用启动配置)) ,您可以继续像您想要的那样创建您的ECS服务。但是,请确保正确设置任务放置,以匹配现在为实例配置的角色:

blah

因此,对于上面的示例,此服务配置为仅在为env==prodsecondary==app2配置的实例上启动此任务 - 因为您的其他两个实例不是&#39;为<{1}}配置了,他们不允许主持此任务。

起初可能会让人感到困惑,并且花了我们一段时间才能做对,但我希望这会有所帮助!

来自AWS Support的响应

我查看了如何使用任务组的过程,以下是我的发现: - 假设您已经有一个名为&#34; secondary==app2&#34;的任务组。如果你有从 RunTask / StartTask API启动的现有任务。

使用 RunTask StartTask 操作启动任务时,可以指定任务的任务组名称。如果您没有为任务指定任务组,则默认名称是任务定义的系列名称(例如,databases) - 因此要创建任务组,要么定义 TaskGroup (比如说family:my-task-definition)在任务控制台上创建任务或使用以下命令:webserver

创建后,您会注意到一个正在运行的任务:$ aws ecs run-task --cluster <ecs-cluster> --task-definition taskGroup-td:1 --group webserver

现在,您可以使用以下放置约束和任务定义将任务仅放置在使用此任务组运行任务的容器上。

webserver

如果您尝试使用上述placementConstraint运行任务,但没有任何任务与"placementConstraints": [ { "expression": "task:group == webserver", "type": "memberOf" } ] 一起运行,您将收到以下错误:taskGroup : webserver

参考文献:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html