Comment utiliser Cloud Firestore sur AWS Lambda

Ce guide vous apprendra à déployer correctement une fonction AWS Lambda qui utilise le SDK de l'administrateur Node.js Firebase pour appeler Cloud Firestore.

Avant de poursuivre votre lecture, il convient de mentionner que le moyen le plus simple d’écrire du code sans serveur consiste à utiliser Cloud Functions for Firebase, qui fonctionne avec Cloud Firestore. Ce guide est destiné uniquement aux utilisateurs qui sont déterminés à utiliser AWS Lambda.

Alors pourquoi cela a-t-il même besoin d'un guide? Eh bien, le SDK Node.js pour Cloud Firestore utilise gRPC pour communiquer. gRPC est construit sur du code natif et, par défaut, les fonctions AWS Lambda ne peuvent pas exécuter de code natif. Si vous ne faites que installer npm puis télécharger votre code, vous pouvez recevoir un message d'erreur tel que celui-ci lorsque vous essayez d'exécuter votre fonction lambda:

Ne crains pas! Il y a une solution assez simple si vous continuez.

Conditions préalables

Avant d’aller plus loin, nous devons nous assurer que vous êtes au bon endroit. Ce n'est pas un guide sur les raisons pour lesquelles vous pouvez utiliser les fonctions AWS Lambda, ni sur l'utilisation de Cloud Firestore. En plus de connaître ces deux services, vous devez vous assurer que les dépendances suivantes sont installées sur votre ordinateur:

Docker

Vous devez avoir le menu fixe installé sur votre machine. Vous pouvez vérifier si vous avez docker en exécutant docker run hello-world. Si cela ne fonctionne pas pour vous, consultez la documentation pour savoir comment installer Docker.

AWS CLI (facultatif)

Dans ce guide, nous utiliserons l'AWS CLI pour déployer des fonctions Lambda, bien que vous puissiez déployer vos fonctions comme vous le souhaitez. Pour installer l'AWS CLI, suivez les instructions du fichier README de Github.

Installer

Nous n’aurons besoin que de quelques fichiers pour compléter ce guide. Créez un nouveau répertoire avec les fichiers suivants:

Votre package.json peut être extrêmement simple, tout ce dont vous avez besoin est une dépendance à firebase-admin:

Le corps de votre fonction devrait être dans index.js. Toute fonction qui écrit dans Cloud Firestore fonctionnera, voici une fonction extrêmement simple qui ajoute un nouveau document à chaque exécution:

Le fichier final, serviceAccount.json, est une clé JSON pour un compte de service autorisé à modifier les données Cloud Firestore dans votre projet Firebase. Cette étape est nécessaire pour utiliser firebase-admin sur Lambda et n'est pas spécifique à l'utilisation de Cloud Firestore. Pour obtenir une nouvelle clé de compte de service, accédez à la page Comptes de service de la console Firebase, sélectionnez "Node.js", puis cliquez sur "Générer une nouvelle clé privée":

Générer une nouvelle clé de compte de service JSON

Si vous utilisez le code ci-dessus, renommez le fichier JSON résultant en serviceAccount.json et déplacez-le dans le répertoire en cours.

Installer et déployer

Maintenant que votre environnement de développement est configuré, vous êtes prêt à déployer votre fonction. La première étape, et l'étape la plus importante de ce guide, consiste à utiliser docker pour installer vos dépendances:

Une fois cette commande terminée, vous devriez avoir un répertoire node_modules contenant un dossier firebase_admin. L'utilisation de docker pour installer les dépendances le rend compatible avec l'environnement d'exécution de votre fonction AWS Lambda.

Il est maintenant temps de déployer votre fonction. Commencez par compresser votre répertoire actuel. Cela créera un fichier ZIP assez volumineux puisque tout le répertoire node_modules est inclus:

Utilisez ensuite l'AWS CLI pour déployer votre fonction. Vous pouvez utiliser le nom, la région et le rôle de votre choix. Les seuls arguments importants ici sont handler, runtime et zip-file:

Enfin, exécutez votre fonction. Si cela fonctionne, vous devriez voir quelque chose comme ceci:

Exécution Lambda réussie

Et dans la console Firebase, vous devriez voir un nouveau document dans la collection lambda-docs:

Nouvelles données dans la base de feu

C'est tout! Vous avez correctement écrit des données dans Cloud Firestore à partir d'une fonction AWS Lambda.