3
votes

AWS: ajouter un deuxième équilibreur de charge interne à Elastic Beanstalk dans Terraform

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:

https://aws.amazon.com/it/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/

Existe-t-il une autre solution plus intelligente?


0 commentaires

3 Réponses :


0
votes

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.


0 commentaires

2
votes

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:

  • définissez l'équilibreur de charge en tant que type de réseau. C'est le seul type qui vous permettra d'avoir des adresses IP statiques dans l'équilibreur de charge.
  • définissez l'équilibreur de charge comme étant interne (à l'intérieur de la configuration réseau de beanstalk, définissez la visibilité sur interne et décochez "attribuer une adresse IP publique aux instances EC2 ..."
  • attribuez des adresses IP Elastic à votre équilibreur de charge, au moins 2, dans différentes zones de disponibilité.
  • le reste de votre Beanstalk reste tel que vous l'avez.

Créez maintenant un équilibreur de charge public:

  • Cela peut être de n'importe quel type dont vous avez besoin. Peut-être ALB si vous voulez faire une terminaison SSL ou toute autre magie de la couche 7. De plus, il doit être public
  • créer un nouveau groupe cible. Le type de cible de ce groupe doit être IP.
  • Enregistrez les 2 adresses IP élastiques de votre équilibreur de charge réseau ci-dessus.
  • Ajoutez un auditeur à votre ALB pointant vers ce groupe cible

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.


0 commentaires

0
votes

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


0 commentaires