Miguel Vazquez
Deberían de eliminar este curso o actualizarlo, ya no es compatible con la version 4 de Serverless Framework
Crear tu primera aplicación con Serverless Framework es más sencillo de lo que parece: con un par de comandos puedes desplegar una API pública, escalable y lista para producción en AWS. Aquí verás cómo construir un Hola Mundo funcional y entender cada archivo que lo hace posible.
Esta guía es para desarrolladores que ya conocen la teoría serverless y quieren dar el salto a la práctica sin perderse en configuraciones.
¿Cómo se invoca Serverless Framework desde la terminal?
Lo primero que debes saber es que la herramienta responde a dos palabras clave equivalentes: serverless o sls. Da igual cuál uses, el resultado es el mismo.
Al ejecutar serverless sin argumentos, la CLI te muestra una lista de plantillas creadas por la comunidad para arrancar rápido: opciones para Node.js, Python, integraciones con SQS y más [01:35]. Son útiles, pero en este caso vamos a usar una plantilla personalizada alojada en GitHub.
¿Qué diferencia hay entre serverless y sls? Ninguna. Son alias del mismo comando de la CLI de Serverless Framework. Puedes usar el que prefieras.
Un truco que te va a salvar muchas veces: ejecuta serverless --help para ver todos los comandos disponibles [02:30]. Ahí aparece el que necesitamos ahora, create, que sirve para iniciar un nuevo servicio.
¿Qué archivos componen una aplicación serverless mínima?
Al crear el proyecto con serverless create --path <nombre> --template-url <repo>, se genera una carpeta con tres archivos clave [03:25]. Cada uno cumple una función específica.
El package.json y la dependencia principal
El package.json no tiene mucho misterio: es el típico de cualquier aplicación JavaScript. Lo único relevante es la dependencia de desarrollo de serverless en versión 3.21.0 [04:30].
El handler.js y la lógica de la función
El archivo handler.js contiene la lógica que se ejecutará en la nube. Presta atención al nombre, porque luego lo vamos a referenciar.
Dentro encontrarás una función flecha asíncrona que recibe dos parámetros: event y context. Estos objetos vienen de AWS Lambda y aunque no los usemos en este ejemplo, deben estar presentes para que Lambda ejecute la función correctamente [05:20].
La lógica es mínima: retorna un JSON con statusCode: 200 y un body con un string. Al final se exporta la función hello, nombre que también será importante recordar.
El serverless.yaml y sus secciones obligatorias
Este es el archivo más importante. Aquí solo aparecen tres secciones porque no todas son obligatorias:
Dentro de functions hay un campo llamado handler con el valor handler.hello. La primera parte coincide con el nombre del archivo (handler.js sin extensión) y la segunda con el nombre de la función exportada [07:15]. Si tuvieras más funciones como bye o hola, las referenciarías igual: handler.bye.
¿Qué es el handler en Serverless Framework? Es la referencia que conecta la configuración con tu código. Sigue el formato
nombreArchivo.nombreFuncióny le indica a Lambda qué ejecutar.
¿Cómo se configuran los eventos que disparan una Lambda?
Una función Lambda no se ejecuta sola. Necesita un evento que la dispare, y eso se define dentro de cada función en el serverless.yaml.
En este Hola Mundo el evento es HTTP, con método GET y path /hello [08:00]. Eso significa que cualquier petición GET a esa ruta invocará tu función. Más adelante verás eventos basados en colas, schedules o cambios en bases de datos.
¿Cómo desplegar una aplicación con serverless deploy?
Una vez tienes los archivos, el despliegue se hace con un solo comando: serverless deploy [09:30]. Eso sí, debes ejecutarlo desde la carpeta donde está tu serverless.yml.
Al correrlo, la CLI te muestra información valiosa:
dev. El stage sirve para manejar múltiples ambientes.us-east-1.Aquí pasa algo interesante: aunque solo definiste una función, Serverless Framework crea 9 recursos en AWS por debajo [11:10]. Eso incluye permisos, logs, el API Gateway y más. Esa es la magia del framework: te ahorra horas de configuración manual.
¿Qué es CloudFormation y por qué aparece al desplegar? Es el servicio de AWS que crea infraestructura como código. Serverless Framework lo usa internamente para provisionar todo lo que tu app necesita.
¿Cómo verificar que la API serverless funciona?
Al terminar el despliegue, la CLI te entrega una URL pública con tu endpoint GET. Si la abres en el navegador, verás el mismo JSON que definiste en handler.js [12:40].
El resumen final muestra la función hello_world desplegada con un peso de 106 bytes. Eso es todo: ya tienes una API pública, escalable, capaz de atender mucho tráfico y alineada con varios pilares del Well-Architected Framework de AWS.
Si llegaste hasta aquí, acabas de desplegar tu primera app serverless real. Cuéntame en los comentarios qué función te gustaría construir como siguiente paso.
Siempre cambio los nombres para saber si estoy entendiendo como se conecta cada archivo, así quedó mi handles.js
const hello = async (event, context) => { return { statusCode: 200, body: JSON.stringify({ message: "Hello World - Serverless Framework AWS" }), }; }; module.exports = { hello, };
Y así quedo mi serverless.yml :
service: hello-world provider: name: aws runtime: nodejs18.x functions: hello-world: handler: handler.hello events: - http: path: hello method: GET
Miguel Vazquez
Deberían de eliminar este curso o actualizarlo, ya no es compatible con la version 4 de Serverless Framework
Juan Enrique Chaparro Guarnizo
No esta sirvirendo esta clase
Edgar Diego Piña Vargas
Que duda te surgio?
Rubén Augusto Duarte Ortiz
Para solucionar el error
✖ Configuration file not found in directory ```Instale: ```js npm i serverless@3.39.0 -g ```Y me funciono.
JUAN PABLO MAYORGA MENDIETA
Iniciar proyecto con Serverless Framework
El objetivo es crear la primera aplicación serverless(hola mundo) se siguen los siguientes pasos:
Se crea una carpeta en donde se almacenaran los archivos del proyecto
Crear el proyecto desde consola invocando el comando de serverless framework (serverless o sls abreviado) si se seleciona una plantilla de la lista se crea un nuevo proyecto desde esa plantilla, para ver la ayuda ssl help. Con el siguiente comando se crea un proyecto basado en una plantilla en github, tambien se indica su path.
serverless create --path hola-mundo --template-url https://github.com/platzi/serverless-framework/tree/main/hola-mundo
Se crea la estructura de archivos y cada uno tiene su sentido:
Desplegar la Aplicación
En la carpeta donde se encuentra el archivo serverless.yaml ejecutar el comando de despliegue
cd hola_mundo sls deploy
Es importante mencionar que el cliente de AWS debe estar configurado a nivel global para poder hacer el despliegue
al finalizar se muestra la ruta que se definió en los recursos del archivo serverless.yaml
Haward Tillero Jimenez
Excelente resumen
Armando Barragán Pacheco
Hola. También funciona actualmente el siguiente comando:
npx serverless
Gonzalo Bartolome Guaimas
Si a la hora de hacer el deploy les tira error, deben de configurar su cuenta aws con el comando:
aws confgure
Deben de proporcionar su AWS Access key ID y AWS Secret Access Key. Esas claves las pueden generar luego de crear un usuario en IAM
Yor Jaggy Castaño Pino
ProfesorExcelente Gonzalo! Tal como mencionas el
aws configure
nos ayuda a configurar el CLI de AWS. Esto lo vimos en esta clase de preparacion del entorno de trabajo en el minuto 6:00
Cuando inserto el comando “serverless deploy” me encuentro con el error
Error: CREATE_FAILED: ServerlessDeploymentBucketPolicy (AWS::S3::BucketPolicy) API: s3:PutBucketPolicy Access Denied
Juan Camilo Guzman Sandoval
Estoy teniendo este error, con los permisos de mi IAM en aws-cli, deberia haber un clase para hablar de los permisos y usuarios q necesitamos.
User: arn:aws:iam::#:user/aws-cli-s3 is not authorized to perform: cloudformation:DescribeStacks on resource: arn:aws:cloudformation:us-east-1:#:stack/hola-mundo-dev/* because no identity-based policy allows the cloudformation:DescribeStacks action
Juan Camilo Guzman Sandoval
Listo, Aqui podran encontrar que tipo de credenciales necesita el IAM user, examentente es AdministratorAccess por otro lado tambien hay un gist con lo permisos minimos
Yor Jaggy Castaño Pino
ProfesorQue buen aporte Juan Camilo, por ahora para efectos practicos del curso usamos permisos bastante holgados, pero dejame refinar este tema para que sea claro para toda la comunidad! :rocket:
Te hare mention en la clase de lectura que agreguemos :heart:
David Ramón Núñez Benítez
A dia de hoy, no se soporta el runtime nodejs nodejs14.x, habria que actualizarlo en el archivo serverless.yml para usar una version nueva de node (nodejs20.x por ejemplo)
David Andres Duarte Clavijo
Solo es cambiar en tu serverless.yml el nodejs14.x por una versión que si sea soportada, en mi ejemplo puse nodejs18.x. Así permite realizar el serverless deploy sin ningún problema
Fabián Antonio Salgado Sepúlveda
La instrucción:
serverless create --path hola-mundo --template-url
Me genera este error:
Juan Camilo Salazar Serna
X2
Juan Camilo Salazar Serna
Aunque no pude correr el comando, si descargas los 3 archivo de la carpeta del repo y los pones en donde quieras que este el proyecto.
y en el archivo serverless.yml, cambias el runtime de nodejs14.x a nodejs20.x. (la vesrion 14 ya no la soporta aws lambda)
Al correr el comando serverless deploy en la ruta donde descargaste los archivos**,** se podrá seguir con el ejercicio
Luis Felipe Castaño Villada
Recurso para obtener el Access Key ID: https://docs.aws.amazon.com/powershell/latest/userguide/pstools-appendix-sign-up.html
Juan Carlos Erazo Ayala
Gracias
Luis Alberto Burgos Vilca
Hola con todos, me quedo en la ejecución de este comando, y me muestra el siguiente mensaje:
Llevo varios días trabado aquí, si alguien me puede ayudar por favor
Luis Antonio Escalante Gutiérrez
Un poco desactualizado el curso con la version serverless-framework v4. Los comandos ya no existen sin crear login y cambian los command por otros alias.
DANIEL VILLALOBOS
Para la versión Serverless Framework 4.33.0 tuve que saltearme algunos pasos del video porque no me funcionaban igual.
Lo que hice fue bajar directamente un template nuevo de “Hello World” desde Serverless y ahí funcionó todo perfecto.
Estos fueron los pasos:
1️⃣ sls --help
2️⃣ sls login aws → previamente tenés que haber creado el usuario en IAM y configurado tus credenciales de AWS.
3️⃣ Seleccionás el template: AWS / Node.js / Simple Function
4️⃣ Hacés la autenticación contra AWS
5️⃣ Después de eso, si ejecutás nuevamente sls --help, ya te aparece el menú completo con los comandos principales:
Main commands deploy Deploy a Serverless service deploy function Deploy a single function from the service info Display information about the service dev Start dev mode in this service invoke Invoke a deployed function or agent logs
Con ese template nuevo quedó funcionando todo de 10
Alvaro Eduardo Garzón Pira
Hola team platzi, ¿Han considerado actualizar este curso con serverless v4? Cambian varias cositas
David Victoria
Estaría increíble que actualizaran este curso, no lo abandonen :(
Fabián Antonio Salgado Sepúlveda
La instrucción:
serverless create --path hola-mundo --template-url
Me genera este error:
Edgar Diego Piña Vargas
Yo utilice git clone y luego dentro de la carpeta que contiene el yaml ya se pueden efectuar los comandos de sls, es mas practico
Edgar Diego Piña Vargas
Para los que les de error el sls deploy, tengan en cuenta que antes de que sls pueda acceder a su cuenta de aws, debe tener alguna credencial que se lo permita, hay que crear un usuario en aws para generar un secret key y un access key, despues con el comando aws configure en el entorno donde se este trabajando se copian los campos y listo!