Retour vers clever-cloud.com

Well, if you need some logos, we provide these:

svg ·  png
Red Clever Cloud logo
svg ·  png
svg ·  png
White Clever Cloud logo
svg · png
White Clever Cloud logo
svg · png
Posted at June 9, 2022 — Engineering, Fonctionnalités

Déployer une application Scala / Akka avec intégration PostgreSQL

akka_toolkit_logo

Lorsque j’ai commencé à travailler chez Clever Cloud, j’ai passé du temps à m’amuser pour me familiariser avec la plateforme et ses outils. Ce billet de blog vous présentera comment j’ai réussi à :

  • créer une simple application Scala/Akka HTTP template avec persistance PostgreSQL
  • lier l’application à un serveur PostgreSQL géré
  • la déployer
  • l’essayer !

Créer un modèle HTTP Scala/Akka 🔨

Obtenez les sources

Clonez le projet généré à partir du modèle de démarrage rapide Akka Github.

Ce service offre la possibilité de gérer un simple registre d’utilisateurs en mémoire exposant 4 routes :

  • Lister tous les utilisateurs
  • Obtenir un utilisateur spécifique
  • Créer un utilisateur
  • Supprimer un utilisateur

Une description complète des commandes cURL disponibles peut être trouvée ici.

Ajouter des fonctionnalités supplémentaires

Quelques fonctionnalités ont été ajoutées à l’exemple original :

  • stocker le registre dans une base de données PostgreSQL (au lieu d’être en mémoire)
  • lire les paramètres de la base de données à partir des variables d’environnement
  • ajouter une basic auth codée en dur

Tous les paramètres peuvent être spécifiés dans le fichier application.conf :

  • basic auth
  • paramètres de la base de données

Les paramètres sont récupérés à partir des variables d’environnement, ou de la valeur par défaut spécifiée si aucune n’est trouvée.

app {
  basic-auth {
    user = "foo"
    user = ${?BASIC_AUTH_USER}
    password = "bar"
    password = ${?BASIC_AUTH_PASSWORD}
  }
  routes {
    # If ask takes more time than this to complete the request is failed
    ask-timeout = 5s
  }

  db {
    host = "localhost"
    host = ${?POSTGRESQL_ADDON_HOST}
    port = "5432"
    port = ${?POSTGRESQL_ADDON_PORT}
    database = "postgres"
    database = ${?POSTGRESQL_ADDON_DB}
    user = "login"
    user = ${?POSTGRESQL_ADDON_USER}
    pass = "pass"
    pass = ${?POSTGRESQL_ADDON_PASSWORD}
  }
}

Exécuter l’application en utilisant Clever Cloud CLI 🚀

Créez une application Clever Cloud

clever create --type sbt myakka --region par --org testorg

Cette commande crée une nouvelle application

  • de type sbt pour Scala
  • nommée myakka
  • dans la région de Paris
  • dans mon organisation de test testorg

Activer une instance de build dédiée pour un build plus rapide (pro tip optionnel)

Par défaut, une application nouvellement créée exécutera une instance XS qui est assez petite pour construire rapidement des applications Scala. Une façon de construire plus rapidement est d’utiliser une instance de build dédiée : Dans la console Clever Cloud, allez dans votre application -> options, et cochez la case [] Activer l'instance de build dédiée. De cette façon, vous pouvez conserver votre instance XS pour exécuter l’application, mais vous pouvez choisir une instance XL pour le temps de build. Ou avec l’outil de ligne de commande :

clever scale -a myakka --build-flavor XL

Créez une base de données PostgreSQL

clever addon -l myakka create postgresql-addon myakkadb

Cette commande commande une instance d’addon PostgreSQL et la lie à myakka, en injectant les bonnes variables d’environnement dans l’instance de l’application pour contacter la base de données.

La création et la migration de la base de données sont effectuées à l’aide de l’outil flywaydb. Ces scripts se trouvent dans le répertoire migration/db des ressources de l’application.

La migration sera automatiquement appelée une fois que vous aurez spécifié le hook de build approprié dans les variables d’environnement

CC_POST_BUILD_HOOK avec la valeur sbt flywayMigrate

clever env -a myakka set CC_POST_BUILD_HOOK "sbt flywayMigrate"

Configurer les variables d’environnement de la basic auth

Le login et le mot de passe de la basic auth peuvent être spécifiés comme variables d’environnement en utilisant la commande clever env. Si aucune variable n’est trouvée, la basic auth prendra par défaut les valeurs du fichier application.conf

clever env -a myakka set BASIC_AUTH_USER <YOUR_AUTH_USER>
clever env -a myakka set BASIC_AUTH_PASSWORD <YOUR_AUTH_PASSWORD>

Reliez votre repo local à votre instance d’application Clever Cloud.

Récupérez l’identifiant de votre application avec

clever applications

Liez ensuite le référentiel local à l’application (en créant un fichier .clever.json)

clever link app_<UUID>

Déployer

Vous êtes maintenant prêt à déployer et à exécuter votre code, il suffit d’exécuter

clever deploy

Vous pouvez maintenant suivre le processus de déploiement jusqu’à ce qu’il se termine avec succès.

Votre application fonctionne maintenant !

Essayez-la

Il est temps de l’expérimenter en utilisant curl ou votre interface graphique préférée.

Ajouter un utilisateur

Adaptez cette commande afin d’insérer un nouvel utilisateur dans le registre :

curl --request POST \
  --url https://app-<UUID>.cleverapps.io/users \
  --header 'Content-type: application/json' \
  -u '<YOUR_AUTH_USER>:<YOUR_AUTH_PASSWORD>' \
  --data '{
  "name": "Serge",
  "age": 42,
  "countryOfResidence": "Greenland"
}'

{
	"description": "User Serge created."
}

Récupérer tous les utilisateurs

Vérifiez que l’utilisateur a été correctement créé, en obtenant la liste des utilisateurs :

curl --request GET \
  --url https://app-<UUID>.cleverapps.io/users \
  -u '<YOUR_AUTH_USER>:<YOUR_AUTH_PASSWORD>'

{"users":[{"age":42,"countryOfResidence":"Greenland","name":"Serge"}]}

Ça marche, c’est un succès ! 🎉

Tags:

Geoffrey GUILBON

Software engineer @clever_cloud working on scalable applications

Retrouvez nos articles de blog

Nous écrivons sur la programmation, la sécurité et les produits Clever Cloud.

Rejoignez une communauté de millers de devs. L'inscription est gratuite!

Create your account now to start your apps and collaborate within a few minutes. For free with 20€ offered.

En vous inscrivant, vous acceptez nos conditions d'utilisation
ou
Se connecter avec Github