AWS를 이용한 Serverless 환경 구축 2 - Lambda로 DynamoDB 쓰고 읽기

지난 번에 Lamda로 hello_world만 찍기만 하여 demo의 성격 이었다면 이번은 실제로 DynamoDB에 쓰고 읽기를 해보자.

순서는 아래와 같다.
DynamoDB table 생성 후 IAM 권한 추가(Access DynamoDB) Lambda 함수의 쓰기, 읽기를 만들 것이다.

DynamoDB table 생성
1. "Create table"을 선택한다.
 

2. "Table name", "Primary key"에 값을 입력한 후 "Create"를 클릭한다.(예 Table name: Page, Primary key: id)
3. DynamoDB table이 간단하게 생성 되었다.

IAM DynamoDB 접근권한 추가
기존 Role에는 DynamoDB 접근권한이 없으므로 권한을 추가해야 한다.
1. 기존에 사용하던 " lambda_basic_execution" Role에 Jason을 추가 해 주면 된다.("Statement"[]안에 추가)

{
      "Sid": "Stmt1428341300017",
      "Action": [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }


Lambda 쓰기 함수 만들기
이번에는 Lambda 함수로 DynamoDB에 쓰기를 해보자.
1. 기존에 만들어 놓은 Lambda 함수를 수정해서 사용 하기로 하자.(S3에 code를 업로드 했던 Lambda 함수의 코드를 변경하여 진행 할 것이다.)

지난번에 만들었던 code.js를 아래의 코드로 변경 한다.

console.log('Loading event');
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();

exports.handler = function(event, context) {
    console.log("Request received:\n", JSON.stringify(event));
    console.log("Context received:\n", JSON.stringify(context));

    var tableName = "Page";
    var datetime = new Date().getTime().toString();
    var item = {
        "id": event.id,
        "timedate": datetime,
        "name": event.name,
        "email": event.email
    };
    console.log("Item:\n", item);

    dynamodb.putItem({
            "TableName": tableName,
            "Item": item
        }, function(err, data) {
            if (err) {
                context.fail('ERROR: Dynamo failed: ' + err);
            } else {
                console.log('Dynamo Success: ' + JSON.stringify(data, null, '  '));
                context.succeed('SUCCESS');
            }
        });
}

2. code.js 디렉토리에서 npm install dynamo-doc를 한 후 해당 module을 추가 한다. code.zip으로 통채로 압축해서 S3에 업로드 한다.(자동 배포 될 것이다.)

3. 코드가 업데이트 된 Lambda로 이동하여 "test event"(상단 그림)를 설정한다. 또한 아래와 같이 Json data를 변경 한 후 "Save and test"를 클릭한다.


{
  "id": "App",
  "name": "Smith",
  "email": "test@example.com"
}

4. Lambda로그에 Success가 출력 되고 DynamoDB에 기록이 잘 된 것을 볼 수 있다.



Lambda 읽기 함수 만들기
1. 쓰기 함수와 동일하게 이름을 달리 하여 생성한다. 생성과정은 여러번 언급 하였기에 생략한다.
2. 다른 부분은 아래의 코드이다.
console.log('Loading event');
var doc = require('dynamodb-doc');
var dynamodb = new doc.DynamoDB();

exports.handler = function(event, context) {
    console.log("Request received:\n", JSON.stringify(event));
    console.log("Context received:\n", JSON.stringify(context));

    var tableName = "Page";
    var key = {
        id: event.id
    };
    console.log("Key:\n", key);

    dynamodb.getItem({
            "TableName": tableName,
            "Key": key
        }, function(err, data) {
            if (err) {
                context.fail('ERROR: Dynamo failed: ' + err);
            } else {
                console.log('SUCCESS');
                context.succeed('Dynamo Success: '+ JSON.stringify(data, null, '  '));
            }
        });
}

3. 테스트 이벤트 Jason도 아래와 같이 변경 해 준 후 테스트 한다.
{
  "id": "App"
}

4. 쓰기 함수와 마찬가지로 성공 한 log를 볼 수 있다.

댓글

댓글 쓰기

이 블로그의 인기 게시물

Gitlab CI 설정

AWS Ceritificate Manger 이용방법