aws-lambda
Serverfri ram
Sök…
Introduktion
Den öppna källkodsramen för att enkelt bygga serverlösa arkitekturer på AWS Lambda och mer. Det här avsnittet innehåller hur man ställer in serverfri ram för applikationsutveckling med relevanta exempel.
Anmärkningar
"Serverless" är ett ramverk: https://serverless.com/
Server
Installera serverlös globalt
npm install serverless -g
Skapa en AWS Lamdba-funktion i Node.js
serverless create --template aws-nodejs
Exempel på en 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
Distribuera till live AWS-konto
serverless deploy
Skapa enkel CRUD-operation
Skapa enkel CRUD-funktion med hjälp av serverlösa ramverk
Installera serverlösa ramverk globalt
npm install serverless -g
Skapa enkel Lambda-tjänst
serverless create --template aws-nodejs --path myService
Gå till myService-katalogen som den ska innehålla
- serverless.yml
- handler.js
- event.json
All serverfri servicekonfiguration hanteras av serverless.yml
Ändra innehållet för att definiera CRUD-tjänst.
Exempel serverless.yml-fil
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'
Denna fil definierar
- Lambdafunktions programmeringsspråk
- Lambda-funktionens körningspolicy
- Dynamodb-tabellskapning och dess policy
- HTTP-slutpunkt (API Gateway End Point)
Då måste du definiera lambda-funktion (ex. Node.js) i filen handler.js, du kan definiera den.
'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);
});
};
Då måste du skapa nya filer för att definiera dina CRUD-funktioner
Skapa dessa filer
- todos-create.js
- Todos-read-all.js
- Todos-read-one.js
- todos-update.js
- todos-delete.js
Definiera sedan dessa funktioner i varje fil.
för 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);
});
};
För 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);
});
};
För 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);
});
};
För 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);
});
};
För körningen av denna applikation behöver du installera npm-beroenden
-
npm init
npm initialisering -
npm install aws-sdk --save
installera aws-sdk -
npm install uuid --save
Spridning
Nu kan du distribuera dessa projekt
cd myService
verifiera att du är i projektkatalogen så kan du distribuera din kod
serverless deploy
Använd slutpunkten
Om du lyckats distribuera ser du namn på api gateway end pont i din konsol.
Test Skapa slutpunkt
curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn Serverless" }'
Test för Läs Slutpunkt (läs alla)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos
Test för Läs Slutpunkt (Läs One)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>
Test för uppdatering av slutpunkt
curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" : "Understand Serverless" }'
Test för Ta bort slutpunkt
`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>