Prérequis
- Serveur Eureka : Un serveur Eureka fonctionnel pour gérer l'enregistrement et la découverte des services.
- Application Spring Boot : Une application intégrant le client Eureka pour s'inscrire au serveur.
- ALB : Un Application Load Balancer configuré pour diriger le trafic vers les instances de votre application Spring Boot.
Étapes de configuration
1. Configuration du client Eureka
Votre application Spring Boot doit être configurée pour se connecter au serveur Eureka via le fichier application.yml ou application.properties. Voici un exemple de configuration :
eureka:
client:
serviceUrl:
defaultZone: http://your-eureka-server-url/eureka/
instance:
preferIpAddress: true
nonSecurePortEnabled: false
securePortEnabled: true
securePort: 443
hostname: your-alb-dns-name
metadataMap:
instanceId: ${spring.application.name}:${random.value}
server:
port: 8080
2. Configuraton de l'Application Load Balancer (ALB)
Assurez-vous que votre ALB est bien configuré pour rediriger le trafic vers les instances de votre application Spring Boot. Les étapes typiques incluent :
- Création d’un groupe de cibles (target group) contenant vos instances EC2 ou conteneurs.
- Configuration d’un écouteur (listener) sur les ports HTTP (80) ou HTTPS (443).
- Définition des règles de routage pour transférer les requêtes vers le bon groupe de cibles.
3. Dépendances Spring Cloud AWS
Si vous utilisez Spring Cloud AWS, ajoutez cette dépendance dans votre projet Maven :
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws</artifactId>
</dependency>
4. Configuration de l'identifiant unique de l'instance
Pour garantir que chaque instance de service soit unique dans Eureka, configurez un identifiant d’enstance basé sur le nom de l'application et une valeur aléatoire :
eureka:
instance:
instanceId: ${spring.application.name}:${random.value}
5. Utilisation du nom DNS de l'ALB
Configurez l'hôte de l'instance Eureka pour utiliser le nom DNS de l'ALB plutôt qu'une adresse IP privée :
eureka:
instance:
hostname: your-alb-dns-name
securePort: 443
6. Exemple complet
Voici une configuration complète dans le fichier application.yml :
spring:
application:
name: your-service-name
eureka:
client:
serviceUrl:
defaultZone: http://your-eureka-server-url/eureka/
instance:
preferIpAddress: true
nonSecurePortEnabled: false
securePortEnabled: true
securePort: 443
hostname: your-alb-dns-name
metadataMap:
instanceId: ${spring.application.name}:${random.value}
server:
port: 8080
Résumé
Ces configurations permettent à vos instences Spring Boot de s’enregistrer correctement auprès d’Eureka et de recevoir le trafic via l’ALB AWS. L'utilisation du nom DNS de l’ALB comme nom d’hôte et la génération d’un ID d’instance unique sont essentielles pour assurer une découverte fiable et une scalabilité dynamique des services.