Décrire vos ressources Airbyte as code avec Octavia CLI

Introduction

Airbyte est un outil permettant de centraliser et gérer facilement l’extraction de données provenant de plusieurs sources et le chargement de ces données vers de multiples destinations. Airbyte propose une version open source très populaire, mais également une version cloud managée. Pour plus d’informations sur le fonctionnement d’Airbyte, je vous conseille cet article d’Amin Bazaz : Ingestion de données dans ma plateforme : Airbyte répond présent !

Une fois qu’on a lu cet article et qu’on a compris comment créer des sources, destinations et connexions via l’interface graphique d’Airbyte on est content !

On est content, mais l’idée que toutes les configurations des sources (host, user, password, port, stratégies de réplication), des destinations et des connexions ont été faites via l’UI à la main peut commencer à nous hanter…

Mais ça n’est pas reproductible facilement ? 😒

Pas versionné non plus ? han 😰

Et si mon serveur tombe ?? 😭

S’il vous plaît, faites qu’il existe un moyen de faire cette config as code !! 🙏

La réponse est oui ! Octavia CLI est notre sauveur, ou plutôt notre sauveuse car il s’agit d’une poulpe 😛

Octavia CLI est un sous projet open source du projet Airbyte permettant d’écrire la configuration de source, destination et connexion as code via des fichiers yaml. Octavia CLI étant encore un peu jeune, certaines fonctionnalités que l’on est en droit d’attendre d’un outil d’IAC sont encore en développement. Nous avons cependant déjà de quoi faire de belles choses comme nous allons le voir.

Dans cet article, nous allons faire le hello world d’Octavia CLI en créant une source Postgres, une destination Snowflake et une connexion reliant les deux.

Installation


Airbyte

# Téléchargement du projet
git clone https://github.com/airbytehq/airbyte.git

# Exécution
cd airbyte
docker-compose up

Octavia CLI

curl -s -o- https://raw.githubusercontent.com/airbytehq/airbyte/master/octavia-cli/install.sh | bash

Les commandes


Init

octavia init

Octavia vient requêter l’instance Airbyte, qui est exposée sur mon poste en local à l’adresse localhost:8000.

Octavia initialise le projet et crée l’arborescence de fichier :

api_http_headers.yaml
connections/
destinations/
sources/

List

Cette commande permet de lister différentes ressources et notamment de récupérer un identifiant qui nous sera utile par la suite.

Lister les connecteurs fournis par Airbyte

octavia list connectors sources

Pour rappel, nous voulons créer la connexion Postgres → Snowflake. Nous aurons besoin pour cela de l’identifiant du connecteur source Postgres ainsi que l’identifiant du connecteur de destination Snowflake.

octavia list connectors sources | grep Postgres
octavia list connectors destinations | grep Snowflake

Generate

Cette commande nous aide à créer des ressources (source, destination, connexion) en générant un template de fichier de configuration que l’on a plus qu’à remplir.

Maintenant que nous avons les identifiants de nos connecteurs, il est temps de les configurer !

Source Postgres

octavia generate source decd338e-5647-4c0b-adf4-da0e75f5a750 DEMO-my-postgres-source

Nous pouvons ensuite éditer le fichier de configuration

resource_name: "DEMO-my-postgres-source"
definition_type: source
definition_id: decd338e-5647-4c0b-adf4-da0e75f5a750
definition_image: airbyte/source-postgres
definition_version: 0.4.38

configuration:
  ssl: true
  host: localhost
  port: 5432
  schemas: ["public"]
  database: postgres
  password: password
  ssl_mode:
    mode: "disable"
  username: postgres
  tunnel_method:
    tunnel_method: NO_TUNNEL
  replication_method:
    method: Standard

Destination Snowflake

octavia generate destination DEMO-my-snowflake-destination


On remplit également le template de configuration pour notre destination Snowflake.
Avant de créer la connexion entre notre source et notre destination il faut qu’elles existent.
À l’instar de Terraform, l'application des changements sur l’instance se fait avec la commande apply.

octavia apply

On peut jeter un coup d'œil à l’UI d’Airbyte (localhost:8000) pour vérifier que les ressources ont bien été créées.


Connexion

Il ne nous reste qu'à créer la connexion afin de relier notre source Postgres et notre destination Snowflake.

octavia generate connection 
    --source sources/demo_my_postgres_source/configuration.yaml 
    --destination destinations/demo_my_snowflake_destination/configuration.yaml demo_my_connection_PG_SF

Pour cette fois, nous laissons la configuration par défaut et appliquons les changements.

octavia apply


Et voilà, nous venons de configurer une connexion Airbyte as code !

Importer sa configuration

octavia import [OPTIONS] COMMAND [ARGS]

La fonction import permet de générer un fichier de configuration décrivant une ressource créée depuis l’UI.
C’est en particulier très utile si on a déjà un projet Airbyte existant que l’on souhaite décrire as code.
Nul besoin d’écrire à la main tous les fichiers de config de chaque ressource, il suffit d’utiliser la commande suivante.

octavia import all

Cette commande aura pour effet de décrire d’un seul coup toutes vos ressources Airbyte.


Limites

Octavia comporte selon moi deux principales limites à ce jour :

  • Octavia CLI ne permet pour le moment pas de supprimer des ressources (la commande octavia delete n’est pas encore implémentée).
  • Octavia CLI n’est disponible que pour la version open source pour le moment. Il est donc impossible de décrire as code son projet Airbyte cloud.

Conclusion

Écrire la configuration de ses outils as code est une bonne pratique de plus en plus populaire.

Sauvegarder, répliquer et versionner sa configuration est très utile et facilite notamment la gestion de différents environnements (dev, preprod, prod …).

Octavia CLI est en ce sens un outil très intéressant qu’il ne faut pas hésiter à mettre en place lorsque l’on utilise Airbyte. Certaines fonctionnalités importantes comme celle de supprimer des ressources ou celle d’appliquer la configuration sur la version Airbyte cloud sont manquantes, mais cela devrait évoluer dans les mois à venir.

Stay tuned, Airbyte et Octavia CLI n’ont pas dit leur dernier mot 🙂

Si vous souhaitez aller plus loin, je vous invite à aller consulter les éléments suivants :