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.

https://www.serverless.com/

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:

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.