Points clés
lambda-local
qui peuvent simuler les environnements AWS Lambda localement. Cet article a été initialement publié dans MongoDB. Merci de soutenir les partenaires qui ont rendu le point de point possible.
Ces dernières années, l'environnement des développeurs a subi d'énormes changements. Dans le passé, nous, les développeurs, exécutaient généralement tous les outils (bases de données, serveurs Web, IDE de développement…) sur leurs propres machines, mais des services cloud tels que GitHub, MongoDB Atlas et AWS Lambda révolutionnent cela. Ils facilitent de plus en plus les développeurs d'écrire et d'exécuter du code n'importe où, sur n'importe quel appareil, sans (ou avec très peu) de dépendances.
Il y a quelques années, si vous vous êtes écrasé, perdu votre machine ou que vous avez simplement perdu votre alimentation, cela pourrait vous prendre plusieurs jours pour remettre votre nouvelle machine et configurer et configurer tout correctement pour le récupérer au précédent un état.
Avec les outils de développeur cloud, vous pouvez désormais passer d'un ordinateur portable à un autre sans provoquer trop de perturbations. Cependant, cela ne signifie pas que tout se passe bien. L'écriture et le débogage du code dans le cloud sont toujours difficiles;
C'est exactement ce que je vais essayer de vous montrer dans cet article de blog: comment intégrer facilement les fonctions AWS Lambda Node.js avec la base de données MongoDB hébergée dans MongoDB Atlas (DBAA pour MongoDB (base de données en tant que service)). Plus précisément, nous rédigerons une fonction Lambda simple qui crée un seul document dans une collection stockée dans une base de données MongoDB Atlas. Je vous guiderai dans ce tutoriel étape par étape et vous devriez le terminer dans une heure.
Commençons par les exigences nécessaires et faites démarrer:
Maintenant que vous comprenez les exigences, discutons des étapes spécifiques que nous prendrons pour écrire, tester et déployer nos fonctions lambda:
Je ne suis pas entré dans les détails de la configuration de VPC à regarder entre notre cluster MongoDB Atlas et AWS Lambda pour deux raisons: 1) Nous avons déjà une page de documentation détaillée sur la configuration de VPC Peering et un je recommande fortement ce post sur VPC Peering dans Atlas; 2) Le cluster M0 (le cluster que j'ai utilisé pour construire cette démonstration) ne prend pas en charge VPC.
Si vous ne configurez pas VPC Peering, ce qui suit se produira:
Si vous essayez simplement d'obtenir ce code de démonstration pour l'écriture, ces deux avertissements peuvent être bien, mais si vous prévoyez de déployer une intégration lambda-atlas qui peut être utilisée dans un environnement de production, la mise en place de VPC peering est un Hautement recommandé, nous recommandons fortement les meilleures pratiques de sécurité. M0 est notre produit gratuit actuel; consultez notre page de prix MongoDB Atlas pour la gamme complète de toutes les tailles d'instance disponibles.
Rappelez que pour les environnements de développement et les sites Web à faible trafic, les tailles d'instance M0, M10 et M20 devraient être bien. Cependant, pour les environnements de production qui prennent en charge les applications à haute trafic ou les grands ensembles de données, il est recommandé d'utiliser une taille d'instance M30 ou plus grande.
Assurez-vous que votre application est conforme à la politique d'accès à l'autorisation minimale est essentielle pour protéger vos données contre les menaces malveillantes. C'est pourquoi nous allons configurer un utilisateur de base de données spécifique qui n'aura un accès en lecture / écriture à notre base de données de voyage. Voyons comment implémenter cela dans MongoDB Atlas:
Sur la page du cluster, sélectionnez l'onglet de sécurité et appuyez sur le bouton Ajouter un nouveau utilisateur
Dans la section des autorisations utilisateur, sélectionnez le lien
Vous pouvez ensuite choisir d'attribuer une autorisation de contrôle d'accès granulaire plus fin:
Dans la liste déroulante SELECT Rôle, sélectionnez ReadWrite et remplissez le champ de base de données avec le nom de la base de données que vous utiliserez pour stocker le document. J'ai choisi de le nommer de voyage.
Dans la section du mot de passe, utilisez le bouton Générer automatiquement le mot de passe de sécurité (et notez le mot de passe généré) ou définissez votre mot de passe préféré. Ensuite, appuyez sur le bouton "Ajouter un utilisateur" pour confirmer que cet utilisateur est créé.
Obtenez la chaîne de connexion du cluster au fait, car nous en aurons besoin dans le code lambda pour se connecter à notre base de données MongoDB ATLAS:
Supposons que vous ayez créé un cluster MongoDB Atlas, appuyez sur le bouton "Connexion" à côté du cluster:
Copiez la valeur de la chaîne de connexion URI et stockez-la en toute sécurité dans le document texte. Nous en aurons besoin dans le code plus tard, ainsi que le mot de passe que vous venez de définir.
En outre, si vous n'utilisez pas VPC Peering, accédez à l'onglet IP Whitelist et ajoutez le bloc CIDR 0.0.0.0/0 ou appuyez sur le bouton ALLAGE ACCESS à partir de n'importe où. Pour rappel, ce paramètre est fortement recommandé de ne pas être utilisé dans les environnements de production et peut rendre votre grappe d'atlas MongoDB vulnérable aux attaques malveillantes.
Alors que la fonction lambda prend en charge plusieurs langues, j'ai choisi d'utiliser Node.js, grâce à la popularité croissante du JavaScript comme langage de programmation multifonctionnel et au grand succès des piles moyennes et Mern (MongoDB, Express.js, Angular / React , Node.js Acronymes - Découvrez la merveilleuse série de blogs de développeurs d'Andrew Morgan sur ce sujet). De plus, pour être honnête, j'aime que ce soit un langage léger interprété qui ne nécessite pas d'outils de développement intenses et de compilateurs.
Il est maintenant temps d'écrire du code, alors continuons à utiliser Node.js comme langue préférée pour nos fonctions lambda.
Créez d'abord un dossier, comme Lambda-atlas-Create-Doc
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
Ensuite, exécutez la commande suivante à partir de la console terminale et initialisez notre projet avec le fichier package.json
<code>npm init</code>
Le système vous invitera à configurer certains champs. Je les ai laissés à votre créativité, mais notez que j'ai choisi de définir le point d'entrée sur app.js (plutôt que l'index.js par défaut), vous voudrez peut-être aussi le faire.
Nous devons utiliser le pilote MongoDB Node.js afin que nous puissions nous connecter à notre base de données MongoDB à partir de la fonction lambda (sur Atlas), alors allons-y et exécutons la commande suivante pour l'installer à partir de notre racine de projet:
<code>npm install mongodb --save</code>
Nous voulons également écrire et tester nos fonctions Lambda localement pour accélérer le développement et simplifier le débogage, car instancier la fonction lambda dans les services Web d'Amazon n'est pas particulièrement rapide à chaque fois (et le débogage n'existe pas réellement à moins que vous ne soyez console. Log () fans de fonction). J'ai choisi d'utiliser le package Lambda-local car il prend en charge les variables d'environnement (nous l'utiliserons plus tard):
<code>(sudo) npm install lambda-local -g</code>
Créez un fichier app.js. Ce sera le fichier contenant notre fonction lambda:
<code>touch app.js</code>
Maintenant que vous avez importé toutes les dépendances requises et créé le fichier de code lambda, veuillez ouvrir le fichier app.js dans l'éditeur de code de votre choix (atom, texte sublime, code Visual Studio ...) et utilisez ce qui suit Initialisez-le par segment de code:
<code>'use strict' var MongoClient = require('mongodb').MongoClient; let atlas_connection_uri; let cachedDb = null; exports.handler = (event, context, callback) => { var uri = process.env['MONGODB_ATLAS_CLUSTER_URI']; if (atlas_connection_uri != null) { processEvent(event, context, callback); } else { atlas_connection_uri = uri; console.log('the Atlas connection string is ' + atlas_connection_uri); processEvent(event, context, callback); } }; function processEvent(event, context, callback) { console.log('Calling MongoDB Atlas from AWS Lambda with event: ' + JSON.stringify(event)); }</code>
Arrête et commentez le code ci-dessus, comme vous avez peut-être remarqué une structure étrange:
Maintenant que nous avons terminé le commentaire du code, créons un fichier event.json (dans le répertoire racine du projet) et remplissons-les avec les données suivantes:
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
(Si vous voulez savoir, le fichier JSON est ce que nous enverrons à MongoDB Atlas pour créer notre document BSON)
Ensuite, assurez-vous de l'avoir configuré correctement en exécutant la commande suivante dans la console terminale:
<code>npm init</code>
Si vous souhaitez tester avec votre propre chaîne de connexion URI de cluster (je crois que vous le ferez), n'oubliez pas d'échapper aux doubles citations, virgules et & & caractères dans le paramètre E, ou Lambda-local lancera une erreur (Vous devez également remplacer les mots clés $ mot de passe et $ de base de données par vos propres valeurs).
Après l'avoir exécuté localement, vous devriez voir la sortie de la console suivante:
Si vous rencontrez une erreur, vérifiez votre chaîne de connexion et vos doubles citations / virgules / & s'échappent (comme mentionné ci-dessus).
Maintenant, gérons le contenu de base du code de fonction en personnalisant la fonction ProcessEvent () et en ajoutant la fonction CreatedOC ():
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
Notez à quel point il est facile de se connecter à la base de données de l'atlas MongoDB et à insérer des documents, et le petit morceau de code que j'ai ajouté pour convertir les dates JSON (formatées sous forme de chaînes conformes à l'iso) en JavaScript réel qui peut être stocké sous forme de dates BSON .
Vous pouvez également remarquer l'annotation d'optimisation des performances et l'appel à context.CallbackWaitSForemptyEventLoop = false. Si vous êtes intéressé à comprendre ce qu'ils signifient (je pense que vous devriez!), Voir mon article de blog ultérieur sur la façon d'optimiser les performances de Lambda avec Mongodb Atlas.
Vous êtes maintenant prêt à tester complètement votre fonction lambda localement. En utilisant la même commande Lambda-locale qu'auparavant, j'espère que vous recevrez un joli message de réussite "Kudos":
Si tout se passe bien sur votre machine locale, libérons notre projet Node.js local en tant que nouvelle fonction lambda!
La première étape que nous allons franchir est de compresser notre projet Node.js, car nous n'écrirons pas les fonctions de code Lambda dans l'éditeur de code Lambda. Au lieu de cela, nous choisirons la méthode de téléchargement zip pour pousser notre code vers AWS Lambda.
J'ai utilisé l'outil de ligne de commande zip dans la console terminale, mais toute méthode fonctionnerait (tant que vous compressez les fichiers dans le dossier de niveau supérieur, pas le dossier de niveau supérieur lui-même!):
<code>npm init</code>
Ensuite, connectez-vous à la console AWS, accédez à la page de rôle IAM et créez un rôle (par exemple, LambdAbasiceXecrole) avec AwslambdabasiceXecutionRole Politique d'autorisation:
Naisons maintenant vers la page AWS Lambda. Cliquez sur Démarrer maintenant (si vous n'avez jamais créé de fonction lambda) ou le bouton Créer Lambda. Nous n'utiliserons aucun projet et nous ne configurerons aucun déclencheur, veuillez donc sélectionner "Configurer la fonction" directement dans la barre de navigation de gauche:
Dans la page Configurer les fonctions, entrez le nom de la fonction (par exemple, mongodb_atlas_createdoc). Le runtime est automatiquement défini sur Node.js 4.3, ce qui est parfait pour nous car c'est la langue que nous utiliserons. Dans la liste des types d'entrée de code, sélectionnez Télécharger le fichier .zip, comme indiqué dans la capture d'écran ci-dessous:
Cliquez sur le bouton "Télécharger" et sélectionnez le fichier de projet Node.js compressé que vous avez créé plus tôt.
Dans la section "Lambda Function Handlers and Rôles", modifiez la valeur de champ "Handler" sur app.handler (pourquoi? Voici un conseil: j'ai utilisé le fichier app.js pour mon code de fonction lambda, au lieu de l'index. Fichier JS ...) Et sélectionnez le rôle existant LambdAbasicexecrole que nous venons de créer:
Dans la section Paramètres avancés, vous pouvez augmenter la valeur de délai d'expiration à 5 ou 10 secondes, mais c'est toujours quelque chose que vous pouvez ajuster plus tard. Laissez les champs de touches VPC et KMS comme valeurs par défaut (sauf si vous souhaitez utiliser les touches VPC et / ou KMS) et appuyez sur Suivant.
Enfin, regardez votre fonction lambda et appuyez sur "Créer une fonction" en bas. Félicitations, votre fonction Lambda est en ligne, et vous devriez voir une page similaire à la capture d'écran suivante:
Mais vous souvenez-vous que nous avons utilisé des variables d'environnement? Il est maintenant temps de les configurer et d'utiliser le service de gestion des clés AWS pour les protéger!
Faites défiler vers le bas vers l'onglet Code de la fonction lambda et créez une variable d'environnement avec les propriétés suivantes:
nom valeur mongodb_atlas_cluster_uri your_atlas_cluster_uri_value à ce stade, vous pouvez appuyer sur le bouton "Enregistrer et tester" en haut de la page, mais Par souci de sécurité (nous crypterons la chaîne de connexion.
Sélectionnez la case "Activer l'assistant de chiffrement" "et sélectionnez-la si vous avez déjà créé la clé de chiffrement (sinon, vous devrez peut-être en créer un - ce qui est facile):
Ensuite, sélectionnez le bouton "Encrypter" pour la variable MongoDB_ATLAS_CLUSTER_URI:
Retour à l'éditeur de code en ligne, ajoutez la ligne suivante en haut:
<code>mkdir lambda-atlas-create-doc && cd lambda-atlas-create-doc</code>
et remplacez le contenu de l'instruction "else" dans la méthode "exports.handler" par le code suivant:
<code>npm init</code>
(J'espère que le code complexe que nous avons écrit a initialement du sens maintenant!)
Si vous souhaitez vérifier l'intégralité du code de fonction que j'utilise, consultez l'essentiel suivant. Pour les fans de Git, le code source complet du projet Node.js est également disponible sur GitHub.
Appuyez maintenant sur le bouton "Enregistrer et tester" et collez le contenu de notre fichier event.json dans l'éditeur de texte "Event Event" Event ":
Faites défiler et appuyez sur le bouton "Enregistrer et tester".
Si vous configurez tout correctement, vous devriez recevoir le message de réussite suivant dans la sortie du journal lambda:
génial! Vous pouvez profiter de quelques minutes de succès avant de continuer à lire.
J'espère que ce tutoriel AWS Lambda-MongoDB Atlas vous fournira les bonnes étapes pour commencer votre premier projet Lambda. Vous devriez maintenant être en mesure d'écrire et de tester les fonctions Lambda localement et de stocker des données sensibles, telles que votre chaîne de connexion MongoDB Atlas, en toute sécurité dans AWS KMS.
Alors, que pouvez-vous faire ensuite?
Bien sûr, n'hésitez pas à poser des questions ou à laisser vos commentaires dans les commentaires ci-dessous. Codage heureux!
Vous aimez cet article? Replay notre webinaire où nous fournissons des tutoriels interactifs sur des architectures sans serveur à l'aide d'AWS Lambda.
AWS Lambda est un outil très utile dans le développement sans serveur. Il permet aux développeurs d'exécuter du code sans gérer les serveurs. Cela signifie que vous pouvez vous concentrer sur l'écriture de code et laisser AWS Lambda gérer l'infrastructure. Il évolue automatiquement votre application en fonction du trafic entrant et vous ne payez que le temps de calcul que vous consommez. Cela en fait une solution rentable pour les entreprises de toutes tailles. De plus, AWS Lambda prend en charge une variété de langages de programmation, y compris Node.js, ce qui en fait une option polyvalente pour les développeurs.
MongoDB Atlas s'intègre de manière transparente avec AWS Lambda. Il fournit un service de base de données entièrement géré qui automatise des tâches administratives qui prennent du temps telles que la configuration matérielle, la configuration de la base de données, le correctif et les sauvegardes. Avec MongoDB Atlas, vous pouvez facilement déclencher des fonctions AWS Lambda basées sur des événements de base de données tels que l'insertion, la mise à jour ou la suppression. Cela vous permet de créer des applications puissantes, en temps réel et sans serveur.
La configuration d'une application sans serveur avec Node.js, AWS Lambda et MongoDB Atlas implique plusieurs étapes. Tout d'abord, vous devez configurer votre fonction AWS Lambda. Cela inclut l'écriture de code à l'aide de node.js et le télécharger sur AWS Lambda. Ensuite, vous devez configurer votre cluster MongoDB Atlas. Cela comprend la création d'un nouveau cluster, la configuration de votre liste blanche IP et la création d'un utilisateur de base de données. Enfin, vous devez connecter votre fonction AWS Lambda à votre cluster MongoDB Atlas. Cela comprend la configuration de votre fonction Lambda pour connecter des chaînes à l'aide de MongoDB Atlas.
Une variété d'outils et de technologies peuvent être utilisés pour résoudre les problèmes avec les applications sans serveur. AWS Lambda fournit des journaux détaillés d'exécution de la fonction, ce qui peut vous aider à identifier les erreurs ou les problèmes. MongoDB Atlas propose également des capacités de surveillance et d'alerte complètes, vous permettant de suivre les performances de votre base de données et de recevoir des alertes pour tout problème potentiel. De plus, l'utilisation de bonnes pratiques de codage et le test approfondi de votre application peuvent aider à prévenir les problèmes.
La sécurité est un aspect clé de toute application, et les applications sans serveur ne font pas exception. AWS Lambda offre une variété de fonctionnalités de sécurité, notamment AWS Identity and Access Management (IAM) pour le contrôle d'accès, le chiffrement au transport et au repos, et la prise en charge du VPC pour l'isolement du réseau. MongoDB Atlas propose également de puissantes fonctionnalités de sécurité, notamment la liste blanche IP, l'audit de la base de données et le chiffrement au repos et en transit. Assurez-vous de configurer correctement ces fonctionnalités de sécurité pour protéger vos applications et données.
L'optimisation des performances des applications sans serveur implique une variété de stratégies. Cela comprend correctement la configuration des fonctions AWS Lambda pour des performances optimales, en utilisant du code efficace et en optimisant les bases de données MongoDB Atlas. AWS Lambda vous permet d'allouer de la mémoire aux fonctions, ce qui alloue également les capacités du CPU, la bande passante réseau et les E / S de disque proportionnellement. MongoDB Atlas offre des fonctionnalités d'optimisation des performances telles que les conseils de consultants en performance automatique.
Oui, AWS Lambda prend en charge une variété de langages de programmation, notamment Node.js, Python, Java, Go et .NET. L'atlas MongoDB peut être utilisé avec n'importe quel langage de programmation avec des pilotes MongoDB. Cela en fait une solution polyvalente pour le développement sans serveur.
L'architecture sans serveur peut réduire considérablement le coût des applications. Avec AWS Lambda, vous ne payez que le temps de calcul que vous consommez et que vous ne facturez pas lorsque le code ne fonctionne pas. MongoDB Atlas propose une variété d'options de prix, y compris un niveau gratuit, vous permettant de choisir l'option qui convient le mieux à vos besoins.
Migrer une application existante vers une architecture sans serveur implique plusieurs étapes. Tout d'abord, vous devez refacter l'application pour le rendre compatible avec AWS Lambda et Mongodb Atlas. Cela peut inclure la réécriture du code et la modification du schéma de base de données à l'aide d'un langage de programmation pris en charge. Ensuite, vous devez configurer la fonction AWS Lambda et le cluster MongoDB Atlas. Enfin, vous devez tester soigneusement votre application pour vous assurer qu'elle fonctionne correctement dans la nouvelle architecture.
Bien que AWS Lambda et MongoDB atlas offrent de nombreux avantages pour le développement sans serveur, il y a certaines limites auxquelles être prêts attention. AWS Lambda a des limites à la quantité de ressources de calcul et de stockage disponibles, et la fonction a un temps d'exécution maximal. MongoDB Atlas limite également la taille de la base de données et le nombre de connexions. Cependant, ces limitations sont généralement suffisamment élevées pour s'adapter à la plupart des applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!