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

Clever Tools : une année d’évolutions au service de vos déploiements, cap sur la v4

Une interface en ligne de commandes (CLI) est au cœur de l'expérience développeur. Chez Clever Cloud, cela fait bientôt 10 ans que nous proposons les Clever Tools.
Engineering Fonctionnalités

Otoroshi with LLM : simplifiez la gestion de vos API et services IA sur Clever Cloud

Vos applications et services évoluent dans un environnement de plus en plus complexe, nécessitant une gestion efficace des API et des interactions avec des modèles d'intelligence artificielle tels que les très populaires LLM (Large Language Models).
Fonctionnalités

Markitdown-as-a-Service: de l’IA à la production sur Clever Cloud

Chaque jour, de nouveaux outils sont rendus disponibles, l'IA apporte de nouvelles perspectives, vous avez de nouvelles idées. C'est l'un des objectifs de Clever Cloud que de vous aider à les développer et les tester en conditions réelles sans effort, avant de pouvoir les mettre à disposition de tous.
Engineering