我正在尝试在AWS ECS中设置一个具有相关数据库的基本Web应用程序。在本地,我将这些设置放在不同的容器中,并且在ECS上,我想有单独的任务定义,以便可以分别缩放这两个任务。
david_mongodb
david_web
david_mongodb:db
Unable to create Task Definition
Linked container ‘david_mongodb:db’ doesn’t exist.
似乎任务定义在其他任务定义中看不到容器名称?我正在考虑将容器david_web和david_mongodb容器放在同一个任务定义中,但是我不想这样做:这将阻止我分别缩放Web应用程序或数据库。此概述似乎证实了我的体系结构是值得推荐的…
那么,如何链接存在于不同任务定义中的容器?还是有另一种聪明的方式来处理这个问题?
ECS任务定义中的链接类似于Docker链接,并且仅在容器属于同一任务定义的一部分(单个任务定义的一部分的容器一起放置在同一主机上)时起作用。为了在不同任务定义的容器之间进行通信,您需要一种机制来发现容器的位置(主机)以及通信端口。
ECS通过服务功能与Elastic Load Balancing(应用程序负载平衡器,网络负载平衡器和经典负载平衡器)集成在一起,该功能将在ELB中自动注册任务,并在ELB中适当地注销任务。
ECS还与Route 53自动命名集成,用于使用A和SRV记录基于DNS的服务发现。您服务的任务可以自动输入到DNS记录中或从中删除。
A
SRV
Amazon ECS使用DNS的服务发现 描述了一种不同的方法,其中Lambda函数通过CloudWatch Events侦听ECS事件流并更新Route 53 DNS记录。该方法已被上述Route 53自动命名功能所取代。
如果你想避免负载平衡器和DNS,另一种模式可能是一个大使容器(有一个名为样本ECS- 任务的风筝,它使用ECS API),也可在覆盖网络有兴趣(纺织品有着相当详细的获取他们的解决方案入门指南)。
弥敦道佩克是保持了许多有关ECS不同的主题,包括服务发现的轨道,在这里。