似乎可以根据任务定义运行任务或服务。Task 和 Service 之间有什么区别和相似之处?在创建任务而不是服务时可以指定“任务组”这一事实是否有线索?任务和服务在层次上是任务定义的相等实例,还是服务由任务组成?
任务 定义 是 1 个或多个 容器 配置 的集合。一些任务可能只需要一个容器,而其他任务可能需要 2 个或更多潜在链接的容器同时运行。任务定义允许您指定要使用的 Docker 映像、要公开的端口、要分配多少 CPU 和内存、如何收集日志以及定义环境变量。
当您直接运行 任务 时会创建任务,该任务会启动容器(在任务定义中定义),直到它们停止或自行退出,此时它们 不会被自动替换 。直接运行任务非常适合短期运行的作业,也许可以作为通过 CRON 完成的事情的一个例子。
服务 用于保证始终有一定数量的任务在 运行 。如果 Task 的容器因错误而退出,或者底层 EC2 实例失败并被替换,ECS 服务将替换失败的 Task。这就是我们创建 _ 集群 的原因,以便服务在 CPU、内存和网络端口方面有大量资源可供使用。对我们来说,只要它们运行,运行哪个实例任务并不重要。服务配置 _引用 任务定义。一个 Service 负责 创建 Tasks 。
服务通常用于 Web 服务器等长时间运行的应用程序。例如,如果我在俄勒冈州 (us-west-2) 部署了由 Node.JS 提供支持的网站,我会说至少三个任务跨三个可用区 (AZ) 以实现高可用性;如果一个失败了,我还有另外两个,失败的一个将被替换(读作 自我修复 !)。创建服务是执行此操作的方法。如果我的集群中有 6 个 EC2 实例,每个可用区 2 个,则服务将尽可能自动地跨区域平衡任务,同时还会考虑 CPU、内存和网络资源。
更新:
我不确定分层考虑这些事情是否有帮助。
另一个非常重要的一点是,可以将服务配置为使用负载均衡器,以便在创建任务时——它启动任务定义中定义的容器——服务将自动将容器的 EC2 实例注册到负载平衡器。不能将任务配置为使用负载均衡器,只有服务可以。