Est-il possible de manipuler le groupe d'autoscaling et le groupe cible de Beanstalk dans terraform en ajoutant un équilibreur de charge (interne) supplémentaire? Si oui, comment?
Je souhaite avoir 2 équilibreurs de charge, l'un interne et l'autre public. J'ai trouvé cette solution de contournement d'AWS:
Existe-t-il une autre solution plus intelligente?
3 Réponses :
Vous ne pouvez associer un groupe cible qu'à un seul équilibreur de charge. Une fois que vous avez associé un groupe cible à un équilibreur de charge, ce groupe cible ne pourra plus être associé à un autre ALB.
Vous pouvez éventuellement trouver un moyen de contourner l'utilisation de différentes approches telles que les règles de port et de groupe de sécurité, ou créer un deuxième groupe cible.
Rien de tout cela n'est ce pour quoi Elastic beanstalk est conçu. C'est simplement un moyen facile pour les développeurs de pousser le code et de rester à l'écart de l'infrastructure sous-jacente. Lorsque le niveau de complexité augmente, il est temps de s'éloigner de EB.
Je pense que cela peut être parfaitement réalisé, mais il faut un petit changement d'approche.
Vous n'aurez pas 2 équilibreurs de charge à l'intérieur d'EB, mais à la place, votre beanstalk décrira l'infrastructure commençant dans le deuxième équilibreur de charge, défini comme interne, puis vous ajouterez un autre équilibreur de charge public qui pointe vers la charge BE balancier.
Nous pouvons y parvenir d'une manière beaucoup plus simple que celle proposée dans le blog AWS.
Pour cela, votre configuration BE sera à peu près la même que vous, mais:
Créez maintenant un équilibreur de charge public:
et cela fera la magie. Vous devrez vérifier comment faire cela dans terraform, mais l'approche est assez simple, donc je suis sûr que terraform vous permettra de le faire.
L'avantage de ceci par rapport au blog AWS (qui est conçu dans un but très différent), c'est qu'ici, l'équilibreur de charge interne est réseau, alors que l'externe n'a pas besoin de l'être. Le NLB étant interne, vous évitez beaucoup de surcharge dans l'infrastructure et évitez également la logique dynamique comme le lambda qu'ils proposent pour enregistrer les adresses IP. Avec cette approche, vous obtenez une architecture beaucoup plus déclarative, plus facile à décrire en terraform et plus facile à maintenir une fois en production.
vous pouvez étendre ses TargetGroupARNs
à partir d'EB sur vos paramètres d'options,
en utilisant la syntaxe cloudformation :
- Namespace: aws:cloudformation:template:resource:property ResourceName: AWSEBAutoScalingGroup OptionName: TargetGroupARNs Value: [{\"Ref\":\"AWSEBV2LoadBalancerTargetGroup\"},"ARN_FROM_A_EXTERNAL_TARGETGROUP_LINKING_TO_ANOTHER_LOADBALANCER"}]
et, oui, je viens de trouver une référence à aws: cloudformation: template: resource: property ici , il n'y a aucune documentation du tout