Я занимаюсь переносом некоторых рабочих нагрузок на Amazon ECS Container Service и обнаружил блокировщик, который мешает мне двигаться дальше.
В идеале контейнерные приложения, работающие на ECS, не должны иметь состояния, чтобы они могли работать в любом экземпляре кластера и масштабироваться. Но на самом деле у меня есть некоторые приложения, которые зависят от объемов данных EBS. Насколько мне известно, эти тома необходимо вручную прикрепить к конкретному экземпляру кластера, и приложения ECS должны быть размещены в этом экземпляре, чтобы иметь доступ к его данным, поэтому мне нужно каким-то образом контролировать, где они в конечном итоге работают.
В качестве примера предположим, что у нас есть кластер из 3 инстансов EC2, которым управляет Amazon ECS.
- instance1
- instance2
- instance3
Затем у нас есть 2 контейнерных приложения:
- app1 без гражданства
- app2, который зависит от тома EBS.
app1 может работать в любом экземпляре кластера, без проблем.
Предположим, что для приложения 2 мы подключили и смонтируем том EBS в instance2.
Теперь возникает вопрос: могу ли я установить ограничение при определении или запуске app2, чтобы оно было размещено только в instance2, чтобы оно могло иметь доступ к тому EBS?
Большое спасибо заранее!
ИЗМЕНЕНО:
Я читал немного дальше и нашел способ сделать это в документации Amazon. В документе есть примечание «Использование объемов данных в задачах », В котором говорится:
Важно
Amazon ECS не синхронизирует объемы данных между экземплярами контейнеров. Задачи, использующие постоянные тома данных, могут быть размещены в любом экземпляре контейнера в вашем кластере, имеющем доступную емкость. Если для ваших задач требуются постоянные тома данных после остановки и перезапуска, вы всегда должны указывать один и тот же экземпляр контейнера во время запуска задачи с помощью команды запуска задачи AWS CLI.
Итак, глядя на команду start-task в интерфейсе командной строки я обнаружил, что это именно то, что я искал:
стартовая задача
Запускает новую задачу из указанного определения задачи в указанном экземпляре или экземплярах контейнера. Чтобы использовать планировщик Amazon ECS по умолчанию для размещения задачи, используйте вместо этого run-task.
У него есть два обязательных параметра: определение задачи, которое вы хотите запустить, и идентификаторы экземпляра контейнера (до 10), на которых задача должна запускаться.
Таким образом, вызов команды будет выглядеть примерно так:
aws ecs start-task --task-definition “hello-world:1” --container-instances “1c66549d-b41c-4439-dd43-c2e1c9a2cc2a”
Я попробовал, и он отлично сработал.
В настоящее время это выглядит как единственный способ сделать это, поскольку веб-интерфейс AWS не предоставляет поле для указания экземпляров контейнера при запуске задачи.
Надеюсь, это может быть кому-нибудь полезно.