NodeJS 및 Lambda를 사용한 DynamoDB CRUD
이 기사에서는 AWS Lambda 및 NodeJS를 사용하여 기본 CRUD 작업을 수행합니다. 시작하려면 먼저 다음 파일 구조를 정의해야 합니다.
우리는 루트 폴더를 DynamoCRUD라고 부를 것이지만 원하는 이름으로 부르셔도 됩니다. 루트 폴더 아래에 리소스라는 폴더를 생성합니다. 이 폴더에는 DynamoDB 테이블 생성을 위한 코드가 포함된 dynamo-table.yml 파일이 포함됩니다. 또한 Serverless Framework를 사용하여 Cloudformation 스택을 배포할 것이므로 Serverless를 사용하여 AWS 계정에 대한 프로그래밍 방식 액세스를 이미 설치하고 설정했다고 가정합니다. 그렇지 않은 경우 Serverless Documentation을 참조할 수 있습니다.
리소스라는 폴더를 만든 후 다음 명령으로 서버리스 프레임워크를 사용하여 템플릿을 생성합니다.
sls create -t aws-nodejs
이렇게 하면 serverless.yml 파일, handler.js 파일 및 .gitignore 파일이 생성되고 최종적으로 파일 구조가 완성됩니다.
이제 serverless.yml 파일을 시작하겠습니다. serverless.yml 파일은 다음과 같습니다.
service: DynamoCRUD
provider:
name: aws
runtime: nodejs12.x
profile: default
timeout: 30
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:*"
Resource: "*"
functions:
addItem:
handler: handler.addItem
getAllItem:
handler: handler.getAllItem
updateItem:
handler: handler.updateItem
deleteItem:
handler: handler.deleteItem
resources:
- ${file(resources/dynamo-table.yml)}
따라서 기본적으로 우리가 하는 일은 리소스 섹션을 사용하여 dynamoDB 테이블을 생성하고 CRUD 작업을 수행하기 위한 4개의 기본 함수를 생성하고 DynamoDB에 Lambda 함수에 대한 권한을 부여하는 것입니다.
이제 리소스 폴더 아래에 DynamoDB 테이블, 즉 dynamo-table.yml을 생성합니다. 다음과 같이 표시됩니다.
Resources:
myDynamoDBTable: # Logical Id of the resource
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
-
AttributeName: "year"
AttributeType: "N"
-
AttributeName: "title"
AttributeType: "S"
KeySchema:
- AttributeName: "year" # Partition Key
KeyType: "HASH"
- AttributeName: "title" # Sort Key
KeyType: "RANGE"
TableName: "Movies"
ProvisionedThroughput: # Optional, can be skipped
ReadCapacityUnits: 10
WriteCapacityUnits: 10
따라서 기본적으로 위의 속성 정의를 사용하여 테이블을 생성합니다.
이제 handler.js 파일을 작성해 보겠습니다. 여기에는 serverless.yml 파일에 정의된 모든 CRUD 작업에 대한 코드가 있습니다.
"use strict";
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();
// Function to Create an Item to DB
module.exports.addItem = async (event) => {
try {
let table = "Movies";
let year = 2015;
let title = "The Big New Movie";
let params = {
TableName: table,
Item: {
"year": year,
"title": title,
"info": {
"plot": "Nothing happens at all",
"rating": 0
}
}
}
let result = await docClient.put(params).promise();
if (result) {
console.log(">>>>>>>>>", result);
}
console.log("hello world")
return {
statusCode: 200,
body: JSON.stringify({
message: "Go Serverless v1.0! Your function executed successfully!",
data: result
}),
};
} catch (error) {
console.log(error);
return error;
}
};
// Function to getAllItems from DB
module.exports.getAllItem = async () => {
let table = "Movies";
let year = 2015;
let title = "The Big New Movie";
let params = {
TableName: table,
Key: {
"year": year,
"title": title
}
}
try {
let result = await docClient.get(params).promise();
console.log(result);
return {
body: JSON.stringify({
message: "Executed succesfully",
data: result
})
}
} catch (error) {
console.log(error);
}
}
// Function to update an Item in DB
module.exports.updateItem = async () => {
let table = "Movies";
let year = 2015;
let title = "The Big New Movie";
let params = {
TableName: table,
Key: {
"year": year,
"title": title
},
UpdateExpression: "set info.rating = info.rating + :val",
ExpressionAttributeValues: {
":val": 1
},
ReturnValues: "UPDATED_NEW"
};
try {
let result = await docClient.update(params).promise();
return {
body: JSON.stringify({
message: "updated succesfully",
data: result
})
}
} catch (error) {
console.log(error);
}
}
// Function to Delete an item
module.exports.deleteItem = async () => {
let table = "Movies";
let year = 2015;
let title = "The Big New Movie";
let params = {
TableName: table,
Key: {
"year": year,
"title": title
}
}
let result = await docClient.delete(params).promise();
return {
body: JSON.stringify({
message: "deleted succesfully",
data: result
})
}
}
여기서 한 가지 주의할 점은 단순성을 위해 DB에 생성할 데이터를 하드 코딩하고 있다는 것입니다. AddItem 메서드를 POST로 자유롭게 변경하고 event.body에서 본문을 구문 분석하면 완전히 할 수 있습니다. 업데이트 및 삭제 방법도 마찬가지입니다. 나는 가능한 한 간단하게 유지하려고 노력하고 있습니다.
이제 마지막으로 스택을 AWS에 배포하고 기능이 작동하는지 여부를 테스트할 준비가 되었습니다. 스택을 배포하려면 다음 명령을 입력하기만 하면 됩니다.
sls deploy -v
이것은 모든 함수 끝점을 반환합니다. POSTMAN을 사용하여 끝점에 도달하고 응답을 확인할 수 있습니다.
Thanks for Reading
Reference
이 문제에 관하여(NodeJS 및 Lambda를 사용한 DynamoDB CRUD), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rajandmr/dynamodb-crud-with-nodejs-and-lambda-inn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)