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.
david_mongodb
avec succès dans ECS. Il a un conteneur nommé david_mongodb
dedans.david_web
, qui a un conteneur nommé david_web
qui relie la base de données via david_mongodb:db
.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?
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 .