Pablo Ortiz
Stiven Ramírez Arango
Funcionó de maravilla. ¡Gracias!
Alejandro Chavez
Gracias, excelente. Lo unico que al final es sls dynamodb install
Si vas a desarrollar funciones serverless en AWS desde Windows, necesitas un setup completo que combine Java, Python, Node.js, Git, AWS CLI y Serverless Framework. Esta guía te muestra cómo dejar tu máquina lista para ejecutar el proyecto tanto en local como en la nube, sin perder tiempo en errores de configuración.
¿Qué herramientas necesitas para trabajar con Serverless Framework?
Antes de instalar nada, conviene entender por qué cada pieza importa en el flujo de desarrollo serverless.
¿Serverless Framework solo funciona con JavaScript? No. Es agnóstico al lenguaje, así que puedes desarrollar Lambdas en Python, JavaScript, Java y otros, y combinarlos en un mismo proyecto.
¿Cómo instalar Java y configurar JAVA_HOME en Windows?
La instalación de Java es operativa: descargas el MSI Installer desde Oracle, creas tu cuenta y ejecutas el típico next, next, next. La parte que muchos olvidan viene después.
Java requiere una variable de entorno llamada JAVA_HOME que apunte a la ruta exacta del ejecutable. Aunque el instalador suele crearla, vale la pena verificarlo manualmente [02:30].
Pasos para crear JAVA_HOME
JAVA_HOME y pega la ruta como valor.java --version para confirmar.Si el comando responde con la versión, ya tienes Java listo para que DynamoDB local lo use.
¿Cómo configurar AWS CLI y las llaves de acceso?
Descarga el instalador desde la URL oficial de AWS CLI usando el comando msi.exe que aparece en la documentación, o pega el enlace en tu terminal para que se ejecute automáticamente. Sigue la instalación estándar [04:10].
Una vez instalado, abre una terminal nueva y ejecuta aws configure. El sistema te pedirá cuatro datos.
us-east-1 como región por defecto.json para mejor legibilidad.¿Necesito llaves reales de AWS para correr el proyecto en local? No para desarrollo local, pero sí cuando vayas a desplegar. En producción, las llaves dummy fallarán al intentar comunicarse con servicios reales de AWS.
¿Cómo clonar el repositorio con Git e instalar Node.js?
Descarga el instalador standalone de 64 bits de Git para Windows. Durante la instalación encontrarás preguntas sobre el editor por defecto, la rama maestra y el comportamiento de checkout. Deja la configuración recomendada en cada paso.
Para verificar Git, abre una terminal nueva y ejecuta git clone seguido de la URL del repositorio del curso. Esto te trae la carpeta serverless-framework con la estructura base del proyecto [06:45].
Instalación de Node.js LTS
Descarga la versión LTS (Long Term Supported) desde nodejs.org porque ofrece mayor estabilidad a largo plazo. Acepta los términos y ejecuta el instalador con la configuración por defecto.
Valida con node en una terminal nueva. Deberías entrar al REPL y poder ejecutar instrucciones de JavaScript como una suma simple.
¿Cómo instalar Python, Postman y Serverless Framework?
Para Python descarga la versión 3.11 desde python.org y ejecuta Install now sin personalizar. Verifica con el comando python en una terminal nueva, donde podrás correr un print("Hola, mundo") directamente [09:20].
Postman se instala desde postman.com/downloads. No pide directorio ni configuración: ejecuta el archivo, pulsa Skip & Go to the Application y queda listo para probar peticiones HTTP.
Instalación global de Serverless Framework
Con Node.js disponible, ejecuta el comando que aparece en la documentación oficial.
bash npm install -g serverless
La bandera -g instala el framework de forma global, lo que evita tener que reinstalarlo en cada carpeta donde trabajes.
¿Qué hace el comando
npm installdentro del proyecto? Lee el archivopackage.jsony descarga todas las dependencias declaradas, comoaws-sdk,serverless,serverless-offlineyserverless-dynamodb-local.
¿Cómo verificar que el proyecto serverless corre en local?
Ubícate en la carpeta del proyecto clonado y corre npm install. Esto descarga el árbol completo de dependencias, incluyendo dos plugins clave: serverless-offline, que ejecuta el proyecto sin desplegar a la nube, y serverless-dynamodb-local, que simula DynamoDB en tu máquina.
Luego instala el ejecutable de DynamoDB con el siguiente comando.
bash sls dynamodb install
Finalmente arranca el servidor local con sls offline start. Verás en consola que DynamoDB inicia en el puerto 8000 y que Serverless Offline levanta el stage dev con todas las URL de los endpoints listas [13:50].
Copia una de esas URL en Postman, envía una petición y deberías recibir un 200 OK en aproximadamente 997 milisegundos. Con esa respuesta positiva, confirmas que Java, Python, Node.js, AWS CLI y Serverless Framework están integrados y funcionando.
¿Qué herramienta te dio más problemas al configurar tu entorno? Cuéntame en los comentarios cómo resolviste tu instalación.
Pablo Ortiz
Stiven Ramírez Arango
Funcionó de maravilla. ¡Gracias!
Alejandro Chavez
Gracias, excelente. Lo unico que al final es sls dynamodb install
Raúl Ortega Larsen
JORGE ALEXANDER MÚNERA CANABAL
Parcero excelente aporte. Se debería explicar en la clase esto, me parece importante, ademas del hecho que si estamos ingresando a AWS con nuestro usuario root no es recomendable estar colocando nuestros acces keys por ahí en código.
Luis Rodolfo Altuve Cáceres
A la fecha, 17/07/2023, funciona el procedimiento indicado.
Yor Jaggy Castaño Pino
ProfesorJuan Camilo Guzman Sandoval
En Ubuntu tuve ese error, se soluciono facil con los comandos, gracias
Jerson Hernán Uribe Montenegro
Seguí tu recomendación, pero luego de haber ejecutado el npm audit fix --force, me aparece el siguiente error:
Error:
TypeError: Class extends value undefined is not a constructor or null
Gerardo Ferreyra
Si te ha salido el error UnrecognizedClientException: The Access Key ID or security token is invalid. al ejcutar el comando sls offline start, para solucionarlo, debemos:
Este problema puede ocurrir por:
Christian David Castro Martínez
excelente aporte, muchas gracias por el dato me sirvió mucho
Armnell Jackson Gómez Garcia
Muchas gracias...
Haward Tillero Jimenez
Si no les funciona en windows usando PowerShell:
sls --help
Ejecuten el siguiente comando para remover el alias y se soluciona:
Remove-Item alias:sls
Elvis Muñoz
gracias, esto me funciono
JPG
Buenas, me esta saliendo este error al ingresar el ultimo comando "sls offline start"
UnrecognizedClientException: The Access Key ID or security token is invalid.
Sera porque el usuario no tiene permisos? Donde verifico eso? Muchas gracias
Percy Alex Orihuela Rosales
JPG, lograste resolver este inconveniente? A mi me sale lo mismo pero al ejecutar el primer get: × Unhandled exception in handler 'get-users'. × UnrecognizedClientException: The Access Key ID or security token is invalid. × The Access Key ID or security token is invalid. Por favor, me avisas
Jose Mejia
Esto es porque el curso esta desactualizado ya que AWS ha cambiado como se validan las Keys para DynamoDB
Al dia de hoy, la version actual de npm 22 no es compatible con los paquetes del tipo serverless offline, la recomendacion segun la IA es usar la version de npm 20, la cual si lo permite, hay un adicional y es que hay que comentar el plugin del serverless.yaml:
plugins:
# - serverless-offline
- serverless-dynamodb-local
asi y posteriormente instalar el paquete por aparte:
npm install serverless-offline@12.0.4 --save-dev
ya con eso funciona el sls --help y seguir avanzando con la instalacion de dynamoDB
Jerson Hernán Uribe Montenegro
A fecha de hoy, 28 de noviembre del 2024, hay muchos errores en el proceso de instalación, Serverless framework cambió los comandos y se torna muy difícil avanzar. Creo que tendré que abandonar el curso :(
PAULO CESAR GALARZA
Acabo de hacer un fork del proyecto con las configuraciones necesarias para que no de error y documentado todo el proceso para su configuración en caso de requerir. Les dejo el link del repositorio:
Julio Cesar Toala Pin
Gracias!! Funciono
Pablo Ortiz
Por alguna razón serverless framework solo funciona en la terminal cuanto escribo en nombe completo y no cuando escribo "sls", tienen alguna idea de lo que pueda ser?
Yor Jaggy Castaño Pino
ProfesorHola Pablo, cuentame porfa como realizaste la instalacion del framework? usaste el flag -g para indicar que es una instalacion global? Es decir?
npm install -g serverless
La otra razón por la cual puede fallar es por la variable de entorno PATH, puedes validar si tienes tu folder de npm referenciado en la variable de entorno Path?
C:\Users\<NombreDeUsuario>\AppData\Roaming\npm
De igual forma, dejanos mas info:
Juan Restrepo
Profesoranalitica gc
Imposible avanzar, ahora me sale el siguiente error:
Running "serverless" from node_modules Dynamodb Local Started, Visit: http://localhost:8000/shell Error: Unable to initialize main class com.amazonaws.services.dynamodbv2.local.main.ServerRunner Caused by: java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException DynamoDB Local failed to start with code 1
Armando Barragán Pacheco
Me agrada mucho que el profesor dedicara una clase completa a la instrucción de instalación de los softwares que se usarán a lo largo del curso. Hay bastantes estudiantes que estarán usando alguna de estas herramientas por primera vez :smile
silma natera
Jefferson Nalvarte Miranda
Muchas gracias , me sirvió. Solo recordar que para buscar los archivos que debes de cambiar son estos dos y le agregas el "local".
$ grep -R "DEFAULT_ACCESS_KEY" . ./createUsers/handler.js: accessKeyId: 'DEFAULT_ACCESS_KEY', ./getusers/handler.js: accessKeyId: 'DEFAULT_ACCESS_KEY',
Miguel Vazquez
Imposible avanzar, he solucionado al menos 4 errores y no he podido empezar.
Rosenberg Vasquez Rojas
actualicen el curso por favor
Kevin Fiorentino
Pienso que no es necesario que la clase sea tan básica al punto de enseñar a instalar GIT. Si alguien está interesado en hacer este curso, seguramente ya conoce GIT.
Denis Gustavo Garcia
Es impresionante que con la capacidad de tener control de versiones, el maestro entregue un curso tan defectuoso
Alfredo Olmedo
Ante el error
Serverless Framework install sls error:
"cmdlet Select-String at command pipeline position 1
Supply values for the following parameters:
Path[0] "
El error que estás experimentando al intentar instalar Serverless Framework con el comando sls en PowerShell se debe a un conflicto con un alias predeterminado de PowerShell. PowerShell tiene un cmdlet llamado Select-String que también se abrevia como sls. Cuando intentas ejecutar sls, PowerShell intenta ejecutar Select-String en lugar del comando de Serverless Framework.
Para resolver este problema, tienes algunas opciones:
1. **Usar el nombre completo del comando**:
Puedes evitar el conflicto utilizando el nombre completo del comando de Serverless Framework:
```bash
serverless
```
Por ejemplo, para desplegar, usarías:
```bash
serverless deploy
```
2. **Eliminar el alias de PowerShell**:
Si prefieres seguir utilizando sls, puedes eliminar el alias de PowerShell ejecutando el siguiente comando en tu sesión de PowerShell:
```powershell
Remove-Item alias:sls
```
Ten en cuenta que esto solo afectará a la sesión actual de PowerShell. Si deseas eliminar el alias permanentemente, tendrás que agregar ese comando a tu perfil de PowerShell.
3. **Usar otro alias para Serverless Framework**:
En versiones más recientes de Serverless Framework, se ha introducido un alias secundario slss que puedes usar sin conflictos en PowerShell:
```bash
slss
```
Estas soluciones deberían permitirte utilizar Serverless Framework en PowerShell sin problemas¹².
Error: Error getting DynamoDb local latest tar.gz location undefined: 403
Si tienes este error en la instalación de dynamodb plug-in es porque AWS cambio el dominio de descarga del plugin. Para solucionar esto basta con editar manualmente la propiedad de download_url en node_modules/dynamodb-localhost/dynamodb/config.json a https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz y la importación de http a https en node_modules/dynamodb-localhost/dynamodb/installer.js
Luego hacer la instalación normal
serverless install dynamodb
Si después de solucionar el error que menciona @Pablo Ortiz te enfrentas con un error relacionado a: "UnrecognizedClientException: The Access Key ID or security token is invalid.: DynamoDB - Error -" Hay 2 pasos faltantes a corregir que no se mencionan en el video:
- serverless-dynamodb-local por éste otro:
- serverless-dynamodb
Posterior, necesitamos desinstalar el modulo viejo (olvidado por su creador y de dificil comunicación para realizarle cambios) por el nuevo (actualmente con soporte y actualizado) Eso se logra con unos pasos en npm el cual se detallan en el post del repo https://github.com/99x/serverless-dynamodb-local/issues/294#issuecomment-1619297733
En conclusión, los pasos son: 1.1) Uninstall serverless-dynamodb-local, e.g. npm uninstall serverless-dynamodb-local 1.2) Install serverless-dynamodb, e.g. npm install serverless-dynamodb
Con éstos cambios al día de 04 de Julio 2023, funciona correctamente. Cabe resaltar que ésto puede cambiar y NO ES UNA SOLUCION DEFINITIVA, por lo mismo que comenta el profesor de ser una comunidad de código abierto.
Espero le sirva a más de alguno 😄✌
El plugin de dynamodb para Serverless Framework tiene mejoras constantemente, parece ser que en las nuevas versiones disponibles se introdujo un error que genera este comportamiento al hacer la instalación en local.
Si te encuentras con este error a la hora de hacer el
sls dynamodb install
Error:
Protocol "https:" not supported. Expected "http:"
Te recomendamos seguir los siguientes pasos para hacer la instalacion manual: *Recuerda que debes tener instalado wget
wget http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.tar.gz mkdir .dynamodb tar zxvf dynamodb_local_latest.tar.gz -C .dynamodb Info:
Github Issue Thread
Hola, el comando "serverless" te da un buen resultado? Intenta ejecutar "whereis sls" para ver que te sale, si no te sale nada intenta instalar serverless framework de forma global con
npm i -g serverless
usar npx tambien es una manera de llamar el binario, puedes intentarlo:
npx serverless
Dejo mi package.json y .yml actualizados
serverless.yml
service: crud-serverless-users provider: name: aws runtime: nodejs14.x iam: role: statements: - Effect: Allow Action: 'dynamodb:*' Resource: arn:aws:dynamodb:us-east-1:471893938953:table/usersTable plugins: - serverless-offline - serverless-dynamodb package: individually: true patterns: - "!*/**" custom: dynamodb: # If you only want to use DynamoDB Local in some stages, declare them here stages: - dev start: port: 8000 inMemory: true migrate: true # Uncomment only if you already have a DynamoDB running locally # noStart: true functions: get-users: handler: getusers/handler.getUsers package: patterns: - "getusers/handler.js" events: - http: path: users/{id} method: GET request: parameters: paths: id: true create-users: handler: createUsers/handler.createUsers package: patterns: - "createUsers/handler.js" events: - http: path: users method: POST request: schemas: application/json: ${file(schemas/user-schema.json)} update-users: handler: updateUsers/handler.updateUsers package: patterns: - "updateUsers/handler.js" events: - http: path: users/{id} method: PATCH request: parameters: paths: id: true schemas: application/json: ${file(schemas/user-schema.json)} delete-users: handler: deleteUsers/handler.deleteUsers runtime: python3.8 package: patterns: - "deleteUsers/handler.py" events: - http: path: users/{id} method: DELETE request: parameters: paths: id: true resources: Resources: usersTable: Type: AWS::DynamoDB::Table Properties: TableName: usersTable AttributeDefinitions: - AttributeName: pk AttributeType: S KeySchema: - AttributeName: pk KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 S3Bucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead BucketName: bucket-serverless-course-123213 SampleBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref S3Bucket PolicyDocument: Version: "2012-10-17" Statement: - Action: - 's3:GetObject' Effect: Allow Resource: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket - /* Principal: '*'
package.json
{ "name": "hola-mundo", "version": "1.0.0", "description": "", "main": "handler.js", "scripts": { "phoenix": "rm -rf node_modules package-lock.json && npm install", "dynamodb:install": "serverless dynamodb install", "offline": "serverless offline start --stage dev" }, "author": "", "license": "ISC", "devDependencies": { "aws-sdk": "^2.1256.0", "serverless": "^3.40.0", "serverless-dynamodb-local": "^0.2.40", "serverless-offline": "^11.3.0" }, "dependencies": { "serverless-dynamodb": "^0.2.40" } }
Adicionalmente, deben cambiar todos :
dynamoDBClientParams = { region: 'localhost', endpoint: 'http://localhost:8000', accessKeyId: 'DEFAULT_ACCESS_KEY', // needed if you don't have aws credentials at all in env secretAccessKey: 'DEFAULT_SECRET' // needed if you don't have aws credentials at all in env }
por:
dynamoDBClientParams = { region: 'localhost', endpoint: 'http://localhost:8000', accessKeyId: 'local', // needed if you don't have aws credentials at all in env secretAccessKey: 'local' // needed if you don't have aws credentials at all in env }
de esa forma el SDK irá contra la dynamo local.
Espero sea de utilidad