
Desplegando un Sitio Web HTML con AWS S3 y Route 53
Mostraremos en este post las capacidades de AWS SAM (una alternativa al ya conocido Serverless Framework) para la creación de una API REST. Para ello vamos a hacer uso de una plantilla de AWS SAM que nos va a permitir agilizar el proceso de creación de la API REST. Esta plantilla se encuentra en este repositorio de GitHub:
template-ts-sam
Pre-requisitosPara poder seguir este post es necesario tener instalado en el equipo:
- Node.js
- npm
- AWS CLI
- AWS SAM CLI
Para crear la API REST vamos a hacer uso de la plantilla de AWS SAM que se encuentra en el repositorio de GitHub indicado anteriormente. Para ello vamos a ejecutar el siguiente comando:
git clone https://github.com/Start-Cloud/template-ts-sam
Una vez descargado el repositorio, abrimos el proyecto con nuestro editor de código favorito y vamos a modificar el fichero template.yaml para que se ajuste a nuestras necesidades.
En este fichero vamos a modificar los siguientes parámetros:
Description: Descripción de la API REST.
Parameters/company/Default: Nombre de la empresa, en nuestro caso colocamos mycompany.
Parameters/project/Default: Nombre del proyecto, en nuestro caso colocamos myproject.
Si queremos modificar el nombre del stack de CloudFormation que se va a crear, debemos modificar moficar el archivo samconfig.toml y cambiar el valor de la propiedad stack_name. En nuestro caso lo dejamos con el valor por defecto.
Instalación de dependenciasPara instalar las dependencias del proyecto vamos a ejecutar el siguiente comando:
npm install
Recursos de la API REST
Para crear recursos con AWS SAM debemos hacer uso de la propiedad Resources del fichero template.yaml.
En este caso la plantilla crea los siguientes recursos:
NodeModulesLayer
: Un layer de AWS Lambda que contiene las dependencias de nuestro proyecto. Este layer apunta a la carpeta layer del proyecto donde contiene un fichero package.json con las dependencias del proyecto.CloudWatchLogsGroup
: Un grupo de logs de CloudWatch para la función lambda, en este caso se crea un grupo de logs por cada función lambda.ImcAPI
: Una API REST de AWS API Gateway.ImcFunction
: Una función lambda que se va a ejecutar cuando se invoque la API REST, enb nuestro caso el handler de la función lambda esMedicalToolController.bodyMassIndex
que se encuentra en el fichero MedicalToolController.ts de la carpetasrc/controllers
. Esta función lambda se va a ejecutar cuando se invoque la API REST con el método POST y la ruta/imc
.
Como vamos a usar layer es necesario que en la Metadata se debe especificar que dependencias se deben considerar externas, en este caso se consideran externas las siguientes dependencias:
@start-cloud/common-library-serverless
: Librería de uso común para proyectos serverless.joi
: Librería para la validación de datos.
Como primer paso para desplegar nuestra API REST, AWS SAM necesita hacer build de nuestro proyecto, para ello ejecutamos el siguiente comando:
sam build
Una vez que el proyecto ha sido construido, podemos desplegar nuestra API REST con el siguiente comando:
sam deploy --config-env "dev" --no-confirm-changeset
En este comando estamos indicando que queremos desplegar la API REST en el
entorno dev
y que no queremos confirmar los cambios que se van a
realizar en CloudFormation.
Una vez que la API REST ha sido desplegada, podemos invocarla con el siguiente comando:
curl -X POST https://<api-id>.execute-api.<region>.amazonaws.com/dev/imc -d '{"height": 1.80, "weight": 80}'
En este comando estamos invocando la API REST con el método POST
y la
ruta /imc
y estamos enviando los siguientes datos en el body de la
petición:
{
"height": 1.8,
"weight": 80
}
Conclusiones
En este post hemos visto como crear una API REST con AWS SAM, para ello hemos hecho uso de una plantilla de AWS SAM que nos ha permitido agilizar el proceso de creación de la API REST. AWS SAM se presenta como una alternativa al ya conocido Serverless Framework ahora que la V.4 ha introducido una estructura de pagos por su uso.
Son parte de las herramientas que disponemos para crear soluciones que impulsan el crecimiento de las empresas que quieren entrar en la nube, así como también las que ya están aprovechando sus beneficios, de parte del equipo de START CLOUD te invitamos a conocer más.
Referencias