aws-lambda
Framework Serverless
Buscar..
Introducción
El marco de aplicación de código abierto para crear fácilmente arquitecturas sin servidor en AWS Lambda y más. Esta sección incluye, cómo configurar el marco sin servidor para el desarrollo de aplicaciones con ejemplos relevantes.
Observaciones
"Sin servidor" es un marco: https://serverless.com/
Sin servidor
Instalar sin servidor globalmente
npm install serverless -g
Cree una función AWS Lamdba en Node.js
serverless create --template aws-nodejs
Ejemplo de un handler.js
'use strict'; // Your first function handler module.exports.hello = (event, context, cb) => cb(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event } ); // You can add more handlers here, and reference them in serverless.yml
Implementar en la cuenta de AWS en vivo
serverless deploy
Crear una simple operación CRUD
Crear una simple operación CRUD usando Serverless Framework
Instalar el framework Serverless globalmente
npm install serverless -g
Crea un servicio Lambda simple
serverless create --template aws-nodejs --path myService
Vaya al directorio myService que debería contener
- serverless.yml
- handler.js
- evento.json
Toda la configuración del servicio Serverless es administrada por serverless.yml
Cambia su contenido para definir el servicio CRUD.
Ejemplo de archivo serverless.yml
service: serverless-crud
provider:
name: aws
runtime: nodejs4.3
region: us-east-1
stage: dev
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:us-east-1:*:*"
functions:
create:
handler: handler.create
events:
- http:
path: todos
method: post
cors: true
readAll:
handler: handler.readAll
events:
- http:
path: todos
method: get
cors: true
readOne:
handler: handler.readOne
events:
- http:
path: todos/{id}
method: get
cors: true
update:
handler: handler.update
events:
- http:
path: todos/{id}
method: put
cors: true
delete:
handler: handler.delete
events:
- http:
path: todos/{id}
method: delete
cors: true
resources:
Resources:
TodosDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: id
AttributeType: S
KeySchema:
-
AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: 'todos'
Este archivo define
- Lenguaje de programación de funciones lambda
- Política de ejecución de la función Lambda.
- Creación de la tabla Dynamodb y su política.
- Punto final HTTP (punto final de la puerta de enlace API)
Luego, debe definir la función lambda (por ejemplo, node.js) en el archivo handler.js para definirla.
'use strict';
const todosCreate = require('./todos-create.js');
const todosReadAll = require('./todos-read-all.js');
const todosReadOne = require('./todos-read-one.js');
const todosUpdate = require('./todos-update.js');
const todosDelete = require('./todos-delete.js');
module.exports.create = (event, context, callback) => {
todosCreate(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};
context.succeed(response);
});
};
module.exports.readAll = (event, context, callback) => {
todosReadAll(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};
context.succeed(response);
});
};
module.exports.readOne = (event, context, callback) => {
todosReadOne(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};
context.succeed(response);
});
};
module.exports.update = (event, context, callback) => {
todosUpdate(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};
context.succeed(response);
});
};
module.exports.delete = (event, context, callback) => {
todosDelete(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};
context.succeed(response);
});
};
Luego tienes que crear nuevos archivos para definir tus funciones CRUD
Crear estos archivos
- todos-create.js
- todos-read-all.js
- todos-read-one.js
- todos-update.js
- todos-delete.js
Luego define estas funciones en cada archivo.
para todos-create.js
'use strict';
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
const uuid = require('uuid');
module.exports = (event, callback) => {
const data = JSON.parse(event.body);
data.id = uuid.v1();
data.updatedAt = new Date().getTime();
const params = {
TableName: 'todos',
Item: data
};
return dynamoDb.put(params, (error, data) => {
if (error) {
callback(error);
}
callback(error, params.Item);
});
};
Para todos-read-all.js
'use strict';
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports = (event, callback) => {
const params = {
TableName: 'todos',
};
return dynamoDb.scan(params, (error, data) => {
if (error) {
callback(error);
}
callback(error, data.Items);
});
};
For todos-read-one.js <br>
'use strict';
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports = (event, callback) => {
const params = {
TableName: 'todos',
Key: {
id: event.pathParameters.id
}
};
return dynamoDb.get(params, (error, data) => {
if (error) {
callback(error);
}
callback(error, data.Item);
});
};
Para todos-update.js
'use strict';
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports = (event, callback) => {
const data = JSON.parse(event.body);
data.id = event.pathParameters.id;
data.updatedAt = new Date().getTime();
const params = {
TableName : 'todos',
Item: data
};
return dynamoDb.put(params, (error, data) => {
if (error) {
callback(error);
}
callback(error, params.Item);
});
};
Para todos-delete.js
'use strict';
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports = (event, callback) => {
const params = {
TableName : 'todos',
Key: {
id: event.pathParameters.id
}
};
return dynamoDb.delete(params, (error, data) => {
if (error) {
callback(error);
}
callback(error, params.Key);
});
};
Para ejecutar estas aplicaciones necesitas instalar npm dependencias.
-
npm init
Inicialización npm -
npm install aws-sdk --save
instalación aws-sdk -
npm install uuid --save
Despliegue
Ahora puedes desplegar estos proyectos.
cd myService
verifica que está en el directorio del proyecto y luego puede implementar su código
serverless deploy
Use el punto final
Si implementó con éxito, verá los nombres de pont gateway end pont en su consola.
Probar crear punto final
curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn Serverless" }'
Prueba de Read Punto final (Leer todo)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos
Prueba para leer el punto final (leer uno)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>
Prueba de punto final de actualización
curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" : "Understand Serverless" }'
Prueba para eliminar el punto final
`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>