해결된 질문
작성
·
110
·
수정됨
1
안녕하세요 1.14 generator expression 강의 내용 중에서 athena로 s3의 저장된 로그를 쿼리하여 로그를 긁어온다는 예시에서 2가지 궁금증이 있습니다.
아테나로 긁어온 로그의 용량이 큰 경우, 리스트 컴프랜션으로 올리면 메모리를 많이 차지한다고 말씀해주셨습니다.
아테나 쿼리 결과는 보통 s3에 저장되는데, 람다를 예시로 들으신 이유는 어떤 워크플로우를 생각하시고 예시로 들으신건지 궁금합니다.
(람다로 아테나 쿼리 결과를 읽고 특정 형태로 파싱하는 경우, 파일을 리스트 컴프랜션으로 읽으면 람다의 메모리를 오바하여 람다가 죽는 경우를 말씀해주신걸까요?)
임시스토리지에 저장해서 generate expression을 통해 읽어온다는 부분에서 궁금한 점입니다.
레디스로 예를 들면 아테나 쿼리 결과를 [{"key" : "value"}]와 같이 레디스에 저장해둔 후 필요 시 데이터를 generate expression을 사용해서 읽어 온다는 걸까요?
저같은 경우 아테나는 단순 로그 파일을 조회하는 용도로만 사용해 보았고, 람다와 연동해서 사용해 본 경험이 없어 예시로 들어주신 사례가 어떤 상황인지 명확하게 떠오르지가 않습니다.
이런 부분은 검색을 통해 개인적으로 찾아봐야 되는게 맞는데, 어떤 키워드로 검색해야 하는지 감이 잘 안와서 질문드리게 됐습니다.
답변 1
1
안녕하세요! 좋은 질문 감사드립니다.
먼저, 링크를 보시면 아래와 같은 그림이 있습니다.
EventBridge -> Lambda를 트리거(실행)해서 Athena에 쿼리 수행
Athena에서 VpcFlowLog 버킷에 대한 쿼리 수행 결과를 QueryResults 버킷에 저장
QueryResults -> Lambda를 트리거(실행)해서 파일 람다 임시 스토리지 저장
임시 스토리지에서 파일을 한 번에(List Comprehension) 읽지 않고, 한 줄 씩(Generator Expression) 읽어서 메모리 효율적으로 비교
위와 같은 상황을 말씀 드렸습니다!
혹시 조금 더 추가 내용 궁금하시면, 설명글 링크 참고 부탁드릴게요.
감사합니다!
상세한 답변 감사드립니다.
sg 체크하는 함수에서 csv 파일의 각 라인을 반환하는 이터레이터를 제너레이터 표현식을 사용하여 한 줄씩 읽는 부분을 말씀해주신거 같네요. 이렇게 보니 어떤 경우에 제너레이터 표현식을 사용하면 효율적인지 쉽게 이해가 되는 것 같습니다.
보내주신 링크도 잘 봤습니다. 이런 아키텍처를 구상하고 그걸 프로그램화하고 타인에게 소개할 수 있다는게 대단하신거 같습니다.
매번 좋은 인사이트 얻어갑니다. 감사합니다.