Configurar el Serverless Framework
Vamos a estar usando AWS Lambda y Amazon API Gateway para crear nuestro backend. AWS Lambda es un servicio computable que permite ejecutar tu código sin proveer o administrar servidores. Tú sólo pagas por el tiempo computable que consumes - no hay cargo alguno cuando tu código no se está ejecutando. Y el servicio API Gateway facilita a los desarrolladores crear, publicar, mantener, monitorear, y volver seguras las APIs. Trabajar directamente con AWS Lambda y configurar el servicio de API Gateway puede ser un poco complicado; por eso vamos a usar el Serverless Framework para ayudarnos.
El Serverless Framework permite a los desarrolladores desplegar aplicaciones backend como funciones independientes que serán desplegadas hacia AWS Lambda. También configura AWS Lambda para ejecutar tu código en respuesta a peticiones HTTP usando Amazon API Gateway.
En este capítulo vamos a configurar el Serverless Framework en nuestro ambiente local de desarrollo.
Instalando Serverless
Instalar Serverless globalmente.
$ npm install serverless -g
El comando anterior necesita NPM, un administrador de paquetes para JavaScript. Click aquí si necesitas ayuda para instalar NPM.
En tu directorio de trabajo; crea un proyecto usando Node.js. Vamos a repasar algunos detalles de este proyecto inicial en el siguiente capítulo.
$ serverless install --url https://github.com/AnomalyInnovations/serverless-nodejs-starter --name notes-api
Ve al directorio de nuestro proyecto api backend.
$ cd notes-api
Ahora, el directorio deberá contener algunos archivos incluyendo handler.js y serverless.yml.
- El archivo handler.js contiene el código real para los servicios/funciones que van a ser desplegados hacía AWS Lambda.
- El archivo serverless.yml contiene la configuración sobre que servicios AWS Serverless proporcionará y como deben ser configurados.
También tenemos el directorio tests/
donde podemos agregar nuestras pruebas unitarias.
Instalando paquetes Node.js
El proyecto inicial se basa en algunas dependencias listadas en el archivo package.json
.
En la raíz del proyecto ejecuta.
$ npm install
A continuación, instalaremos un par de paquetes especificos para nuestro backend.
$ npm install aws-sdk --save-dev
$ npm install uuid@7.0.3 --save
- aws-sdk nos permite comunicarnos con diferentes servicios AWS.
- uuid genera ids únicos. Los necesitamos para guardar información en DynamoDB.
Actualizando el nombre del servicio
Cambiemos el nombre de nuestro servicio del que inicialmente teniamos.
Abre el archivo serverless.yml
y reemplaza el contenido con lo siguiente.
service: notes-api
# Creando un paquete optimizado para nuestras funciones
package:
individually: true
plugins:
- serverless-bundle # Empaquetar nuestras funciones con Webpack
- serverless-offline
- serverless-dotenv-plugin # Cargar el archivo .env como variables de ambiente
provider:
name: aws
runtime: nodejs12.x
stage: prod
region: us-east-1
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
El nombre del servicio (service
) es muy importante. Vamos a llamar a nuestro servicio notes-api
. Serverless Framework crea tu ambiente de trabajo en AWS usando este nombre. Esto significa que si cambias el nombre y despliegas tu proyecto, se va a crear un proyecto completamente nuevo!
Vamos a definir también una función Lambda llamada hello
. Esta tiene un controlador llamado handler.hello
y sigue el siguiente formato:
handler: {filename}-{export}
En este caso el controlador para nuestra función Lambda llamada hello
es la función hello
que se exporta en el archivo handler.js
.
Nuestra función Lambda también responde a un evento HTTP GET con la ruta /hello
. Esto tendrá más sentido una vez que despleguemos nuestro API.
Notarás que hemos incluido los plugins — serverless-bundle
, serverless-offline
, y serverless-dotenv-plugin
. El plugin serverless-offline es útil para nuestro desarrollo local. Mientras que el plugin serverless-dotenv-plugin será usado después para cargar archivos .env
como variables de ambiente Lambda.
Por otro lado, usaremos el plugin serverless-bundle para permitirnos escribir nuestras funciones Lambda usando un sabor de JavaScript que es similar a aquel que vamos a usar en nuestra aplicación frontend en React.
Veamos esto en detalle.
For help and discussion
Comments on this chapter