[AWS] lambda와 DynamoDB 연결하여 쿼리 실행

Lee InnJie·2022년 8월 8일

AWS Lambda

목록 보기
2/3

원글

Android에서 AWS DynamoDB 사용하기


GET

DB의 CRUD 중에서 가장 기본적인 Read를 하기 위해 REST 개념에 매칭되는 GET을 활용한다.

index.js

const AWS = require('aws-sdk');

//create DynamoDB Object
const dynamo = new AWS.DynamoDB();
/**
 * Provide an event that contains the following keys:
 *
 *   - operation: one of the operations in the switch statement below
 *   - tableName: required for operations that interact with DynamoDB
 *   - payload: a parameter to pass to the operation being performed
 */
exports.handler = async (event) => {
    //console.log('Received event:', JSON.stringify(event, null, 2));

    const operation = event.operation;
    
    switch (operation) {
        case 'GET':
            return await dynamo.scan (event.body).promise();
        default:
            throw new Error(`Unrecognized operation "${operation}"`);
    }
};

해야 할 일

  • DynamoDB 객체를 생성
  • 들어오는 operation에 해당하는 함수 작성 (dynamo.scan)
  • scan은 DB내의 모든 내용을 탐색하기 때문에 query를 권장한다.
    이 예시에서는 DB데이터양이 적기때문에 scan을 사용했다.

테스트 이벤트 작성

{
  "operation": "GET",
  "body": {
    "TableName": "Confusion",
    "FilterExpression": "contains (#names, :atValue)",
    "ExpressionAttributeNames": {
      "#names": "confusion_name"
    },
    "ExpressionAttributeValues": {
      ":atValue": { "S": "s"}
    }
  }
}

이 코드는

SELECT *
FROM CONFUSION 
WHERE CONFUSION_NAME LIKE '%s%';

와 동일한 결과를 반환환다.

key 설명

developer page

operation
index 의 switch의 결정 기준이다.

body - TableName
scan할 테이블 명

body - FilterExpression
조건문을 작성한다. 속성명 앞에는 #, 속성값 앞에는 :을 붙여 구분한다.

body - ExpressionAttributeNames
전달인자의 속성명을 정의한다.

body - ExpressionAttributeValues
전달인자의 속성값을 정의한다. 이때 {타입 : 속성값} 형태로 정의한다.
형태를 작성하지 않고 :atValue : "s" 형태로도 실행이 가능하다

테스트

위 코드에서 전달 값 (s)위치에 아무것도 작성하지 않으면 모든 items를 반환한다.

profile
⌒_⌒

0개의 댓글