一尘不染

在AWS ECS中的任务定义之间链接容器?

docker

我正在尝试在AWS
ECS中设置一个具有相关数据库的基本Web应用程序。在本地,我将这些设置放在不同的容器中,并且在ECS上,我想有单独的任务定义,以便可以分别缩放这两个任务。

  1. david_mongodb在ECS中成功注册了第一个任务定义。它具有一个命名的容器david_mongodb
  2. 然后,我尝试将第二个任务定义注册为david_web,其中有一个名为的容器,该容器david_web通过链接数据库david_mongodb:db
  3. 当我单击“创建”时,它返回错误:
    Unable to create Task Definition
    

    Linked container ‘david_mongodb:db’ doesn’t exist.

似乎任务定义在其他任务定义中看不到容器名称?我正在考虑将容器david_webdavid_mongodb容器放在同一个任务定义中,但是我不想这样做:这将阻止我分别缩放Web应用程序或数据库。此概述似乎证实了我的体系结构是值得推荐的…

那么,如何链接存在于不同任务定义中的容器?还是有另一种聪明的方式来处理这个问题?


阅读 310

收藏
2020-06-17

共1个答案

一尘不染

ECS任务定义中的链接类似于Docker链接,并且仅在容器属于同一任务定义的一部分(单个任务定义的一部分的容器一起放置在同一主机上)时起作用。为了在不同任务定义的容器之间进行通信,您需要一种机制来发现容器的位置(主机)以及通信端口。

ECS通过服务功能与Elastic Load
Balancing(应用程序负载平衡器,网络负载平衡器和经典负载平衡器)集成在一起,该功能将在ELB中自动注册任务,并在ELB中适当地注销任务。

ECS还与Route
53自动命名
集成,用于使用ASRV记录基于DNS的服务发现。您服务的任务可以自动输入到DNS记录中或从中删除。

Amazon ECS使用DNS的服务发现 描述了一种不同的方法,其中Lambda函数通过CloudWatch
Events侦听ECS事件流并更新Route 53 DNS记录。
该方法已被上述Route 53自动命名功能所取代。

如果你想避免负载平衡器和DNS,另一种模式可能是一个大使容器(有一个名为样本ECS-
任务的风筝
,它使用ECS
API),也可在覆盖网络有兴趣(纺织品有着相当详细的获取他们的解决方案入门指南)。

弥敦道佩克是保持了许多有关ECS不同的主题,包括服务发现的轨道,在这里

2020-06-17