web-dev-qa-db-fra.com

Liaison de conteneurs entre les définitions de tâches dans AWS ECS?

J'essaie de configurer une application Web de base, avec une base de données associée, dans AWS ECS. Localement, ces configurations sont définies dans des conteneurs différents. Sur ECS, j'aimerais définir des définitions de tâches distinctes afin de pouvoir les redimensionner séparément.

  1. J'ai enregistré ma première définition de tâche comme david_mongodb avec succès dans ECS. Il a un conteneur nommé david_mongodb dedans.
  2. J'ai ensuite essayé d'enregistrer ma deuxième définition de tâche sous le nom david_web, qui a un conteneur nommé david_web qui relie la base de données via david_mongodb:db.
  3. Lorsque je clique sur "Créer", cela renvoie une erreur:

    Unable to create Task Definition
    Linked container 'david_mongodb:db' doesn't exist.
    

Il semble que les définitions de tâches ne peuvent pas voir les noms de conteneurs dans d'autres définitions de tâches? Je pense mettre les deux david_web et david_mongodb les conteneurs dans la même définition de tâche fonctionneraient, mais ce n'est pas ce que je veux faire: cela m'empêcherait de mettre à l'échelle séparément une application Web ou une base de données. Cet aperç semble confirmer que mon architecture est recommandée ...

Alors, comment puis-je lier des conteneurs qui vivent dans différentes définitions de tâches? Ou y a-t-il une autre façon intelligente de gérer cela?

48
David Elner

Les liens dans une définition de tâche ECS sont analogues à liens Docker et ne fonctionnent que lorsque les conteneurs font partie de la même définition de tâche (les conteneurs faisant partie d'une définition de tâche unique sont placés ensemble sur le même hôte). Afin de communiquer entre les conteneurs dans différentes définitions de tâches, vous aurez besoin d'un mécanisme permettant de découvrir où se trouvent les conteneurs (quel hôte) ainsi que le port de communication.

ECS intègre l'intégration avec Elastic Load Balancing (équilibreurs de charge d'application, équilibreurs de charge réseau et équilibreurs de charge classiques) via la fonction service , dans laquelle les tâches sont automatiquement enregistrées dans l'ELB et désenregistrées de manière appropriée dans l'ELB.

ECS a également une intégration avec Route 53 Auto Naming pour la découverte de services basée sur DNS utilisant les enregistrements A et SRV. Les tâches de votre service peuvent être automatiquement entrées et supprimées des enregistrements DNS.

Service Discovery pour Amazon ECS à l'aide de DNS décrit une approche différente dans laquelle une fonction Lambda écoute le flux d'événements ECS via CloudWatch Events et met à jour les enregistrements DNS de Route 53. Cette méthode a été remplacée par la fonction de dénomination automatique Route 53 décrite ci-dessus.

Si vous voulez éviter les équilibreurs de charge et le DNS, un autre modèle peut être un conteneur ambassador (il existe un exemple appelé ecs-task-kite qui utilise l'API ECS) ou vous pourrait être intéressé par un réseau de superposition (Weave a un assez détaillé guide de démarrage pour sa solution).

Nathan Peck suit un certain nombre de sujets liés à ECS, notamment la découverte de services, ici .

68
Samuel Karp