Ajouter une interface GraphQL à votre base de données MySQL / PostgreSQL existante

Bonjour, ceci est une description pour montrer un cas d’utilisation de mon package de bibliothèque graphql-w-persistent. Avec cette approche d’utilisation du package, ma bibliothèque middleware est indépendante du langage de la pile technologique de votre projet. AWS Lambda et API Gateway sont utilisés pour envoyer des requêtes et renvoyer des objets GraphQL (cela ne coûtera pas cher au début). Avec anticipation, tout le monde peut démarrer ou booster son intégration GraphQL avec mon package de bibliothèque. On y va.

Je vais découper ce guide en sections plus indépendantes, afin que vous puissiez sauter une section si elle n’est pas obligatoire.

Étape 1: Prérequis

Nous allons n créer un environnement de développement UNIX (puisque l’outil de build Stack en a besoin pour intégrer Docker), l’outil de build Stack Haskell, un compte AWS, le AWS CLI et un exemple de projet MySQL ou PostgreSQL. Avec l’outil de création de pile, nous souhaitons ajouter votre profil utilisateur au groupe Docker et redémarrer le démon Docker. Voici la commande

Avant de passer à autre chose, je tiens à remercier les personnes formidables et formidables de Nike Inc. qui ont fourni le runtime Haskell AWS Lambda qui est facile et fonctionne après avoir essayé de nombreuses autres options – merci! ❤️

Étape 2: créer et télécharger la fonction AWS Lambda

Les exemples de projets incluent cet ensemble d’instructions dans les fichiers README.md (vous pouvez ignorer cette étape si vous avez fait l’ensemble dans l’exemple de projet), mais je les écrirai ici pour garder un emplacement central pour toutes les instructions. Après avoir téléchargé un exemple de projet, vous devez mettre à jour «gqldb_schema.json» pour l’adapter à votre schéma de base de données. Ensuite, la première commande à exécuter est

Il s’agit de créer des exécutables qui seront téléchargés ultérieurement. Les commandes suivantes sont

et

(pour la base de données MySQL) ou

pour la base de données PostgreSQL.

Nous voulons ensuite télécharger ces fichiers sur AWS, nous créons donc un compartiment sur S3. Lorsque vous faites cela, vous devez sélectionner une région plus proche de votre clientèle (en outre, j’ai choisi un nom qui indique l’entité graqhqldb-bucket ). Pour télécharger les fichiers locaux, nous voulons exécuter cette commande

(Si vous exécutez cette commande plusieurs fois, un nouveau fichier est créé dans votre bucket pour chaque appel de commande. Vous souhaiterez peut-être supprimer les fichiers précédents lorsqu’il y aura des fichiers plus récents pour mettre à jour la fonction).

Cette commande enregistre également des informations sur votre modèle CloudFormation. Nous voulons modifier cela pour rendre le format acceptable pour le déploiement, nous voulons donc ouvrir deployment_stack.yaml et supprimer la première ligne de ce fichier. Ensuite, nous déployons avec la commande

Les espaces réservés STACK_NAME et REGION sont destinés à être remplacés par un nom de pile CloudFormation choisi (j’ai choisi graphqlmysql-stack ou graphqlpostgresql-stack ) et la région sélectionnée pour le bucket. Le CAPABILITY_IAM minimum est “”.

Enfin, vous pouvez tester votre nouvelle fonction lambda sur la ligne de commande (ou sur la console). À partir de la console, vous trouverez votre fonction après avoir changé la région de la console en votre région spécifiée et en recherchant un nom de fonction précédé du nom de votre pile CloudFormation et du nom de la ressource comme déclaré dans le template.yaml fichier. Vous pouvez cliquer sur cette fonction pour créer et exécuter un test. Le format accepté pour une charge utile est le format JSON avec les deux paramètres query et variables

Vous pouvez également utiliser l’outil cli pour rechercher la fonction

Encore une fois, la nouvelle fonction est précédée du nom de la pile CloudFormation. Lorsque vous avez le nom de la fonction, vous pouvez tester la fonction lambda avec cette commande

où les variables FUNCTION_NAME , REGION et PARAMETER sont remplacées par les valeurs correspondantes. La variable PARAMETER correspond au format d’exemple JSON ci-dessus. Le résultat est enregistré dans output.txt .

Vous disposez désormais d’une fonction AWS Lambda. ?

Étape 3: rendre la fonction Lambda disponible sur l’URL

Vous souhaiterez créer une API AWS API Gateway. Vous pouvez le faire sur la console. En haut, vous devez remplacer la région par la région sélectionnée pour les autres services. Ensuite, le bouton Créer une API est cliqué pour créer une nouvelle API (sans modèle). Le protocole est REST , l’API est Nouvelle API , le nom de l’API est votre choix (j’ai choisi GraphQLDB), j’ai laissé ma description vide et mon type de point final est Régional .

Après avoir cliqué sur Créer une API , vous aurez une page API sans ressources. Vous cliquez sur Actions puis sur Créer une ressource pour créer une ressource . L’option Configurer comme ressource proxy est laissée vide, j’ai choisi graphqldb comme nom de ma ressource, le chemin de ressource est / graphqldb , et L’option Activer API Gateway CORS n’est pas sélectionnée. Après avoir cliqué sur Créer une ressource , vous allez créer une action sous cette ressource en cliquant sur Actions et Créer une méthode . Nous voulons une méthode POST et le bouton coche. Le type d’intégration est Fonction Lambda , Utiliser l’intégration du proxy Lambda n’est pas sélectionné, la région Lambda est la même que la région précédente, Fonction Lambda est la fonction créée dans la section précédente et Utiliser le délai d’expiration par défaut est sélectionné. Après avoir cliqué sur avant et lorsqu’une autre fenêtre vous est présentée, vous devez accorder à API Gateway l’autorisation d’appeler la fonction Lambda. Ensuite, une page avec un graphique orienté s’affiche. À partir de là et avec la méthode créée en surbrillance à gauche, vous devez cliquer sur Action et Déployer l’API . Vous sélectionnez ensuite une étape de déploiement (j’ai choisi test ) et une description de déploiement (j’ai laissé ce champ vide) avant de cliquer sur Déployer . Lorsque vous êtes sur la page Étapes, vous cliquez ensuite sur la méthode que vous venez de créer dans le panneau de gauche avant de trouver l’URL de la fonction en surbrillance sur la page (en tant que Invoke URL ). C’est fait, et vous pouvez maintenant envoyer une requête Web à la fonction Lambda où la couche middleware de base de données GraphQL traduit entre GraphQL et votre langage de base de données. Sur le terminal, vous pouvez tester la demande

avec INVOKE_URL remplacé par l’URL publiée sur votre page AWS API Gateway.

Eh bien, c’est tout ce sujet pour le moment. La longueur m’incite à documenter cela sur le référentiel du projet où je peux conserver tous les documents du projet, mais cette plate-forme va peut-être me donner plus de vues et d’attention au middleware désormais indépendant du langage.

… merci pour votre lecture et bonne chance avec votre intégration GraphQL!

Jason ?

La plupart des informations proviennent d’autres sources de lecture. Ils sont listés ci-dessous pour référence en cas de perte.