Accueil Nos publications Blog Se lancer avec CloudFoundry

Se lancer avec CloudFoundry

Après avoir présenté de manière générale ce qui se cache derrière le Cloud Computing, il est temps de passer aux travaux pratiques, en l’occurrence avec CloudFoundry.

Pour rappel, CloudFoundry est la solution de Cloud de VmWare qui repose sur un projet OpenSource, CloudFoundry en lui-même, et ses deux déclinaisons officielles : CloudFoundry.com qui offre un hébergement en ligne et MicroCloudFoundry qui permet de faire du Cloud sur son PC.

Pour le moment CloudFoundry supporte out-of-the-box MySQL, MongoDb, Redis, RabbitMq, Java, Ruby, Groovy, Scala et NodeJs. Il existe cependant d’hors et déjà de nombreuses extensions faites par la communauté pour offrir des services supplémentaires.

Pour cet article nous allons déployer une simple application Java se connectant à une base de données MySQL via hibernate, utilisant Struts 2 pour la vue, un peu de Spring pour englober le tout et Maven pour le build. Nous devrions ainsi avoir quelque chose d’assez proche d’une application Java “type” en entreprise à l’heure actuelle.

Getting Started

L’inscription

Nous sommes sur un service en ligne, première étape logique : créer un compte sur cloudfoundry.com.

Le service est à l’heure actuelle en Béta et rien n’a filtré sur une date de sortie de béta ni sur la future grille tarifaire. A noter également que vous devrez vous inscrire sur cloudfoundry.com même si vous ne voulez que tester microCloudFoundry, les deux étant très liés comme nous le verrons dans la suite de l’article.

Pour s’inscrire, c’est très simple : un e-mail, 200 pages de CGV à lire et un Capcha.

Quelques jours plus tard vous recevrez votre invitation avec vos informations de connexion et les différentes choses à télécharger :

  • Le client en ligne de commande : VMC.
  • MicroCloudFoundry si vous souhaitez tester en local.
  • Spring STS si vous souhaitez utiliser l’intégration de CloudFoundry dans l’IDE Spring.

Installer VMC

Vmc est donc l’outil en ligne de commande pour CloudFoundry. Il nécessite Ruby et gem en version 1.7 ou plus pour fonctionner.

Pour l’installer :


gem install vmc

Si comme moi vous êtes sous Ubuntu et que vous avez du installer gems, n’oubliez pas de le rajouter dans le PATH :



export PATH=$PATH:/var/lib/gems/1.8/bin

Vous pouvez ensuite lancer la ligne de commande suivante pour signaler à vmc que vous souhaitez utiliser cloudfoundry.com (nous verrons plus tard comment le faire se connecter à votre microCloudFoundry local) :



vmc target api.cloudfoundry.com

Puis vous authentifier avec les identifiants fournis dans l’email d’invitation :



vmc login

Profitez-en pour changer votre mot de passe :



vmc passwd

Et voilà, vous êtes prêts à déployer vos applications sur la plateforme!

Une petite vidéo en anglais de VmWare qui va de l’installation de VMC jusqu’au déploiement d’un HelloWorld en Ruby.

httpv://www.youtube.com/watch?v=dqr8xWQlRcM

Déployer sa première application

Nous avons en interne une série de tutoriels Java permettant aux débutants de ce faire la main en utilisant les technologies Java les plus utilisées  dans le monde de l’entreprise. Sont présents Struts et Hibernate mais pas encore Spring. Je suis donc reparti de cette application et ai tenté de la déployer telle quel.

Le déploiement est encore une fois très facile et se fait toujours via VMC.

Positionnez-vous dans le répertoire où se trouve vos sources (pour un projet maven, il s’agit du répertoire qui sert à la construction du War) et taper :



vmc push

Note : Vous pouvez déployer depuis un autre répertoire en ajoutant l’option –path [le chemin des sources]

CloudFoundry vous pose ensuite une série de questions pour connaître le nom de votre application, vous propose une URL par défaut et va tenter de déterminer de quel type d’application il s’agit. Dans mon cas, il ne trouve pas, je l’aide donc en lui disant qu’il s’agit d’une application JavaWeb.

