BLOG

DynamoDB와 Amazon Elasticsearch를 Lambda에 통합하기
작성일: 2018-03-15

 

저자: Michael Garski, 플랫폼 엔지니어링 디렉터@ Fender Digital

 

Fender Digital (저자가 근무하는 회사)에서 2016년도 중반에 Lamda 를 사용하기 시작했고 2017년 1월부터는 모든 새로운 서비스에 적용하기 시작했습니다. 람다로 전환하며 관계형 데이터 스토어가 필요하지 않은 상황에서 대부분의 사용 사례에 대해, 꼭 필요한 경우가 아니라면 RDBMS를 사용하지 않고자 했습니다. DynamoDB는 사용량 기반 비용이 있는 데이터 스토어에 적합한 옵션이지만 전체 텍스트 쿼리를 지원하지 않습니다. Amazon Elasticsearch는 필요로 하는 검색 기능을 제공했지만, 우리의 주 데이터 스토어로 사용하는 것이 조금 불편했습니다. 이 두 옵션 모두 우리의 요구를 충족시키지 못하여, 엔지니어링 팀은 DynamoDB 및 Elasticsearch를 둘 다 사용하는 접근 방식을 생각해 내서, 호출된 Lamda 스트림에 의해 클러스터를 테이블과 함께 최신 상태로 유지했습니다. 이렇게 하면 스트림 이벤트의 데이터를 기반으로 클러스터에서 항목을 추가, 제거 또는 업데이트해야 하는 시점을 정확히 알 수 있습니다.

 

DynamoDB 및 AWS Elasticsearch 서비스를 함께 사용하면 우리 회사의 Fender Play 콘텐츠를 완벽하게 활용하여 콘텐츠가 있는 곡 제목의 풀 텍스트 쿼리를 지원할 수 있습니다. Fender Play 관리자가 레슨 콘텐츠를 생성하면 DynamoDB에 기록되며, 이 스트림 이벤트가 Elasticsearch 클러스터에 삽입되어 사용자가 찾는 수업 내용을 쿼리 할 수 있습니다.

 

 

 

우리가 Elasticsearch를 기본 데이터 저장소로 사용하지 않는 이유는 클러스터 스냅샷 외부에 재해 복구 솔루션이 없기 때문입니다. Elasticsearch를 사용하는 각 Lambda기반 서비스에도 DynamoDB 테이블 스캔을 수행하여 인덱스를 다시 채울 수 있는 Lambda 기능도 있습니다. 큰 테이블의 경우, 리필이 Lambda 호출 시 5분 시간 제한을 초과하므로, 리필 프로세스에 AWS Step기능을 사용합니다. Step 기능을 호출할 때는 비어있는 JSON문서에 입력하여 리필 기능을 호출합니다. 호출 중에, 리필 기능에 있는 스캔 프로세스는 스캔이 중단된 시간과 4분 후에, 나머지 항목이 클러스터에 흘러 내려가게 되고, 스캔에서 마지막으로 평가된 키가 상태 시스템에 반환되는 것을 추적합니다. 그 후 상태 시스템은 리필 기능의 반환 값을 검사하는 선택 상태로 들어갑니다. 반환 값에 마지막으로 평가된 키가 포함된 경우 상태 시스템은 마지막으로 평가된 키를 사용하여 리필 기능을 호출하여 해당 키가 꺼진 상태에서 스캔을 계속합니다. 이렇게 하면 마지막으로 평가한 키가 상태 시스템으로 반환되는 한 리필 기능은 계속 호출됩니다. 리필 기능이 검색을 완료하면, 클러스터 리필이 완료되었음을 알리는 상태 시스템에 빈 상태의 JSON문서를 반환합니다.

 

 

 

올해도 우리 회사는 Lambda 사용의 폭을 지속적으로 확대할 것이라는 목표를 가지고 있습니다. 심전도 기반 서비스를 Lambda로 마이그레이션 하여 여러 지역에서 서비스를 설정함으로써 사용자에게 위치에 따라 응답 속도를 높이고 해당 지역을 사용할 수 없게 될 경우 애플리케이션 복원 기능을 향상시킬 것입니다. 사용자의 위치에 따라 Route 53의 위치 라우팅 기능을 사용하여 API트래픽을 특정 영역으로 이동시킬 수 있을 것입니다. 우리의 서비스는 지역 간의 실시간 데이터 복제를 통해 Active-Active구성의 여러 지역에 구축될 것입니다. 우리의 초기 계획은 테이블 스트림을 통해 자체적인 지역 간 DynamoDB 테이블 복제를 구현하는 것이었습니다. 그러나 reinvent 2017년에서 글로벌 테이블이 발표되면서, 이제 크로스 지역 테이블 동기화가 이제 DynamoDB 기능의 일부가 되었습니다. 애플리케이션을 배포하는 각 영역에는 자체 DynamoDB 테이블 및 Elasticsearch 클러스터가 있으며, 클러스터는 표의 항목이 수정될 때 스트림에서 호출하는 Lambda 기능을 통해 테이블과 동기화됩니다. 이렇게 하면 모든 지역에서 Elasticsearch 클러스터를 거의 실시간으로 최신 상태로 유지하여 지원되는 영역 중 한 지역에서 서비스가 중단되는 경우에도 사용자 환경이 손상되지 않도록 할 수 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/startups/combining-dynamodb-and-amazon-elasticsearch-with-lambda/

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.