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

时间:2015-12-29 18:57:51

标签: amazon-web-services docker amazon-ecs

我正在尝试在AWS ECS中设置一个基本的Web应用程序,该应用程序具有关联的数据库。在本地我将这些设置放在不同的容器中,在ECS上,我希望有单独的任务定义,以便我可以单独扩展它们。

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

    Unable to create Task Definition
    Linked container 'david_mongodb:db' doesn't exist.
    
  4. 似乎任务定义无法在其他任务定义中看到容器名称?我想将david_webdavid_mongodb容器放在同一个任务定义中会起作用,但我不想这样做:它会阻止我单独扩展Web应用程序或数据库。 This overview似乎确认我的架构是推荐的......

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

1 个答案:

答案 0 :(得分:64)

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

ECS通过service功能与Elastic Load Balancing(应用程序负载均衡器,网络负载均衡器和经典负载均衡器)集成,其中任务将自动在ELB中注册并在ELB中适当注销。 / p>

ECS还与Route 53 Auto Naming集成,使用ASRV记录进行基于DNS的服务发现。您的服务任务可以自动输入和删除DNS记录。

Service Discovery for Amazon ECS Using DNS描述了一种不同的方法,其中Lambda函数通过CloudWatch Events侦听ECS事件流并更新Route 53 DNS记录。此方法已被Route 53 Auto Naming取代上述特征。

如果您想避免使用负载均衡器和DNS,另一种模式可能是ambassador container(有一个名为ecs-task-kite的样本使用ECS API),或者您可能对覆盖网络(Weave对其解决方案有一个相当详细的getting started guide

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