在我的架构中,单个“工作”可能需要 N 个“任务”。 用户可以开始一项作业,允许开始许多任务,然后一起取消该作业。 发生这种情况时,我需要停止该工作的所有任务。
我无法确定“分组”我的任务的最佳方式,以便我可以通过 JobId 引用它们。
我注意到任务定义有一个“组”属性,但我找不到一种简单的方法来对类似组的任务执行批量操作,正如我所期望的那样。
我正在寻找与 kubectl 命令等效的命令:
kubectl delete job -l jobId=123
或
kubectl delete pod -l jobId=123
我想也许任务集可能就是我正在寻找的东西,但是我对它们了解得越多,我对它们是什么就越感到困惑。
我希望有类似的事情
aws ecs delete-task --group jobId=123
不幸的是,没有简单的方法可以通过这样的单个命令删除特定的 ECS 任务。如果您查看
aws ecs stop-task
命令(没有 delete-task
命令),您会发现必须指定任务 ID,没有其他选项可以传递来选择要停止的任务。
运行任务时,您可以使用作业 ID 将 AWS 标签添加到任务中:
aws ecs run-task --tags jobId=123`
然后,您必须调用 aws resourcegroupstaggingapi get-resources 来获取具有特定作业 ID 标签的所有任务。这将返回完整的任务 ARN。然后,您应该能够将这些任务 ARN 作为任务 ID 传递给
aws ecs stop-task
。
或者,您可以考虑向您的应用程序添加一些任务跟踪逻辑,这样您就不必依赖 AWS API 为您的任务公开的内容。您可以捕获在
run task
响应中返回的任务 ID,并将它们与 JobID 一起放置在 DymamoDB 表之类的位置。然后,当作业被取消时,只需在数据库中查询与该作业对应的任务 ID,然后使用这些 ID 调用 stop-task
即可。