Serverless pour les messages de contact
Serverless est un framework permettant de construire et déployer du code sans serveur. Approvisionnement et la mise à l'échelle est automatiquement prise en charge par le fournisseur de cloud computing. Le framework Serverless est une abstraction au-dessus des plus importants fournisseurs de cloud. Ce tutoriel montrera comment écrire une fonction qui vous envoie un courriel avec les coordonnées du client. C'est un cas d'utilisation populaire pour les formulaires de contact sur les sites Web.
Pour les besoins de ce tutoriel, l'API Twilio Sendgrid API sera utilisée pour envoyer un e-mail. Ce tutoriel nécessite une connaissance de base de JavaScript et des appels API.
Serverless Computing
Serverless computing, également connu sous le nom de function as a service (FaaS), a d'abord été mis au point par la société Amazon AWS avec AWS Lambda en 2014. Malgré son nom qui implique une utilisation sans serveur, des serveurs sont tout de même impliqués. Mais le développeur n'a pas besoin de prendre soin de ces serveurs. Elle peut écrire le code du serveur puis exécutez une commande pour déployer automatiquement la fonction. La mise à l'échelle est prise en charge par le fournisseur de cloud. Souvent, le prix est basé sur le nombre d'appel de la fonction et la mémoire ou le temps CPU.
Cela signifie que les coûts de serveur fixes qui étaient traditionnellement calculé en fonction de la durée d'exécution du serveur sont maintenant devenus des coûts variables en fonction du nombre d'appels et de la mémoire ou du CPU.
Les nouveaux cas d'utilisation pour l'informatique sans serveur sont par exemple le redimensionnement d'une image après téléchargement ou envoyer un e-mail au service après-vente lorsque le client saisit ses informations de contact et écrit un message sur un formulaire de contact du site web.
Ce tutoriel décrit ce dernier cas d'utilisation. D'autres cas d'utilisation incluent le streaming d'événements par exemple, ou bien d'autres utilisations qui sont énumérés sur le site Web de Serverless.
Framework Serverless
Le framework Serverless est un framework libre et open source écrite en Node.js. Il prend en charge tous les principaux fournisseurs de cloud comme AWS, Google Cloud, Azure, CloudFlare Workers et Alibaba Cloud. Il existe également une version d'entreprise que l'entreprise à l'origine de l'initiative du framework Serverless, Serverless Inc. supporte. Serverless Inc., est une start-up basée à San Francisco, USA et qui a notamment le soutien de Trinity Ventures, entre autres.
L'installation de Serverless est assez simple. Suivez les instructions de la page Documents Serverless.
Ensuite, clonez l'exemple d'application serverless-message exemple d'application depuis le répertoire GitHub. Exécutez npm install et ceci résout les dépendances du paquet.
Configuration
Toute la configuration majeure se fait dans le fichier serverless.yml. Vous y trouverez des informations sur le fournisseur de cloud à utiliser, quelle durée d'exécution et quelle région.
Sous functions, le nom de la fonction est spécifié, sa méthode http (POST) et que CORS devrait être activés. Aussi, il s'agit d'une fonction privée, ce qui signifie que l'appelant doit inclure la clé API dans l'en-tête de l'appel POST. La valeur de la clé API se trouve dans la section apiKeys.
serverless.yml
service: serverless-message
provider:
name: aws
runtime: nodejs8.10
region: eu-central-1
apiKeys:
- name: firstKey
value: JNJSNKMKDMKSMKMDKMDK
environment:
SENDGRID_API_KEY: Your API Key
MESSAGE_TO: Your email address
MESSAGE_FROM: The sender email address (your website domain)
usagePlan:
quota:
limit: 5000
offset: 2
period: MONTH
throttle:
burstLimit: 20
rateLimit: 10
functions:
sendMessage:
handler: handler.sendMessage
events:
- http:
path: send-message
method: post
cors: true
private: true
plugins:
- serverless-offline
Il y a également trois variables que vous devez définir.
La clé SENDGRID_API_KEY
est votre clé API Sendgrid. Il peut être créé après l'inscription à Twilio Sendgrid.
Les deux autres variables d'environnement sont l'adresse de courriel à laquelle le fichier message de contact du client doit être envoyé. C'est normalement votre adresse e-mail professionnelle. Vous y recevrez le message lorsque qu'un client soumet une demande de contact sur votre site Web. La variable MESSAGE_FROM
est l'adresse e-mail de votre site web.
L'autre section est le usagePlan qui est un élément de sécurité où vous pouvez définir le nombre maximum d'invocations mensuelles.
Fonction Serverless
C'est le cœur de l'application. La fonction de gestionnaire n'est qu'une fonction JavaScript normale. Vous pouvez importer du code à partir des paquets Node. Dans ce cas, le @sendgrid/mail est nécessaire pour envoyer l'e-mail.
Sinon, la fonction est simple. Elle envoie un e-mail avec les données (nom, courriel, message) qui ont été inclues dans le corps de l'appel POST.
Le front-end devra ensuite enregistrer les données à partir des informations saisies par le client dans le formulaire. Actuellement, le front-end ne fait pas partie de cette application.
handler.js
'use strict'
const sgMail = require('@sendgrid/mail')
function sendEmail(data) {
sgMail.setApiKey(process.env.SENDGRID_API_KEY)
const msg = {
to: process.env.MESSAGE_TO,
from: process.env.MESSAGE_FROM,
subject: 'New Message from Website',
text: `Message from ${data.name} - ${data.email}: ${data.message}`,
html: `<strong>Message from ${data.name} - ${data.email}: ${
data.message
}</strong>`,
}
sgMail.send(msg)
}
module.exports.sendMessage = (event, context, callback) => {
const data = JSON.parse(event.body)
sendEmail(data)
const response = {
statusCode: 201,
headers: {
'Access-Control-Allow-Origin': '*', // Required for CORS support to work
},
body: JSON.stringify({
message: 'Message sent successfully.',
input: event,
}),
}
callback(null, response)
}
La fonction renvoie un code de succès 201 avec un message de confirmation.
Test hors ligne
L'avantage de Serverless est qu'il possède un bon écosystème de plugins. Il y a aussi un plugin très utile pour tester la fonction AWS serverless localement sur votre PC. Ce plugin s'appelle serverless-offline.
Vous pouvez exécuter la fonction localement avec :
sls offline
Cela démarre un serveur local et imprime également la clé API. Vous pouvez par exemple utiliser Postman pour exécuter une commande POST contre le serveur. Vous devez inclure pour cela la clé API dans le header (x-api-key).
Voici un exemple de corps de message POST :
{
"email": "[email protected]",
"name": "Superman",
"message": "Greetings to Nietzsche!"
}
Dans ce cas, un e-mail contenant ces informations vous sera envoyé à l'adresse e-mail que vous avez configurée.
Déployer
Le déploiement est facile, mais peut prendre un peu de temps, car toutes les ressources doivent être téléchargées et fournies.
Exécutez la commande :
sls deploy
Veuillez noter que vous avez besoin d'un CLI AWS fonctionnel installé localement et l'utilisateur AWS doit avoir les droits corrects pour installer les fonctions lambda AWS. Reportez-vous à la documentation sur la CLI et aux tutoriels sur Serverless énumérés ci-dessous.
Conclusion
Serverless simplifie grandement le développement des fonctions sans serveur. De plus, il vous permet de changer relativement facilement de fournisseur de cloud, évitant ainsi le verrouillage du fournisseur. En tant que cadre open source, il dispose d'un vaste écosystème, est populaire et a le soutien d'une société commerciale.
Sources et lectures complémentaires
-
Serverless : https://serverless.com
-
Serverless Offline : https://github.com/dherault/serverless-offline
-
Twilio Sendgrid : https://www.twilio.com/sendgrid
-
Tutorials as introduction to Serverless : https://hackernoon.com/best-tutorials-to-get-started-with-serverless-97c86623cdc0
-
serverless-message example application : https://github.com/tderflinger/serverless-message
Publié le
5 nov. 2019