aws-lambda
Serverless Framework
Suche…
Einführung
Das Open-Source-Anwendungs-Framework zum einfachen Erstellen serverloser Architekturen auf AWS Lambda & more. In diesem Abschnitt wird beschrieben, wie Sie ein Serverless-Framework für die Anwendungsentwicklung mit relevanten Beispielen einrichten.
Bemerkungen
"Serverless" ist ein Framework: https://serverless.com/
Serverlos
Serverlos global installieren
npm install serverless -g
Erstellen Sie eine AWS Lamdba-Funktion in Node.js
serverless create --template aws-nodejs
Beispiel für einen 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
Stellen Sie Ihr AWS-Konto bereit
serverless deploy
Einfache CRUD-Operation erstellen
Erstellen Sie einfache CRUD-Vorgänge mit Serverless Framework
Installieren Sie das Serverless-Framework global
npm install serverless -g
Erstellen Sie einen einfachen Lambda-Service
serverless create --template aws-nodejs --path myService
Gehen Sie zum myService-Verzeichnis, das es enthalten soll
- serverless.yml
- handler.js
- event.json
Alle Serverless-Dienstkonfigurationen werden von serverless.yml verwaltet
Ändern Sie den Inhalt, um den CRUD-Dienst zu definieren.
Beispiel für eine serverless.yml-Datei
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'
Diese Datei definieren
- Programmiersprache für Lambda-Funktionen
- Richtlinie zur Ausführung der Lambda-Funktion
- Dynamodb-Tabellenerstellung und ihre Richtlinien
- HTTP-Endpunkt (API-Gateway-Endpunkt)
Dann müssen Sie in der Datei handler.js eine Lambda-Funktion (z. B. node.js) definieren, die Sie definieren können.
'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);
});
};
Dann müssen Sie neue Dateien erstellen, um Ihre CRUD-Funktionen zu definieren
Erstellen Sie diese Dateien
- todos-create.js
- todos-read-all.js
- todos-read-one.js
- todos-update.js
- todos-delete.js
Definieren Sie dann diese Funktionen in jeder Datei.
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 das Ausführen dieser Anwendung benötigen Sie die Installation von NPM-Abhängigkeiten
-
npm init
npm-Initialisierung -
npm install aws-sdk --save
installiert aws-sdk -
npm install uuid --save
Einsatz
Jetzt können Sie diese Projekte bereitstellen
cd myService
Sie sich, dass Sie sich im Projektverzeichnis befinden. Dann können Sie Ihren Code bereitstellen
serverless deploy
Endpunkt verwenden
Wenn Sie erfolgreich implementiert wurden, können Sie die Namen der API-Gateway-Endpunkte in Ihrer Konsole anzeigen.
Test Endpunkt erstellen
curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn Serverless" }'
Test für Leseendpunkt (Alles lesen)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos
Test für Leseendpunkt (Read One)
curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>
Testen Sie den Update- Endpunkt
curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" : "Understand Serverless" }'
Test für Endpunkt löschen
`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>