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

  1. serverless.yml
  2. handler.js
  3. 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

  1. Programmiersprache für Lambda-Funktionen
  2. Richtlinie zur Ausführung der Lambda-Funktion
  3. Dynamodb-Tabellenerstellung und ihre Richtlinien
  4. 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

  1. todos-create.js
  2. todos-read-all.js
  3. todos-read-one.js
  4. todos-update.js
  5. 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

  1. npm init npm-Initialisierung
  2. npm install aws-sdk --save installiert aws-sdk
  3. 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`>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow