2015-12-29 4 views
37

Я пытаюсь настроить базовое веб-приложение, имеющее связанную с ним базу данных, в AWS ECS. Локально у меня эти настройки в разных контейнерах, и в ECS я хотел бы иметь отдельные определения задач, чтобы я мог масштабировать два отдельно.Связывание контейнеров между определениями задач в AWS 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_web и david_mongodb в том же определении задачи будет работать, но я не хочу этого делать: это помешало бы мне масштабировать либо веб-приложение, либо базу данных отдельно. This overview, похоже, подтверждает, что моя архитектура рекомендуется ...

Как я могу связать контейнеры, которые живут в разных определениях задач? Или есть другой умный способ справиться с этим?

+0

[Amazon ECS теперь поддерживает сетевые режимы и резервирование памяти] (https://forums.aws.amazon.com/ann.jspa?annID=3980). Нет необходимости делать межсетевые сети с использованием ELB – RajDev

+1

Существует нет связи между вопросом и этим ответом, контроль над сетевыми режимами напрямую не связан с привязкой задач, выполняемых в разных контейнерах. –

+0

Я не верю, что сетевой режим решает это. Вам все равно нужно будет узнать, какой узел (и IP), в котором находится задача. – CashIsClay

ответ

51

Ссылки в определении задачи ECS аналогичны Docker links и работают только тогда, когда контейнеры являются частью одного и того же определения задачи (контейнеры, которые являются частью определения одной задачи, размещаются вместе на одном и том же хосте). Чтобы общаться между контейнерами в разных определениях задач, вам понадобится механизм обнаружения местонахождения контейнеров (какой хост), а также порт для связи.

ECS имеет интеграцию с ELB через функцию service, где задачи будут автоматически регистрироваться в ELB и отменяться в ELB соответствующим образом. Если вы хотите избежать ELB, другой шаблон может быть ambassador container (есть образец, который называется ecs-task-kite, который использует ECS API), или вас может заинтересовать сеть наложения (Weave имеет довольно подробный getting started guide для своего решения).

Service Discovery for Amazon ECS Using DNS описывает другой подход, при котором функция Lambda прослушивает поток событий ECS через события CloudWatch и обновляет записи DNS в маршруте 53.

Nathan Peck отслеживает ряд различных предметов, связанных с ECS, включая обнаружение услуг, here.

+0

Полезно знать. Есть ли предписанный механизм для этой коммуникации? DNS + ELB приходит на ум, но есть ли решение, которое не требует ELB? –

+1

Я обновил свой ответ с более подробной информацией о возможных подходах (ELB, контейнеры посла и сети наложения). –

+0

Огромные ресурсы, спасибо! –