TL; DR
Я использую серверное приложение с открытым исходным кодом , работающее на Docker Compose . Имеет несколько сервисов, включая PostgreSQL DB и Redis.
Как лучше всего развернуть это приложение на AWS в полном объеме Ia C с Terraform?
Решения на данный момент
1. AWS ecs-cli
ecs-cli
сейчас поддерживает отправку docker compose
конфигов в Amazon ECS.
Однако я не думаю, он может быть интегрирован с рабочим процессом Terraform (что, возможно, не является большой суетой). Что я точно знаю, так это то, что ecs-cli
не поддерживается в CloudFormation , поскольку эта проблема все еще открыта в настоящее время. Поэтому я предполагаю, что его нельзя легко добавить в Terraform.
2. Трудный путь EKS
- Возьмите файл
docker-compose.yml
, переведите его в kubectl
YAML. - (будьте готовы к этому при каждом обновлении пакета).
- Развертывание с использованием Terraform + EKS API (минимум пример ).
Но это еще не полностью Ia C. И вам приходится каждый раз повторять перевод вашей конфигурации каждый раз, когда docker -составляет изменения в исходном репозитории. И это звучит как большая работа.
3. Использование диаграммы Хелма
- Написать диаграмму Хелма для приложения.
- Запустить Terraform, чтобы запустить кластер.
- Все еще запустить Terraform с
helm
Поставщик для установки приложения с Helm в кластере.
4. [Не в порядке] k8s Kompose
Я прочитал Kompose может автоматически преобразовать конфигурацию Docker Compose в конфигурацию k8s, но они не отображаются в AWS, а не говорить о Terraform.
5. [Не в порядке] Грязное решение AMI
- Сборка пользовательского AMI EC2 с пакером.
- Используя Terraform, настройте БД, Redis и все разрешения / network / et c .
- Запустите экземпляр EC2 с пользовательским AMI.
- AMI содержит (настроенный) код приложения, особенно
docker-compose.yml
. И Docker images. - AMI запускает сервис Docker Compose
systemctl
.
Это было бы как-то больно: длинные сборки, сложный мониторинг, отсутствие масштабирования.
Дополнительные примечания
- Я упоминал, что мне нужно полный Ia C. Под этим я подразумеваю:
- Записанный конфиг (и только он) на
master
сообщает вам, что развернуто. - Развертывание будет завершено без необходимости выполнения какой-либо другой командой моей команды , Он в основном работает как на CI / CD, так и на одиночных пу sh 'n' go.
- Мониторинг и оповещение легко настраиваются в Ia C.
- Я хочу sh заменить некоторые сервисы компонентами AWS (а именно сервис PostgreSQL на RDS и сервис Redis с ElastiCache).
- Приложение бывает , чтобы быть Apache Superset . Однако мне также интересно, что считается лучшим общим подходом к этой проблеме Docker Compose.