Herramientas y Requerimientos
- Bases en Nodejs
- Cuenta en AWS, vamos a estar usando aws CLI y AWS IAM
- Visual Studio Code
- Serverless Framework.
Project Setup
mkdir aws-lambda-crud
cd aws-lambda-crud
npm init -y
¿Qué es Serverless Framework?
El framework serverless nos permitira configurar nuestras funciones Serverless a traves de codigo, asi como tambien nuestra API Gateway.
AWS Lambda Setup
ve al servicio AWS Lambda,
Cuando creamos una funcion en AWS Lambda, para poder ejecutarla necesitamos de AWS API Gateway, el cual se encarga de direccionar las peticiones a sus correspondientes funciones.
Otro asunto que debes saber tambien es que las funciones estan relacionadas con la region de AWS en donde son creadas, esto quiere decir que si creas una funcion en us-west-2 esta no se vera en el resto de regiones.
IAM
AWS tiene un servidio llamada IAM el cual nos permite establecer que usuarios pueden conectarse a nuestra aplicacion y definir lo que tienen permitido hacer.
Para poder hacer esto debemos crear una nueva cuenta en IAM.
User's name: serverless-tutorial
Programatic Access
Group's Name: serverless-tutorial
Administrator Access
Create User
AWS CLI
Puedes instalar AWS CLI usando los siguientes enlaces:
- https://aws.amazon.com/cli/
- https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
una vez instalado puedes comprobar la instalacion usando
aws --version
lo siguiente es otorgarle permisos a nuestra consola de AWS, con el usuario IAM que hallamos creado:
aws configure
Luego copia el Access Key y el Secret Key que hallas obtenido de AWS IAM, al crear tu nuevo usuario.
estos datos debes mantenerlos seguros.
Serverless Framework Setup
npm install -g serverless
creemos un proyecto:
serverless
Nodejs HTTP API
Nombre: node-aws-lambda-crud
Do you want to login to serverless dashboard? No
Do you want to deploy your code? No
en serverless.yml, se especifica la arquitectura de nuestra aplicacion.
agrega la region para saber a donde sera subida
service: node-aws-lambda-crud
frameworkVersion: '2 || 3'
provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: '20201221'
region: us-west-2
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /
method: get
functions, son las funciones que podemos añadir. nombredelarchivo: function
para subir el codigo usaremos:
serverless deploy --verbose
esto lo que hará es que creara toda la infraestructura en los servicios de AWS como el proyecto en AWS Lambda y en AWS Gateway
Una vez terminado de subir puedes hacer una peticion al Endpont creado. lo puedes encontrar donde dice:
endpoints:
GET:
ademas puedes verlo visitando API Gateway, asegurate de seleccionar la region correcta de aws para que puedas verlo.
src folder
src/helo.js
functions: hello: handler: src/hello.hello events: - httpApi: path: / method: get
sls deploy --verbose
GET endpoint
DynamoDB
resources: Resources: TaskTable: Type: AWS::DynamoDB::Table Properties: TableName: TaskTable BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: id AttributeType: S KeySchema: - AttributeName: id KeyType: HASH
si vas a DynamoDB veras ahora una table
npm i uuid aws-sdk
create task
con el objetivo de obtener permisos actualiza el yml, y copia el id de la table a la que podra alterar:
provider: name: aws runtime: nodejs12.x lambdaHashingVersion: '20201221' region: us-west-2 iamRoleStatements: - Effect: Allow Action: - dynamodb:* Resource: - arn:aws:dynamodb:us-west-2:793282269851:table/TaskTable
en cloudwatch, puedes ver algunas de los logs creados por las funciones.
get taks
get task
update
delete task
middlewares
middy
npm i @middy/core @middy/http-json-body-parser
https://www.npmjs.com/package/middy https://github.com/middyjs/middy
añade el middleware donde sea necesario procesar el cuerpo de la peticion.
esto es similar a usar bodyParser en express.