Déployer une application Grails sur AWS Elastic Beanstalk

publié le

Guide complet sur la procédure de configuration et de déploiement d’une application Grails sur Amazon Web Services Elastic Beanstalk.

Elastic Beanstalk

Elastic Beanstalk est la solution de AWS platform-as-a-service. Elle est basée sur Amazon Elastic Cloud Compute (Amazon EC2), Amazon Simple Storage Service (Amazon S3), Amazon Simple Notification Service (Amazon SNS), Elastic Load Balancing, and Auto Scaling.

L'avantage par rapport à d'autre solution platform-as-a-service est que vous gardez le control de votre instance en y accédant par SSH si vous avez un besoin spécifique pour un projet. Il est intéressant de noter que ce service est gratuit, vous payez uniquement pour l'utilisation des ressources d'AWS (cela peut même être gratuit la première année si vous restez en dessous du quota d'utilisation gratuite).

La pile applicative pour déployer une application Grails est une pile classique est prouvé composé d'Apache de Tomcat et d'Amazon Linux (32 or 64).

Commencer avec AWS

Créez un compte ou connectez vous à votre console d'Amazon https://console.aws.amazon.com/.

Ouvrez la console Elastic Beanstalk:


Si c'est la premièere fois que vous lancez la console, vous verrez apparaitre un assistant pour vous aider à démarrer. Atention avant d'aller plus loin, choisissez la région sur lequel vous désirez avoir votre instance Amazon EC2:

  • US East (N. Virginia)
  • US West (Oregon)
  • US West (N. California)
  • EU (Ireland)
  • Asia Pacific (Singapore)
  • Asia Pacific (Tokyo)
  • Asia Pacific (Sydney)
  • South America (São Paulo)


Pour déployer une application Grails choisissez:

  1. Tomcat
  2. 7 on 32bit Amazon
  3. Single Instance

Cliquez sur Get started, vous serez ensuite rediriger vers la page principal d'Elastic Beanstalk:


Configurez votre instance Amazon EC2:

Maintenant choisissez le montant de RAM à allouer à votre application. Si vous voulez rester en dessous du quota d'utilisation gratuit qui est de 613 mb de RAM (http://aws.amazon.com/free/). Une application Grails (tout dépendant de sa taille et du nombre d'utisateurs) fonctionne très bien avec 512mb de RAM, donc vous pouvez configurer comme suit:

  1. Initial JVM heap size: 512m
  2. Maximum JVM heap size: 512m
  3. Maximum JVM permanent generation size: 128m

Comme dans cet exemple:


Maintenant que votre instance est prête, nous allons maitenant passer à l'étape suivante qui est de configurer une instance d'Amazon RDS pour héberger une base de donées MySQL.

Configurer une instance d'Amazon RDS

Dans l'écran de configuration, rendez-vous dans la section Data layer et cliquez sur create a new RDS instance.

Ensuite remplissez le formulaire:

  1. Snapshot : none
  2. DB Engine : mysql
  3. Instance Class: db.t1.micro (if you want to stay in the free tier)
  4. Allocated Storage: 5 to 20 Gb (if you want to stay in the free tier)
  5. Deletion Policy: create Snapshot (each time you will shut down the RDS instance the data will be backup in your Amazon S3 bucket. This is useful otherwise all data in the DB will be lost).
  6. Availability: Single Availability


Écrivez ces informations qui seront utile pour la suite:

  1. Username
  2. Password
  3. Endpoint name
  4. Port number

Maintenant que l'instance RDS est configurée et lancée, l'instance EC2 ou l'application Grails va être lancée doit avoir les droits d'accès à l'instance RDS. Elastic beanstalk a automatiquement ajouté un nouveau DB security group. Si vous voulez voir cette régle, retournez à la console principal et cliquez sur RDS Managed Relational Database Service:


Ensuite naviguer vers Security Groups:

Vous devriez voir que Elastic Beanstalk a ajouté un nouveau groupe de sécurité avec la description suivante “Enable database access to Beanstalk application”.


Prépration de l'application Grails pour le déployement

Il est maintenant temps de préparer notre application Grails pour la promotion, editez le fichier Config.groovy, trouvez la variable grails.serverURL sous environments:

environments {
    production {
        grails.logging.jul.usebridge = false
        grails.serverURL = "http://{environment_ name}.elasticbeanstalk.com"
    }
}

Remplacer {environment_name} par votre url EC2 que vous pouvez trouver dans la console Elastic Beanstalk. Ce n'est pas la plus belle des url du monde mais ça va faire être suffisant pour tester le tout. Quand vous serez prêt à lancer votre site, suivez les instructions sur comment lier un nom domaine à une instance AWS Elastic Beanstalk (EC2).


L'étape suivante est de configurer l'accès à l'instance RDS aka base de données MySQL que nous avons configuré précédement.

Ouvrir le fichier DataSource.groovy file et remplacer la clojure de production (sous environments) avec ce bout de code :

	production {
		dataSource {
		 username = "{user}"
		 password = "{password}"
		 pooled = true
		 dbCreate = "update"
		 driverClassName = "com.mysql.jdbc.Driver"
		 url = "jdbc:mysql://{endpoint}:{port_number}/ebdb?user={user}&password={password}"
		 dialect = org.hibernate.dialect.MySQL5InnoDBDialect
		 properties {
		  validationQuery = "SELECT 1"
		  testOnBorrow = true
		  testOnReturn = true
		  testWhileIdle = true
		  timeBetweenEvictionRunsMillis = 1800000
		  numTestsPerEvictionRun = 3
		  minEvictableIdleTimeMillis = 1800000
		  }
		}
	   }

Replace:

  1. {user} le nom d'utilisateur précédement configuré pour votre RDS.
  2. {password} le mot de passe précédement configuré pour votre RDS.
  3. {endpoint} le nom de votre RDS
  4. {port} le numéro de port de votre RDS

Maintenant que l'application Grails est configurée, nous pouvons packager celle-ci en utilisant la commande Grails:

{project_root}\ grails prod war

Déploiement sur AWS

L'étape finale est de deployer le war avec l'application Grails. Pour cela lancer la console Elastic Beanstalk et sélectionner votre le nom de votre environment sur la page suivante:


Et cliquez sur Upload and deploy:


Choisissez le fichier war que vous venez juste de générer:

{project_root}\target\project_name-0.1.war

Choisissez un label, par exemple “premier déployement” (il est important de bien choisr le nom de votre label car chaque archive war sera sauvegardée dans un bucket S3 après chaque déploiement et vous aurez la possibilité de re-déployer une ancienne version au cas ou une erreur survienne lors du déploiement.


Cliquez sur deploy.


Attendez quelques minutes jusqu'a ce que vous voyez un crochet vert.


Vous pouvez maintenant enfin tester votre application en utilisant l'url de votre EC2.


Si une erreur survient, vous aurez besoin de consulter les logs pour trouver le problème. Pour ce faire, naviguez dans la section des Logs d'Elastic beanstalk et cliquez sur Snapshot logs. Après quelques minutes, les logs de Tomcat pourront être consultés pour investigation.


Dans le même sujet, vous pourriez être intéressé de savoir comment lier un sous domaine à un bucket Amazon S3 pour stocker les données statiques de votre site web.

En espérant que ce guide vous a été utile, n'hésitez pas à laisser des commentaires si vous avez eu des difficultés ou si vous pensez qu'il manque des détails dans le processus de déploiement.

comments powered by Disqus