On choisit la mémoire réservée à l’application et s’ils ne les a pas détecté tout seul, les services dont nous avons besoin. Dans mon cas MySQL. Il se charge alors de tout installer et configurer tout seul.

Vous pouvez maintenant tester votre application via l’url : [nom de l’application].cloudfoundry.com

Cependant, il y a un petit problème, aucune donnée n’est disponible dans l’application.

Consultons les logs voir ce qui s’est passé :


vmc logs [nom de votre application]

En l’occurrence, notre application cherche à se connecter sur la mauvaise base de données. Il va donc falloir l’adapter pour qu’elle se connecte à la bonne.

Si comme moi vous avez une application qui n’est pas basée sur Spring, la connexion à la base de données va poser problème.

Il est possible d’avoir accès directement aux propriétés des différents services via une propriété d’environnement mais il vous faudra alors parser du JSon. Je migre donc mon application sous Spring.

Pour que CloudFoundry puisse connecter votre application à la base de données, il faut que le datasource soit configuré dans Spring :


<bean id="dataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver">
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test">
<property name="username" value="spring">
<property name="password" value="spring">
</property></property></property></property></bean>

Les valeurs seront remplacées à la volée lors du déploiement de l’application sur CloudFoundry.

On met à jour notre application :


vmc update [nom de l'application]

Une fois toute la partie DAO gérée par Spring, plus de soucis, tout fonctionne bien et il se connecte bien à la base de données!

Automatiser nos déploiements via Maven

Maven est extrêmement répandu pour gérer les builds et les dépendances sur les projets Java en entreprise, il peut également faire le déploiement via certain de ses plugins. En effet, dans un système d’intégration continue, avoir un plugin Maven permettant de déployer l’application si le build est valide peut être très pratique pour mettre à jour ses environnements de tests.

En l’occurrence, CloudFoundry fourni un plugin Maven permettant de déployer ses applications automatiquement.

Première étape, le projet étant déjà sous Maven, ajouter le plugin CloudFoundry à notre build :


<plugin>
<groupid>org.cloudfoundry</groupid>
<artifactid>cf-maven-plugin</artifactid>
<version>1.0.0.M1</version>
</plugin>

A l’heure actuelle, le plugin n’est pas encore dans le repository central de Maven, il faut donc ajouter le repository Spring Milestone :


<pluginrepositories>
...
<pluginrepository>
<id>repository.springframework.maven.milestone</id>
<name>Spring Framework Maven Milestone Repository</name>
<url>https://maven.springframework.org/milestone</url>
</pluginrepository>
...
</pluginrepositories>

Il vous faut ensuite ajouter vos identifiants dans le fichier settings.xml de maven afin de pouvoir vous connecter :


<settings>
...
<servers>
...
<server>
<id>mycloudfoundry-instance</id>
<username>demo.user@vmware.com</username>
<password>s3cr3t</password>
</server>
</servers>
...
</settings>

Vous pouvez également injecter tous ces paramètres en ligne de commande :


mvn cf:info -Dcf.username=demo.user@vmware.com -Dcf.password=s3cr3t -Dcf.memory=256 -Dcf.url=hello-java-maven.cloudfoundry.com \
-Dcf.target=https://api.cloudfoundry.com

Attention, il faut que le nom de votre artifact Maven soit le même que le nom de l’application CloudFoundry (mais il peut-être différent de l’url).

Une fois, votre pom.xml complet, vous pouvez effectuer toutes les actions déjà effectuées via VMC dans maven en les préfixant de cf: :

  • mvn cf:push
  • mvn cf:update
  • mvn cf:delete
  • etc.

Voilà, vous pouvez maintenant mettre à jour votre application sur CloudFoundry sans VMC.

Déployer en local avec MicroCloudFoundry

Jusqu’à présent nous avons tout déployé sur CloudFoundry.com, nous allons maintenant passer en local via MicroCloudFoundry.

MicroCloudFoundry se présente sous la forme d’une machine virtuelle VmWare que vous pouvez lancer depuis leurs différents players (VmWare Player, VmWare workstation, VmWare Fusion). Cependant, il vous faudra un processeur 64bits pour en profiter.

Pour commencer,  il vous faut télécharger l’image virtuelle sur le site https://cloudfoundry.com/micro.

Pendant que ça télécharge vous pouvez créer votre Token DNS  via le site en choisissant un sous domaine de la forme [mon application].cloudfoundry.me :

Le site vous génère un token unique que vous devez sauvegarder. Il n’est plus possible de le retrouver plus tard mais vous pourrez le re-générer si vous le perdez.

Une fois l’image décompressée, vous pouvez la démarrer en utilisant le player VmWare correspondant à votre environnement.

Un linux se lance, et un menu vous demande ce que vous souhaitez faire.

Assez peu de choix, nous allons donc configurer notre MicroCloudFoundry.

Différentes étapes vous demandent de choisir un mot de passe, de configurer le réseau en dhcp ou en IP static, de configurer un éventuel proxy et de saisir votre Token obtenu à l’étape d’avant.

MicroCloudFoundry s’installe ensuite et vous propose les choix suivants qui vous permettent de changer la configuration :

Tout est ok, vous pouvez maintenant refaire tout ce tutoriel en remplaçant cloudfoundry.com par [votre domaine].cloudfoundry.me.

En commençant par cibler notre microCloudFoundry :


vmc target https://api.[votre domaine].cloudfoundry.me

Puis en vous authentifiant :


vmc register

puis les classiques vmc push et vmc update pour déployer votre projet.

Note : le DNS peut mettre plusieurs minutes avant de se propager donc il est possible que ça ne marche pas immédiatement.

Débranchons le câble réseau

La configuration précédente nous permet de déployer notre application en locale mais nécessite tout de même d’être connecté à internet pour le faire. Il est cependant, et heureusement, également possible de travailler sans réseau.

Pour ce faire, dans le menu MicroCloudFoundry de votre VM, choisissez l’option 4. Reconfigure Domain et saisissez vcap.me comme domaine. MicroCloudFoundry va alors se reconfigurer pour être utilisable sans connexion internet et sans DNS.

Pour pouvoir y accéder, il va cependant vous falloir un tunnel SSH sur l’adresse IP de votre VM.

Sous linux (ou mac), cela donne :


sudo ssh -L 80:[IP de la VM]:80 vcap@[IP de la VM] -N

Le système vous demande alors le mot de passe sudo puis le mot de passe que vous avez défini pour votre instance MicroCloudFoundry.

Note : pour que tout fonctionne bien, il faut que aucun serveur en local ne soit déjà associé au port 80 (apache, tomcat, etc.)

Enfin, il vous faudra également ajouter les entrées suivantes dans votre fichier hosts :


127.0.0.1 vcap.me api.vcap.me
127.0.0.1 [votre application].vcap.me

Vous êtes maintenant prêt à utiliser votre MicroCLoudFoundry sans internet en remplaçant cette fois-ci cloudfoundry.com par vcap.me.

Ce qui donne :


vmc target api.vcap.me pour cibler votre CloudFoundry local

toujours suivi de vmc register avant de pouvoir faire des vmc push ou vmc update.

Conclusion

Après avoir passé plusieurs heures à entrer plus en détail avec CloudFoundry et MicroCloudFoundry, le bilan est, à mon sens, assez mitigé. La solution a définitivement un avenir très prometteur, est très facile à utiliser passé les phases de configuration initiales et est particulièrement bien documenté pour les cas simples.

Cependant un certain nombre de points noirs apparaissent rapidement pour les applications Java dès que l’on sort du cadre full Spring ou que les applications grossissent au delà des simples petClinic ou bookstore utilisés en exemple. Les logs ne sont pas toujours parlant et le manque de contrôle sur ce qui se passe en arrière plan peut vite devenir problématique pour ceux qui ont l’habitude d’aller tripatouiller leurs bases de données à la main (il n’y a pour le moment aucun moyen d’accéder à la base directement).

Dans tous les cas, la communauté et le forum d’entraide sont très réactifs et apportent pas mal de réponses aux questions qui ne manquent pas de survenir. Mais pour le moment, je n’imagine pas utiliser cette solution pour autre chose que de rapides prototypes et des applications fonctionnellement simples. Cela colle finalement assez bien au statut de Béta du système qui bien que très stable reste encore à enrichir fonctionnellement pour en faire un véritable environnement de travail.