Enviar emails con la directiva @function en Amplify con GraphQL y Lambda Functions

En esta entrada vamos a ver cómo enviar emails con la directiva @function en Amplify con GraphQL y Lambda Functions. Si todo esto te suena a chino entonces lo que debes hacer es empezar por tomar el Curso de Vuejs 2 con AWS, Cognito y GraphQL.

La directiva @function nos permite ejecutar funciones Lambda. Una función Lambda es una función en nuestro caso escrita con JavaScript que nos permite ejecutar código en los servidores de Amazon Web Services.

Aunque en nuestro caso lo que vamos a hacer es enviar un correo electrónico con Nodemailer, realmente podríamos realizar cualquier tarea, desde subir una imagen hasta procesar un vídeo.

¿Cómo funciona la directiva @function en Amplify?

La directiva @function es muy simple, su sintaxis es la siguiente:


Eso lo que se supone que debe hacer es ejecutar la función Lambda sendEmailToNewUser-${env}, donde env será nuestro entorno actual. Esto es así porque Amplify también nos permite trabajar con múltiples entornos y equipos, pero todo esto lo veremos más adelante.

El problema es que el código anterior no se va a ejecutar de ninguna forma si no lo vinculamos a una Query o a una Mutación, así que vamos a vincular esa función a una mutación pasándole una serie de parámetros, por ejemplo el usuario al que queremos enviar el correo electrónico.Para vincular nuestra función con una Mutación vamos a añadir el siguiente código en nuestro archivo schema.graphql:


Cómo podemos ver, primero tenemos un enum Role, si no te suena o no sabes que es un dato de tipo enum, simplemente debes saber que es un conjunto de datos que podemos utilizar en nuestros modelos para definir datos de tipo enum, es decir, datos que puedan tener distintas opciones pero siempre con opciones predefinidas.

Lo siguiente que tenemos es un input llamado CreateUserInput que vamos a utilizar en nuestra mutación sendEmailToNewUser para pasar ese tipo de dato a nuestra función Lambda, pero además de pasarle CreateUserInput también le pasamos el subject y el mensaje que vamos a enviar por correo electrónico.

Crear una función Lambda en Amplify

Estamos hablando todo el rato de la directiva @function y de las funciones Lambda, pero todavía no sabemos cómo crearlas dentro del ecosistema de Amplify, así que vamos a crear la función sendEmailToNewUser desde el terminal ejecutando el siguiente comando:



Una vez haya finalizado el proceso podrás abrir el archivo <project-dir>/amplify/backend/function/sendEmailToNewUser/src/index.js y modificar el código por el siguiente para poder enviar emails con Nodemailer.


El código anterior es sencillo, pero tiene un problema, no hemos instalador Nodemailer para que pueda ser ejecutado correctamente, así que vamos a instalarlo, para ello, accede al directorio <project-dir>/amplify/backend/function/sendEmailToNewUser/src donde verás un archivo package.json y ejecuta el siguiente comando:


Probar nuestra función Lambda en local

Si lo deseamos, también podemos probar nuestra función sendEmailToNewUser desde un terminal en nuestro entorno local antes de que sea publicada, para ello antes debemos modificar el archivo event.json de nuestra función por lo siguiente:


Ahora que ya tenemos datos para provisionar a nuestra función, ejecuta el siguiente comando en el terminal y dí que sí a todas las preguntas:


Una vez haya finalizado, si todo ha ido bien deberás haber recibido un correo electrónico en tu cuenta de Mailtrap con los datos que hemos puesto en el archivo event.json que es la fuente de datos del entorno local para nuestra función Lambda, ¡fantástico!

Publicar nuestra función en Amazon Web Services y ejecutarla con GraphQL

Ya tenemos el trabajo más duro hecho, ahora tan sólo nos quedan 2 cosas, publicar la función en Amazon, para ello simplemente ejecuta el comando amplify push y espera a que te de el ok, y finalmente añade el siguiente código en un componente de Vuejs y todo debería funcionar sin problemas.


Y eso es todo, es un proceso algo largo y quizá complejo si no se conoce, pero una vez sabes cómo funciona es bien sencillo y súper útil, espero que te haya gustado esta entrada y que le puedas sacar mucho provecho en tus desarrollos.

Cursosdesarrolloweb ©. Todos los derechos reservados.

Login