AXOPEN

Spring Boot et Elastic Beanstalk

Amazon Web Services (AWS) propose une large gamme de services et parmi eux, un bon nombre de servies d’hébergement intéressants. Aujourd’hui, nous allons vous parler de l’un d’entre eux : le service d’hébergement Elastic Beanstalk.

Elastic Beanstalk, c’est quoi ? 

Elastic Beanstalk permet de réaliser très simplement un hébergement dans des « conteneurs ». Il permet de lancer directement votre JAR dans un conteneur et de le dupliquer à chaud, en fonction de votre politique de répartition de charges.

En résumé, Elastic Beanstalk réalise l’intégralité du paramétrage de votre application. Et ça c’est génial ! Vous pouvez donc vous concentrer uniquement sur votre code source puisque l’hébergement ne demande aucun effort et aucune commande complexe à exécuter ! 

Créer sa petite API avec Spring Boot

Pour commencer dans les règles de l’art, il nous faut une petite application API Rest avec Spring Boot ! Rien de plus simple, il suffit de suivre n’importe quel tutoriel sur internet pour ça 🙂 Une fois que vous avez votre application, il va falloir compiler le JAR pour qu’il soit exécutable.

Je vous donne un exemple de build.gradle, car perso j’ai un peu galéré mais c’est surtout pour la partie DynamoDB (mais bon, c’est pas le sujet de ce post).

buildscript {
	ext {
		springBootVersion = '2.0.4.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.votre_app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}

ext {
	springCloudVersion = 'Finchley.SR1'
}

dependencies {
	compile('org.springframework.boot:spring-boot-starter-jersey')
	compile("org.springframework.boot:spring-boot-starter-web")
	compile('io.springfox:springfox-swagger2:2.7.0')
	compile('com.amazonaws:aws-java-sdk-dynamodb')
	compile('org.springframework.boot:spring-boot-starter-mail')
	compile('org.apache.poi:poi')
	compile('org.apache.poi:poi-ooxml:3.9')
	compile('org.apache.commons:commons-text:1.4')
	compile('com.github.derjust:spring-data-dynamodb:5.0.3')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	testCompile('org.springframework.restdocs:spring-restdocs-mockmvc')
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

Une fois que vous avez construit votre Jar Bootable (gradle bootJar), vous avez donc un .jar disponible.
L’heure du premier test a sonné ! Essayez maintenant de le lancer avec java -jar pour vous assurer que celui-ci fonctionne correctement. Si c’est le cas, vous pouvez passer à Elastic Beanstalk. 

Créer son hébergement avec Elastic Beanstalk

Se connecter avec AWS

Connectez-vous maintenant avec votre compte AWS. Une fois connecté à la console, rendez-vous dans le service Elastic Beanstalk, puis créez votre application.

Comprendre les termes

L’application est le nom général de votre service. Une fois celle-ci créée, vous allez créer des environnements. Par exemple, votre environnement de développement, de recette et de production. Chacun des environnements aura sa propre configuration. Par exemple, vous pouvez décider d’avoir un environnement avec une seule machine, ou un super environnement avec des dizaines de nœuds.

Créer son environnement

Pour Spring Boot, voici comment créer son environnement :
– Pour le domaine : choisissez ce que vous voulez! 
– Le DNS : vous ne pouvez pas configurer à cette étape, il faudra le faire ailleurs.
– Plateforme : choisissez bien JAVA comme plateforme et uploadez votre JAR. Avant de créer l’environnement, passons à l’option « Configurer plus d’options ». 

Création d'une application Elastic Beanstalk avec Spring Boot
Panneau de création d’un environnement
Configuration d'un environnement d'Elastic Beanstalk
Panneau de configuration de l’environnement

Dans cet écran, vous avez la possibilité de choisir le type d’instance. Par défaut, c’est des t2.micro mais c’est un peu faible… Heureusement, on peut passer sur du plus rapide 😉 . Dans la partie Logiciels, si vous souhaitez faire en sorte que votre application qui écoute sur le 8080 soit directement accessible depuis le port 80, rajoutez une variable d’environnement PORT avec la valeur 80. C’est beaucoup, plus rapide que de devoir s’ennuyer avec la configuration NGINX du conteneur.

Dans l’équilibreur de charge, il est possible de configurer aussi directement le HTTPS, ce qui est bien pratique car vos conteneurs n’écoutent que en HTTP 80. Pour cela, il vous faudra mettre en place dans ACM le certificat que vous avez.

Une fois lancé, l’environnement met environ une minute à se mettre en place.

Visualisation d'un environnement de Elastic Beanstalk

En jaune sur la capture, vous avez l’URL d’appel à votre API. Si vous avez mis le HTTPS, pensez-bien à le rajouter dans l’URL.

Et le tour est joué ! 

Et voilà comment en quelques étapes, vous avez votre application directement disponible sur un conteneur tout bien configuré ! Dernière chose, il est aussi possible de faire la configuration en ligne de commande et de le sauvegarder dans son projet. De même, il est possible de déployer son app depuis son poste hyper simplement. (eb deploy) La doc de la console.

Nous verrons dans un autre article comment utiliser DynamoDB et comment utiliser API Gateway avec Spring Boot.

Quelques petits liens :

Tester son API

Expertise AWS Lyon