안경잡이개발자

728x90
반응형

  이번 시간에는 AWS Lambda(Node.js)와 AWS DynamoDB를 연동하는 예제를 다루어 보도록 하겠습니다. DynamoDBNoSQL 데이터베이스로, 종합 관리(Fully Managed)된다는 특징이 있습니다. 또한 데이터는 자동으로 복제되기 때문에 상대적으로 안전합니다. 그리고 배포와 확장이 단순하다는 장점이 있습니다.

 

  DynamoDB는 간단한 모바일 API를 구축하기 위한 목적으로 이용하면 효과적입니다. 간단히 실습을 해봅시다. 바로 AWS Lambda 서비스 화면으로 이동하여 하나의 함수(Function)을 만듭시다.

 

 

  저는 Node.js로 기본 람다 함수를 만들었습니다.

 

 

  이후에 [API Gateway]를 하나 선택해서 달아줍니다. 그러면 자동으로 해당 람다 함수에 접근할 수 있는 API URL이 생성되고, 이를 관리할 수 있게 됩니다.

 

 

  설정은 다음과 같이 [Open with API Key]를 선택해서, 클라이언트가 API Key를 이용해 람다 함수에 접근할 수 있도록 합니다.

 

 

  [Add] 버튼을 누른 이후에는 [Save]를 해주셔야 합니다. 그러면 다음과 같이 API에 접근할 수 있는 URL이 생성됩니다. 또한 우리는 API Key를 이용해 접근하도록 설정하여, API Key 또한 출력됩니다.

 

 

  이제 다음과 같이 REST API 테스트 도구를 이용하여 테스트할 수 있습니다. 저는 Restlet을 이용했습니다. API Key를 보낼 때에는 HTTP Header에 x-api-key라는 이름으로 키 값을 보내주어야 합니다.

 

 

※ DynamoDB와 연동하기 ※

 

  이제 DynamoDB와 연동하기 위해서 DynamoDB에서 하나의 테이블을 생성해보도록 합시다.

 

 

  간단히 사용자 정보가 담기는 테이블을 만들어 보겠습니다. 테이블 이름은 User, 기본키로는 id를 넣어줍니다.

 

 

  이후에 실습을 위해 하나의 아이템(Item)을 넣어주겠습니다. [Create Item] 버튼을 누릅니다.

 

 

  저는 다음과 같이 하나의 사용자 데이터를 넣어보았습니다.

 

 

  이제 AWS Lambda 소스코드를 수정합니다. 기본 테스트 양식은 다음과 같습니다. dynamodb-doc이라는 라이브러리를 이용하면 간단히 DynamoDB와 통신할 수 있습니다. 기본적으로 GET 방식으로 사용자가 접근했을 때, User 테이블에 있는 모든 정보를 그대로 JSON 형식으로 출력하도록 만들었습니다.

 

const doc = require('dynamodb-doc');
const dynamo = new doc.DynamoDB();

exports.handler = (event, context, callback) => {
    const operation = event.httpMethod;
    const payload = {
        TableName: '{테이블 이름}'
    }
    switch (operation) {
        case 'POST':
            dynamo.putItem(payload, callback);
            break;
        case 'PATCH':
            dynamo.updateItem(payload, callback);
            break;
        case 'DELETE':
            dynamo.deleteItem(payload, callback);
            break;
        case 'GET':
            dynamo.scan(payload, (err, data) => {
                callback(null, {
                    'statusCode': 200,
                    'headers': {},
                    'body': JSON.stringify(data)
                });
            });
            break;
        default:
            callback(new Error(`Unrecognized operation "${operation}"`));
    }
};

 

  [Save] 버튼을 눌러 저장한 뒤에, 한 단계만 더 거치면 테스트할 수 있습니다.

 

 

  우리가 거칠 단계는 AWS Lambda의 권한입니다. 기본적으로 AWS Lambda에서는 DynamoDB에 접근할 권한이 없습니다. 그렇기 때문에 [Execution role] 탭에서 권한 설정을 확인해야 합니다.

 

 

  다음과 같이 정책 부분에서 [Edit Policy] 버튼을 눌러서 정책을 수정할 수 있습니다.

 

 

  다음과 같이 [Add additional permissions] 탭을 눌러서 DynamoDB 접근 권한을 추가할 수 있도록 합니다.

 

 

  저는 다음과 같이 DynamoDB에 대한 모든 권한을 허용했습니다.

 

 

  이후에 저장까지 잘 해주시면 됩니다. 이제 아까와 동일한 요청을 다시 하게 되면 다음과 같이 나옵니다.

 

 

728x90
반응형