수색…


소개

AWS Lambda 등의 서버리스 아키텍처를 쉽게 구축 할 수있는 오픈 소스 애플리케이션 프레임 워크입니다. 이 섹션에는 관련 예제를 사용하여 애플리케이션 개발을위한 서버리스 프레임 워크를 설정하는 방법이 포함되어 있습니다.

비고

"Serverless"는 프레임 워크입니다 : https://serverless.com/

서버리스

전 세계적으로 serverless 설치

npm install serverless -g

Node.js에 AWS Lamdba 함수 만들기

serverless create --template aws-nodejs

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

라이브 AWS 계정에 배포

serverless deploy

간단한 CRUD 작업 만들기

Serverless Framework를 이용한 간단한 CRUD 연산 생성

전 세계적으로 Serverless 프레임 워크 설치

npm install serverless -g

간단한 람다 서비스 만들기

serverless create --template aws-nodejs --path myService

포함해야하는 myService 디렉토리로 이동하십시오.

  1. serverless.yml
  2. handler.js
  3. event.json

모든 Serverless 서비스 구성은 serverless.yml에 의해 관리됩니다.
내용을 변경하여 CRUD 서비스를 정의합니다.

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' 

이 파일 정의

  1. 람다 함수 프로그래밍 언어
  2. 람다 함수 실행 정책
  3. Dynamodb 테이블 생성 및 정책
  4. HTTP 끝점 (API 게이트웨이 끝점)

그런 다음 handler.js 파일에서 람다 함수 (예 : node.js)를 정의해야 정의 할 수 있습니다.
'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);
  });
};

그런 다음 CRUD 함수를 정의 할 수있는 새 파일을 만들어야합니다.
이 파일을 만듭니다.

  1. todos-create.js
  2. todos-read-all.js
  3. todos-read-one.js
  4. todos-update.js
  5. todos-delete.js

그런 다음 각 파일에서이 함수를 정의하십시오.

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);
  });
};

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);
  });
};

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);
  });
};

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);
  });
};

이 응용 프로그램을 실행하려면 npm 종속성을 설치해야합니다.

  1. npm init npm 초기화
  2. npm install aws-sdk --save 설치합니다. npm install aws-sdk --save aws-sdk를 설치합니다.
  3. npm install uuid --save

전개
이제이 프로젝트를 배포 할 수 있습니다.
cd myService 가 프로젝트 디렉토리에 있는지 확인한 다음 코드를 배포 할 수 있습니다.

serverless deploy

끝점 사용
성공적으로 배포 한 경우 콘솔에 api gateway end pont 이름을 표시합니다.

끝점 만들기 테스트

curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn Serverless" }'

읽기 끝점 테스트 (모두 읽기)

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos

읽기 끝점 테스트 (하나 읽기)

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>

업데이트 엔드 포인트 테스트

curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" : "Understand Serverless" }'

끝점 삭제 테스트

`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow