AppSync(vtl)와 Lambda의 DynamoDB 접근 속도 비교

AppSync를 통해 DynamoDB에 접근할 때 vtl을 기술하는 방법과 Lambda를 경유하는 방법이 있습니다.
람바다를 통해 오면 느린 느낌이 들겠지만 실제 얼마나 걸릴지 측정해 봤어요.

결론


Get으로 데이터 테이블을 만들어 보았습니다.
AppSync는 예상보다 훨씬 빠릅니다.
  • AppSync 약 100ms
  • Lambda 약 700ms+쿨 시동 약 200ms
  • 전제 조건


    측정 시 CloudWatch logs를 사용하여 내보낸 정보입니다.
    AppSync는 Console에서, Lambda는test 버튼에서부터 실행됩니다.

    DynamoDB

  • 표를 만들고 데이터를 준비했습니다.
  • 필드는 id와test(string)
  • 만 있음

    AppSync

  • API Key
  • getTest get에 대한 다이나마이트 DB를 만드는 테이블
  • 로그를 모두 출력으로 설정
  • 템플릿 매핑 요청
    {
        "version": "2017-02-28",
        "operation": "GetItem",
        "key": {
            "id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
        }
    }
    
    쿼리
    query MyQuery {
      getTest(id: "1") {
        id
      }
    }
    

    Lambda

  • nodejs의 기본값으로 실행
  • 콘솔에 소스
  • 를 적었어요
    index.js
    const DynamoDB = require('aws-sdk/clients/dynamodb');
    
    exports.handler = async (event) => {
        console.log("start");
        const client = new DynamoDB.DocumentClient({
            region: 'ap-northeast-1'
        });
        
        const value = await client.get({
            TableName: 'test',
            Key: {
                id: '1'
            },
        }).promise();
        
        console.log("end");
        return value.id;
    };
    

    실행 결과


    AppSync의 경우

  • 로그에 나오는 Begin에서 끝까지는 114ms입니다.
  • 신중하게 보기 위해 브라우저가 실행하는 요청을 봤는데 163ms라서 어울리지 않는 느낌이 없었어요.
  • 로그 요약
    2021-11-25T05:51:51.782+09:00 fe96e4c0-6e54-4866-b75c-a93395f48ec3 Begin Request
    2021-11-25T05:51:51.896+09:00 fe96e4c0-6e54-4866-b75c-a93395f48ec3 End Request
    

    Lambda의 경우

  • 로그에 나타난 START에서 END까지는 738ms입니다.
  • 리포트에 나타난 것처럼 차가운 시동이 걸리면 272ms가 필요하다.
  • 브라우저에서 요청한 경우 1.18초가 소요됩니다.
  • 로그 요약
    2021-11-25T05:54:51.954+09:00 START RequestId: f1ecc995-41d8-4c8d-93b9-1c9b6e643682 Version: $LATEST
    2021-11-25T05:54:52.692+09:00 END RequestId: f1ecc995-41d8-4c8d-93b9-1c9b6e643682
    2021-11-25T05:54:52.692+09:00 REPORT RequestId: f1ecc995-41d8-4c8d-93b9-1c9b6e643682	Duration: 733.20 ms	Billed Duration: 734 ms	Memory Size: 128 MB	Max Memory Used: 69 MB	Init Duration: 272.86 ms
    

    결론


    AppSync에서 데이터를 직접 가져올 수 있다면 Lambda를 통과할 이유가 전혀 없습니다.
    Lambda에서 처리해야 할 조건이 있다면 먼저 처리한 다음 DynamoDB에 저장하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기