aws-lambda
서버리스 프레임 워크
수색…
소개
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 디렉토리로 이동하십시오.
- serverless.yml
- handler.js
- 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'
이 파일 정의
- 람다 함수 프로그래밍 언어
- 람다 함수 실행 정책
- Dynamodb 테이블 생성 및 정책
- 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 함수를 정의 할 수있는 새 파일을 만들어야합니다.
이 파일을 만듭니다.
- todos-create.js
- todos-read-all.js
- todos-read-one.js
- todos-update.js
- 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 종속성을 설치해야합니다.
-
npm init
npm 초기화 -
npm install aws-sdk --save
설치합니다.npm install aws-sdk --save
aws-sdk를 설치합니다. -
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`>