Guía Completa de serverless.yml: Descripción y Uso en Proyectos

Guía Completa de serverless.yml: Descripción y Uso en Proyectos

¿Qué es serverless.yml?

GitHub - threadheap/serverless-ide-vscode: Serverless IDE: Enhanced support  for AWS SAM and CloudFormation in VS Code

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

  1. Automatización: Todo el proceso de configuración se gestiona en un solo archivo.
  2. Escalabilidad: Fácil adaptación para proyectos más grandes.
  3. Portabilidad: Reproducibilidad en diferentes entornos.
  4. 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:

Facebook
X
LinkedIn
Reddit
Pinterest
Threads

Post relacionados

Post recientes

Search