Guía Completa de serverless.yml: Descripción y Uso en Proyectos
¿Qué es serverless.yml
?
El archivo serverless.yml
es el núcleo de la configuración en Serverless Framework. Este archivo utiliza YAML para describir y gestionar la infraestructura y los recursos que conforman tu aplicación serverless, como funciones Lambda, endpoints de API Gateway y bases de datos DynamoDB.
Al tratarse de una herramienta basada en Infraestructura como Código (IaC), permite automatizar y simplificar el despliegue, la gestión y la escalabilidad de aplicaciones sin servidor.
Principales Propiedades de serverless.yml
A continuación, se describen las secciones más importantes de este archivo:
1. Service
Define el nombre de tu servicio o proyecto.
service: gestion-productos
2. Provider
Especifica el proveedor de servicios en la nube y sus configuraciones.
provider:
name: aws
runtime: nodejs18.x
region: us-east-1
environment:
DYNAMODB_TABLE: ProductosTable
3. Functions
Lista las funciones Lambda que forman parte del servicio y sus configuraciones.
functions:
agregarProducto:
handler: funciones/agregar.handler
events:
- http:
path: productos
method: post
obtenerProductos:
handler: funciones/obtener.handler
events:
- http:
path: productos
method: get
4. Resources
Permite crear recursos adicionales como bases de datos o buckets de S3 mediante plantillas en formato YAML o JSON.
resources:
Resources:
ProductosTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ProductosTable
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
5. Custom
Sección para definir variables personalizadas o plugins.
custom:
stage: ${opt:stage, 'dev'}
tableName: ${self:provider.environment.DYNAMODB_TABLE}
6. Plugins
Permite agregar extensiones para ampliar las capacidades de Serverless Framework.
plugins:
- serverless-offline
- serverless-dynamodb-local
Ejemplo Práctico: API RESTful con Serverless Framework
Objetivo:
Construir una API REST para gestionar productos utilizando AWS Lambda y DynamoDB.
|-- gestion-productos/
|-- funciones/
|-- agregar.js
|-- obtener.js
|-- serverless.yml
Código del Archivo serverless.yml
service: gestion-productos
provider:
name: aws
runtime: nodejs18.x
region: us-east-1
environment:
DYNAMODB_TABLE: ProductosTable
functions:
agregarProducto:
handler: funciones/agregar.handler
events:
- http:
path: productos
method: post
obtenerProductos:
handler: funciones/obtener.handler
events:
- http:
path: productos
method: get
resources:
Resources:
ProductosTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ProductosTable
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
plugins:
- serverless-offline
- serverless-dynamodb-local
custom:
stage: ${opt:stage, 'dev'}
Paso 1: Crear Función Lambda
Archivo agregar.js
:
const AWS = require('aws-sdk');
const dynamoDB = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const { id, nombre, precio } = JSON.parse(event.body);
const nuevoProducto = { id, nombre, precio };
const params = {
TableName: process.env.DYNAMODB_TABLE,
Item: nuevoProducto,
};
try {
await dynamoDB.put(params).promise();
return {
statusCode: 201,
body: JSON.stringify({ mensaje: 'Producto agregado', producto: nuevoProducto }),
};
} catch (error) {
return { statusCode: 500, body: JSON.stringify({ error: 'Error al guardar el producto' }) };
}
};
Paso 2: Desplegar el Proyecto
1. Instalar dependencias:
npm install
2. Desplegar la infraestructura:
serverless deploy --stage dev
Beneficios de Usar serverless.yml
- Automatización: Todo el proceso de configuración se gestiona en un solo archivo.
- Escalabilidad: Fácil adaptación para proyectos más grandes.
- Portabilidad: Reproducibilidad en diferentes entornos.
- Colaboración: Facilita el trabajo en equipo al mantener configuraciones centralizadas.
Conclusión
El archivo serverless.yml
es esencial para cualquier proyecto que utilice Serverless Framework. Proporciona una forma estructurada de gestionar la infraestructura como código y permite implementar aplicaciones de manera eficiente. Si estás desarrollando proyectos serverless, dominar serverless.yml
es clave para tu éxito.
Referencias: