Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
NotificationsYou must be signed in to change notification settings

curso-serverless-lambda-APIGateway/crud-mysql-rds

Repository files navigation

  1. Inicialización del proyecto
  2. Creacón de instancia MySQL con RDS en AWS
  3. Creación de la tabla
  4. Configurar security groups desde serverles.yml
  5. Archivo de configuración para crear la conexión a la base de datos
  6. Obtener todos los registros
  7. Obtener un registro
  8. Añadir un registro
  9. Actualizar un registro
  10. Eliminar un registro

1. Inicialización del proyecto

Creamos el proyecto mediante el comando

sls create -t aws-nodejs -n curso-sls-crud-rds

Iniciamos node con

npm init -y

Instalamos las dependencias que vamos a utilizar:

npm install --save mysql querystring serverless-offline


2. Creacón de instancia MySQL con RDS en AWS

Creamos la instancia a través de la consola AWS dentro del servicio RDS como MySQL.

  1. Establecemos el id de la instancia, usuario y contraseña.
  2. Elegimos free tier y mantenemos los parámetros por defecto.
  3. Establecemos que la base de datos sea pública dentro de los parámetros de configuración avanzados para poder trabajar con ella desde un cliente local. En este caso será necesario dar acceso a nuestra máquina mediante el security group por defecto que se ha establecido.

En la lambda, en la pestaña de permisos, creamos un nuevo rol y establecemos la vpc, al menos dos subnets y el security group. Necesitaremos los IDs en el siguiente punto para automatizar este paso en la creación de nuevas lambdas.


3. Creación de la tabla

Desde un cliente MySQL creamos la tabla:

CREATEDATABASEIF NOT EXISTS curso_sls;CREATETABLEcurso_sls.todos (  idINTPRIMARY KEYNOT NULL AUTO_INCREMENT,  todoVARCHAR(100)NOT NULL,  created_atTIMESTAMPNULL);

4. Configurar security groups desde serverles.yml

Dentro del archivoserverless.yml en la sección deprovider añadimos los datos de la vpc:

provider:name:awsruntime:nodejs12.xvpc:securityGroupIds:      -sg-0f1a58e62dd6456c0subnetIds:      -subnet-05565f251be671231      -subnet-0cec29573390f4ed7

5. Archivo de configuración para crear la conexión a la base de datos

Creamos un nuevo archivoconnection.js.

  1. Definimos las constantes que almacenarán los parámetros para poder realizar la conexión a la base de datos:
constmysql=require('mysql')constconfigDB={host:'curso-sls-rds-mysql.cfuld5lbzlxg.us-east-1.rds.amazonaws.com',user:'curso_sls',password:'secret12',port:'3306',database:'curso_sls',debug:true}
  1. Definimos la función que realizará la conexión:
functioninitializeConnection(config){functionaddDisconnectHandler(connection){connection.on("error",function(error){if(errorinstanceofError){if(error.code==="PROTOCOL_CONNECTION_LOST"){console.error(error.stack);console.log("Lost connection. Reconnecting...");initializeConnection(connection.config);}elseif(error.fatal){throwerror;}}});}constconnection=mysql.createConnection(config);// Add handlers.addDisconnectHandler(connection);connection.connect();returnconnection;}
  1. Instanciamos la conexión y la exportamos:
constconnection=initializeConnection(configDB);module.exports=connection;

6. Obtener todos los registros

Para organizar mejor nuestro código, creamos una nueva carpetacrud y dentro de ella el archivotodos.js que incluirá todas las funciones referentes a la tablatodos.

  1. Establecemos las constantes necesarias para trabajar con la base de datos:
constconnection=require('../connection');constqueryString=require('querystring');
  1. Definimos la función que realizará la consulta y devolverá los datos:
module.exports.findAll=(event,context,callback)=>{context.callbackWaitsForEmptyEventLoop=false;constsql='SELECT * FROM todos';connection.query(sql,(error,rows)=>{if(error){callback({statusCode:500,body:JSON.stringify(error)})}else{callback(null,{statusCode:200,body:JSON.stringify({todos:rows})})}})};
  1. Definimos la función dentro del archivoserverless.yml
functions:findAll:handler:crud/todos.findAllevents:    -http:path:todosmethod:get

7. Obtener un registro

  1. Creamos una nueva función entodos.js
module.exports.findOne=(event,context,callback)=>{context.callbackWaitsForEmptyEventLoop=false;constsql='SELECT * FROM todos WHERE id = ?';connection.query(sql,[event.pathParameters.todoId],(error,row)=>{if(error){callback({statusCode:500,body:JSON.stringify(error)})}else{callback(null,{statusCode:200,body:JSON.stringify({todo:row})})}})};
  1. Añadimos la nueva función al archivoserverless.yml
findOne:handler:crud/todos.findOneevents:    -http:path:todos/{todoId}method:get

8. Añadir un registro

  1. Creamos la función para añadir un registro dentro del archivotodos.js
module.exports.create=(event,context,callback)=>{context.callbackWaitsForEmptyEventLoop=false;constbody=queryString.parse(event['body']);constdata={todo:body.todo}constsql='INSERT INTO todos SET ?';connection.query(sql,[data],(error,result)=>{if(error){callback({statusCode:500,body:JSON.stringify(error)})}else{callback(null,{statusCode:200,body:JSON.stringify({res:`Tarea insertada correctamente con id${result.insertId}`})})}})};
  1. Actualizamos el parámetrofunctions dentro del archivoserverless.yml para incluir la función que acabamos de definir:
create:handler:crud/todos.createevents:    -http:path:todosmethod:post

9. Actualizar un registro

  1. Añadimos la nueva función al archivotodos.js
module.exports.update=(event,context,callback)=>{context.callbackWaitsForEmptyEventLoop=false;constbody=queryString.parse(event['body']);constsql='UPDATE todos SET todo = ? WHERE id = ?';connection.query(sql,[body.todo,event.pathParameters.todoId],(error,result)=>{if(error){callback({statusCode:500,body:JSON.stringify(error)})}else{callback(null,{statusCode:200,body:JSON.stringify({res:`Tarea actualizada correctamente`})})}})};
  1. Actualizamosfunctionsserverless.yml para incluir la nueva función
update:handler:crud/todos.updateevents:    -http:path:todos/{todoId}method:put

10. Eliminar un registro

  1. Añadimos la nueva función al archivotodos.js
module.exports.delete=(event,context,callback)=>{context.callbackWaitsForEmptyEventLoop=false;constsql='DELETE FROM todos WHERE id = ?';connection.query(sql,[event.pathParameters.todoId],(error,result)=>{if(error){callback({statusCode:500,body:JSON.stringify(error)})}else{callback(null,{statusCode:200,body:JSON.stringify({res:`Tarea eliminada correctamente`})})}})};
  1. Actualizamosfunctions enserverless.yml para incluir la nueva función
delete:handler:crud/todos.deleteevents:    -http:path:todos/{todoId}method:delete

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp