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 :
- la doc Airbyte : Welcome to Airbyte Docs | Airbyte Documentation
- le repo Airbyte : https://github.com/airbytehq/airbyte
- le repo Octavia CLI : https://github.com/airbytehq/airbyte/tree/master/octavia-cli
- la chaine Youtube d’Airbyte : https://www.youtube.com/c/AirbyteHQ