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

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

  1. 我在ECS中成功地将我的第一个任务定义注册为david_mongodb 。 它有一个名为david_mongodb的容器。
  2. 然后我试图把我的第二个任务定义注册为david_web ,它有一个名为david_web的容器,通过david_mongodb:db链接数据库。
  3. 当我点击“创build”时,它会返回一个错误:

     Unable to create Task Definition Linked container 'david_mongodb:db' doesn't exist. 

似乎任务定义不能在其他任务定义中看到容器名称? 我在想,把david_webdavid_mongodb容器放在同一个任务定义中也是可以的,但是我不想这样做:它会阻止我单独扩展Web应用程序或数据库。 这个概述似乎证实我的build筑是被推荐的…

那么如何链接生活在不同任务定义中的容器呢? 还是有另一个巧妙的方式来处理这个?

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

ECS通过服务function与ELB集成,任务将自动在ELB中注册,并在ELB中正确注销。 如果你想避免ELB,另一种模式可能是一个大使容器 (有一个示例称为使用ECS API的ecs-task-kite ),或者你可能对覆盖networking感兴趣(Weave有一个相当详细的入门指南他们的解决scheme)

使用DNS的Amazon ECS的服务发现描述了一种不同的方法,其中Lambda函数通过CloudWatch Events侦听ECS事件stream并更新Route 53 DNSlogging。

Nathan Peck正在跟踪许多与ECS相关的不同主题,包括服务发现。