web-dev-qa-db-fra.com

Terraform: déploiement d'une application Docker Compose sur EKS / ECS

TL; DR

J'utilise une application serveur open-source fonctionnant sur Docker Compose . Il a quelques services, y compris PostgreSQL DB et Redis.

Comment puis-je déployer au mieux cette application sur AWS en IaC complet avec Terraform?


Solutions à ce jour

1. AWS ecs-cli

ecs-cli maintenant prend en charge envoi docker compose configs dans Amazon ECS.

Cependant, je ne pense pas que cela puisse être intégré au flux de travail Terraform (ce qui n'est peut-être pas un gros problème). Ce que je sais avec certitude, c'est que ecs-cli n'est pas pris en charge dans CloudFormation , selon ce problème , toujours ouvert pour le moment. Je suppose donc qu'il ne peut pas non plus être facilement ajouté à Terraform.

2. La méthode EKS dure

  • Prends ton docker-compose.yml, traduisez-le en kubectl YAML.
  • (Préparez-vous à le faire à chaque mise à jour du package).
  • Déployez à l'aide des API + EKS de Terraform (minimum exemple ).

Mais ce n'est pas encore entièrement IaC. Et vous devez retraduire votre configuration à chaque fois que le docker-compose change dans le référentiel source. Et cela ressemble à beaucoup de travail.

3. Utilisation d'un graphique Helm

  • Rédigez un graphique Helm pour l'application.
  • Exécutez Terraform pour démarrer un cluster.
  • Exécutez toujours Terraform avec un helmfournisseur pour installer l'application avec Helm sur le cluster.

4. [Pas OK] k8s Kompose

J'ai lu Kompose peut traduire automatiquement une configuration Docker Compose en configuration k8s, mais ils ne semblent pas être portés sur AWS, sans parler de Terraform.

5. [Not OK] La solution AMI sale

  • Créez une AMI EC2 personnalisée avec Packer.
  • À l'aide de Terraform, configurez la base de données, Redis et toutes les autorisations/réseau/etc.
  • Démarrez une instance EC2 avec l'AMI personnalisée.
  • L'AMI contient un code d'application (personnalisé), en particulier le docker-compose.yml. Et les images Docker.
  • L'AMI démarre un service Docker Compose systemctl.

Cela ferait mal: longues constructions, surveillance difficile, pas de mise à l'échelle.

Notes d'accompagnement

  • J'ai mentionné que j'avais besoin de IaC complet . Ce que je veux dire par là, c'est:
    1. La configuration écrite (et elle uniquement) sur master vous indique ce qui est déployé.
    2. Le déploiement se terminera sans que mon équipe ait à exécuter une autre commande. Cela fonctionne essentiellement soit sur CI/CD, soit sur un seul Push'n'go.
    3. La surveillance et les alertes sont facilement configurées dans l'IaC.
  • Je souhaite remplacer certains services par des composants AWS (à savoir, le service PostgreSQL par un RDS, et le service Redis par un ElastiCache).
  • L'application arrive être Apache Superset . Cependant, je me demande également quelle est la meilleure approche générale à ce problème de Docker Compose.
5
Pinimo

1. Attendez et voyez

Qui sait, ecs-cli-v2 pourrait être mieux intégré avec CloudFormation et/ou Terraform.

2. Utilisez un tableau Helm

Comme mentionné dans la question. Probablement la meilleure solution, bien que nécessitant un (petit) effort pour paramétrer Helm.

Voir aussi: Premiers pas avec Helm .

3. Docker Swarm + CloudFormation + Terraform

Docker Swarm maintenant accepte entrées d'un docker-compose.yml fichier. Le modèle peut être trouvé et configuré ici . Une fois configuré, il peut être intégré à une infrastructure Terraform.

Ce (3 ans) tutoriel explique comment utiliser le mode Docker Swarm sur AWS.

Pour lancer le conteneur, si nécessaire (pas complètement étudié, les commentaires sont les bienvenus), vous pouvez utiliser Terraform's local-exec . De cette façon, vous pouvez SSH dans le nœud maître et exécuter docker stack deploy et d'autres commandes similaires, tout en étant toujours écrites dans le style IaC.

2
Pinimo