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

akka
Apprenez à créer et à déployer sur Clever Cloud une application d'exemple simple Scala/Akka HTTP avec persistance 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 ! 🎉

Blog

À lire également

Déployer de Brinjel sur Clever Cloud

Brinjel est un logiciel libre de gestion de champs destiné aux maraîchers, permettant de planifier les saisons, suivre les récoltes et optimiser la production agricole. Conçu par et pour les maraîchers, il met l’accent sur une interface intuitive et des fonctionnalités adaptées aux besoins du terrain.
Entreprise

Pilotez plus simplement des services Clever Cloud via Kubernetes avec notre nouvel opérateur

Depuis deux ans nous permettons à nos clients de combiner la simplicité de déploiement de Clever Cloud à une infrastructure Kubernetes existante à travers un opérateur.
Engineering

Keycloak as a Service : la gestion des identités sans la complexité

Assurer l’identification et la gestion des accès (IAM) dans une application est un enjeu aussi stratégique que complexe. Mais au-delà de la configuration initiale, ce sont la maintenance, les mises à jour et la supervision de la solution qui mobilisent le plus vos équipes. Et si vous pouviez vous concentrer sur vos applications… pendant qu’une solution managée se charge du reste ?
Événements