Déployer une application Spring Boot sur AWS Beanstalk

1. Vue d'ensemble

Dans ce tutoriel, nous montrerons comment déployer une application à partir de notre Bootstrap a Simple Application à l'aide du tutoriel Spring Boot sur AWS Elastic Beanstalk.

Dans ce cadre, nous:

  • Installer et configurer les outils de l'AWS CLI
  • Créer un projet Beanstalk et un déploiement MySQL
  • Configurer l'application pour MySQL dans AWS RDS
  • Déployer, tester et mettre à l'échelle l'application

2. Configuration AWS Elastic Beanstalk

Au préalable, nous aurions dû nous enregistrer sur AWS et créer un environnement Java 8 sur Elastic Beanstalk. Nous devons également installer l'AWS CLI qui nous permettra de nous connecter à notre environnement.

Donc, étant donné cela, nous devons nous connecter et initialiser notre application:

cd .../spring-boot-bootstrap eb init 
> Select a default region 1) us-east-1 : US East (N. Virginia) 2) us-west-1 : US West (N. California) 3) us-west-2 : US West (Oregon) 4) eu-west-1 : EU (Ireland) 5) eu-central-1 : EU (Frankfurt) 6) ap-south-1 : Asia Pacific (Mumbai) 7) ap-southeast-1 : Asia Pacific (Singapore) 8) ap-southeast-2 : Asia Pacific (Sydney) 9) ap-northeast-1 : Asia Pacific (Tokyo) 10) ap-northeast-2 : Asia Pacific (Seoul) 11) sa-east-1 : South America (Sao Paulo) 12) cn-north-1 : China (Beijing) 13) cn-northwest-1 : China (Ningxia) 14) us-east-2 : US East (Ohio) 15) ca-central-1 : Canada (Central) 16) eu-west-2 : EU (London) 17) eu-west-3 : EU (Paris) 18) eu-north-1 : EU (Stockholm) (default is 3):

Comme indiqué ci-dessus, nous sommes invités à sélectionner une région.

Enfin, nous pouvons sélectionner l'application:

> Select an application to use 1) baeldung-demo 2) [ Create new Application ] (default is 2): 

À ce stade , la CLI créera un fichier nommé .elasticbeanstalk / config.yml . Ce fichier conservera les valeurs par défaut du projet.

3. Base de données

Maintenant, nous pouvons créer la base de données sur l'AWS Web Console ou avec la CLI en utilisant:

eb create --single --database

Nous devrons suivre les instructions pour fournir un nom d'utilisateur et un mot de passe.

Une fois notre base de données créée, configurons maintenant les informations d'identification RDS pour notre application. Nous le ferons dans un profil Spring nommé beanstalk en créant src / main / resources / application-beanstalk.properties dans notre application:

spring.datasource.url=jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name} spring.datasource.username=${rds.username} spring.datasource.password=${rds.password} 

Spring recherchera la propriété nommée rds.hostname en tant que variable d'environnement appelée RDS_HOSTNAME . La même logique s'appliquera au reste.

4. Application

Maintenant, nous allons ajouter un Beanstalk - profil Maven de spécifique à pom.xml :

 beanstalk  ${project.name}-eb   org.springframework.boot spring-boot-maven-plugin   org.apache.maven.plugins maven-compiler-plugin   **/cloud/config/*.java      

Ensuite, nous spécifierons l'artefact dans le fichier de configuration Elastic Beanstalk .elasticbeanstalk / config.yml :

deploy: artifact: target/spring-boot-bootstrap-eb.jar 

Et enfin, nous allons inclure deux variables environnementales dans Elastic Beanstalk. Le premier spécifiera les profils Spring actifs, et le second assurera l'utilisation du port 5000 par défaut attendu par Beanstalk:

eb setenv SPRING_PROFILES_ACTIVE=beanstalk,mysql eb setenv SERVER_PORT=5000

5. Déploiement et tests

Nous sommes maintenant prêts à construire et déployer:

mvn clean package spring-boot:repackage eb deploy 

Ensuite, nous vérifierons l'état et déterminerons le nom DNS de l'application déployée:

eb status

Et notre sortie devrait être quelque chose comme:

Environment details for: BaeldungDemo-env Application name: baeldung-demo Region: us-east-2 Deployed Version: app-181216_154233 Environment ID: e-42mypzuc2x Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.7.7 Tier: WebServer-Standard-1.0 CNAME: BaeldungDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com Updated: 2018-12-16 13:43:22.294000+00:00 Status: Ready Health: Green

Nous pouvons maintenant tester l'application - notez l'utilisation du champ CNAME comme DNS pour compléter l'URL.

Ajoutons maintenant un livre à notre bibliothèque:

http POST //baeldungdemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com/api/books author="Iain M. Banks"

Et, si tout va bien, nous devrions obtenir quelque chose comme:

HTTP/1.1 201 Cache-Control: no-cache, no-store, max-age=0, must-revalidate Connection: keep-alive Content-Type: application/json;charset=UTF-8 Date: Wed, 19 Dec 2018 15:36:31 GMT Expires: 0 Pragma: no-cache Server: nginx/1.12.1 Transfer-Encoding: chunked X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block { "author": "Iain M. Banks", "id": 5, "title": "The Player of Games" }

6. Mise à l'échelle de l'application

Enfin, nous adaptons le déploiement pour exécuter deux instances:

eb scale 2

Beanstalk exécutera désormais 2 instances de l'application et équilibrera le trafic sur les deux instances.

La mise à l'échelle automatique pour la production est un peu plus complexe, nous allons donc laisser cela pour un autre jour.

7. Conclusion

Dans ce tutoriel, nous:

  • Installation et configuration de l'interface de ligne de commande AWS Beanstalk et configuration d'un environnement en ligne
  • Déploiement d'un service MySQL et configuration des propriétés de connexion à la base de données
  • Construit et déployé notre application Spring Boot configurée, et
  • Testé et mis à l'échelle l'application

Pour plus de détails, consultez la documentation Beanstalk Java.

Comme toujours, le code source complet de nos exemples est ici, sur GitHub.