일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- vln
- Golang
- frontend
- bricksassistant
- discord
- datahub
- embodied ai
- GPT
- Spark
- video understanding
- ChatGPT
- 블록체인
- 챗봇
- 디스코드봇
- 디스코드챗봇
- Rust
- lambda
- Hexagonal Architecture
- data discovery
- airflow
- 디스코드
- 웹3.0
- vision-language navigation
- MLFlow
- backend
- web3.0
- databricks
- Ai
- s3
- embodied
- Today
- Total
BRICKSTUDY
AWS lambda를 활용한 S3 적재된 데이터 카탈로그 확인 도구 개발기 본문
📌 Intro
안녕하세요!! Brickstudy 김민준입니다.
데이터 레이크, 데이터 플랫폼 관리의 가장 기본은 조직의 데이터를 어떤 규칙을 가지고 어떻게 저장 및 관리할지 결정하는 데이터 카탈로그를 구성하는 것입니다.
이를 위해 모임 내의 데이터 엔지니어 분들과 많은 협의를 진행 중이고 현재 모임 내 데이터 카탈로그 규칙을 정의했습니다. 이러한 규칙 협의 후 해당 규칙에 맞게 데이터가 제대로 데이터 레이크(S3) 내에 적재되고 있는지 확인하는 도구의 필요성이 함께 대두되었습니다. 데이터가 적재되었을 때, 트리거를 발생하여 파일 저장 경로를 기준으로 규칙 적용 여부를 확인하는 서비스를 AWS lambda를 활용하여 개발을 진행했습니다.
해당 글은 AWS lambda를 활용한 S3에 적재된 데이터의 데이터 카탈로그 규칙 확인을 위한 도구를 개발하는 과정을 정리했습니다. 현재는 Bronze 레이어 규칙을 확인하는 도구로 개발되어 있으면 추후 silver, gold 규칙 확인 및 관리하는 도구로 확장할 예정입니다.
🗂️ Table of Contents
1. 데이터 카탈로그 란?
2. Brickstudy 데이터 카탈로그 규칙
3. 데이터 카탈로그 규칙 확인을 위한 솔루션 개발
4. 개발 과정 이슈
5. 동작 확인 및 결론
1. 데이터 카탈로그 란?
데이터 카탈로그를 BricksAssitant에 질문했을 때, 아래와 같이 정의 합니다.
정리하면, 데이터를 문서화하여 사용자가 필요로 하는 데이터를 쉽게 찾을 수 있도록 도움을 줄 수있는 메타데이터의 집합체로 정의합니다.
저희 Brickstudy 내에서 여러 프로젝트 진행에 필요한 데이터를 수집하고 이를 효과적으로 관리하기 위해 데이터 카탈로그에 대한 논의를 주기적으로 진행합니다.
2. Brickstudy 데이터 카탈로그 규칙
A. 데이터 최상단 폴더는 medallion architecture를 고려한 3layer로 구분
- Bronze : Raw Ingestion Table
- 외부 소스로부터 Raw 데이터를 가져와서 Bronze 테이블로 적재합니다.
- 외부 소스로부터 Raw 데이터를 그대로 적재하기 때문에 파일 확장자에 대한 제한이 없습니다.
- Silver : Refined Table
- Bronze 데이터로 부터 특정 필드 값에 대한 처리를 통해 새로운 Silver 테이블에 저장합니다.
- Gold : Feature/Aggregation Table
- Silver 테이블의 데이터를 실제 사용하기 직전에 데이터로 처리하여 Gold 테이블에 저장합니다.
- 저장소는 S3일 수도 있고 데이터 사용하는 장소에 따라 RDS, Document DB 등 다양할 수 있습니다.
B. 3 layer 아래에는 각 프로젝트 명으로 구분
- 프로젝트 별 데이터 구분 명칭은 프로젝트 진행 전 데이터 관리자와 협의를 통해 결정됩니다.
- 결정된 프로젝트명은 `project` 테이블에 관리됩니다.
C. (Bronze layer기준)프로젝트 폴더 아래에는 데이터 수집된 매체 이름으로 구분됩니다.
- 매체 구분 명칭은 데이터 수집 로직 작성 전 데이터 관리자와의 협의를 통해 결정됩니다.
- 매체 명칭 선정 시 매체 source와 세부 category까지 결정합니다.
- 결정된 매체명은 `media` 테이블에 관리됩니다.
D. (Bronze layer기준) 매체 폴더 아래는 수집된 날짜로 구분됩니다.
- 날짜 포맷은 `yyyy-MM-dd`를 기준으로 관리됩니다.
E. (Bronze layer기준) 마지막 날짜 폴더 아래 파일명은 파일명의 제일 앞 category를 제외하고는 데이터 수집 형태에 따라 자유롭게 관리됩니다.
- 데이터 수집에 따라 한 시간 단위, 6시간 단위, 세부 카타고리 단위 등 다양하게 수집될 수 있어 파일명에 규칙을 최소화합니다.
- 파일명에서 "_"기준 제일 앞에 단어만 `media` 테이블의 category와 동일하게 되어있는지로 관리됩니다.
최종적으로 Brickstudy의 Bronze layer 규칙은 아래와 같습니다!!
bronze/{project.name}/{media.source_}/yyyy-MM-dd/{media.category}_{구분자}.{확장자}
3. 데이터 카탈로그 규칙 확인을 위한 솔루션 개발
A. 요구 사항
- 데이터 S3에 적재되었을 때, 기준으로 규칙을 확인이 필요해 S3데이터 적재 트리거를 받을 수 있는 도구를 사용해야 합니다.
- 비용 효율화를 위해 데이터 적재가 24시간 계속 되는 것이 아닌, 적재가 되었을 경우에만 확인이 필요합니다.
- 확인이 완료되었을 때, 확인 메시지는 공용 툴인 디스코드로 메시지를 보내야 합니다.
위의 요구사항을 확인 했을 때, 가장 적합한 솔루션으로 AWS lambda를 활용합니다.
B. AWS Lambda 특징
- 자동 확장성: 트래픽에 따라 자동으로 스케일링되며, 요청 수에 맞춰 처리 능력을 조절합니다.
- 이벤트 기반 실행: AWS 서비스나 사용자 지정 이벤트에 의해 자동으로 트리거되어 실행됩니다.
- 다양한 프로그래밍 언어 지원: Node.js, Python, Ruby, Java, Go, .NET 등 여러 언어로 작성된 코드를 지원합니다.
- 비용 효율성: 사용한 만큼만 비용을 지불하며, 실행 시간과 리소스를 기준으로 과금됩니다.
- 유연한 배포: 버전 관리 및 배포가 용이하고, 다양한 환경에서 배포할 수 있습니다.
C. AWS Lambda 코드 작성
- AWS Lambda 코드의 경우 Cold start Delay와 Warm state 시 평균 지연 시간을 최적화 할 수 있는 Go언어로 작성되었습니다.
D. 시스템 구성
- S3에 새로운 파일이 업로드되면 Lambda에서 데이터 카탈로그 규칙 확인 후 성공 여부를 디스코드에 메시지로 전달합니다.
4. 개발 과정 이슈
A. Github 링크
- 상세 코드는 아래 링크 확인 해주세요!!
- https://github.com/brickstudy/aws-lambda/tree/main/data-catalog
B. Go Lambda 배포 시 설정 변경
- 이 전까지는 Go로 런타임을 설정하는 방식을 AWS에서 제공했지만 현재는 제공하고 있지 않음을 확인했습니다.
- Go로 작성된 코드를 배포하기 위해서는 Amazon Linux를 사용해야 합니다.
- 추가로, 런타임 설정에서 핸들러를 `main`으로 변경해야합니다!!
- 기본값 hellohandler로 되어 있습니다.
C. S3에서 트리거 설정
- S3에 접근 권한 설정과 함께 S3에서 트리거를 Lambda로 보낼 수 있도록 설정해야 합니다.
- S3 접속 >> 버킷 클릭 >> 속성 >> 이벤트 알림 >> 생성한 Lambda 함수 선택
5. 동작 확인
정상적으로 파일이 업로드 되었을 때와, 잘못 업로드되었을 때 아래와 같은 메시지로 확인 가능합니다.
해당 서비스를 통해 Bronze 레이어에 적재되는 데이터의 데이터 카탈로그 확인을 진행할 수 있습니다.
해당 서비스를 추가로 개선하여 Brickstudy 모임 내의 데이터를 모임원 들이 더 효과적으로 사용할 수 있도록 노력하겠습니다 :)
'Data' 카테고리의 다른 글
[viral 탐지 프로젝트] 데이터 파이프라인 구축기 #2 (1) | 2024.09.22 |
---|---|
[viral 탐지 프로젝트] 데이터 파이프라인 구축기 #1 (1) | 2024.09.22 |
brickstudy 공용 데이터 환경 구축기 - 1 (0) | 2024.07.28 |
spark local 환경구축하기 (0) | 2024.07.21 |
Spark, Airflow, mlflow, databricks Let's go! (1) | 2024.07.21 |