Назад | Перейти на главную страницу

Работа в одном контейнере на AWS

Мы хотели бы запускать отдельные задачи контейнера Docker с учетом версий и журналов, но нерегламентированным способом на AWS. Каждая задача контейнера требует значительного количества виртуальных ЦП и ОЗУ (возможно, 16 виртуальных ЦП и 64 ГБ ОЗУ).

Я вижу несколько сервисов, которые могут помочь с этим, но ни одна из них не подходит идеально;

  1. CloudFormation + EC2: Запускать, настраивать и выполнять контейнеры в экземплярах (и VPC и т. Д.)
  2. Партия (отлично, но нам не нужны параллельные контейнеры)
  3. Фаргейт (отлично, но ограничено 4 виртуальными ЦП и 30 ГБ ОЗУ)
  4. Эластичный (среда с одним контейнером) задача не является веб-приложением, поэтому балансировщики нагрузки и т. д. не требуются.

Может ли кто-нибудь предложить какой-либо опыт работы с подобными рабочими нагрузками? Есть ли какие-то очевидные услуги, которые я пропустил?

Использовать CloudFormation создать стек последовательным, воспроизводимым способом каждый раз, когда вам нужно его запускать. Шаблон CloudFormation создаст:

  • Кластер ECS
  • Экземпляр EC2 для присоединения к кластеру ECS (либо отдельный экземпляр, либо группа с автоматическим масштабированием)
  • Определение задачи ECS URL-адрес контейнера может быть параметром для шаблона
  • Любые вспомогательные ресурсы - Роль IAM, Группа безопасности, и т.д.

Затем вы можете иметь простой сценарий оболочки или ansible playbook который создаст стек из шаблона CloudFormation и запустит выполнение задачи. Затем дождитесь его завершения и срывать снова в стек, чтобы не платить за простаивающие ресурсы. При желании, если вам нужно запустить задачу, например каждое утро вы можете использовать Правило событий CloudWatch периодически запускать его.

Если запускаемый контейнер необходимо время от времени перестраивать из исходного кода, вы также можете настроить CI / CD конвейер с помощью CodePipeline, CodeBuildи т. д., которые будут последовательно перестраивать ваш контейнер каждый раз, когда вы вносите изменения в код.

Надеюсь, это поможет :)

Попробуйте terraform + ecs. Просто и легко