IT/AWS Lambda & Resources Trouble Shooting

키네시스 샤드 input event driven 인/디코딩 데이터 정제 람다함수

클라우드 개발자 앙몬드 2020. 10. 16. 10:28
반응형

한동안 파이썬3 알고리즘 / 코딩 공부좀 한두달 빠져있다가 돌아왔습니다.

 

그리고 얼마전에는 로컬스택으로 조금 재밌게 놀아보기도 했는데, 로컬스택 활용 미션 중, 람다 함수도 만드는게 있더라구요.

 

이건 로컬스택을 이용한 아키텍처링 과제로, 그 중 키네시스 -> 람다 이벤트 드라이븐 구간에서 람다 백엔드 함수입니다.

 

* 진짜 과제는, 로컬스택을 이용하여 저 모든 아키텍처를 구성하고 POC 검증을 하라는 내용이었습니다.

* 보너스 미션으로, 테라폼 (iac)를 이용하여 이 아키텍처를 원콤내는 것이 있는데, 저는 boto3 sdk를 이용해 코드 런타임으로 한방에 구현을 해보겠습니다. (다음 글..!)

devloper-angmond.tistory.com/30

 

boto3 를 이용하여, 로컬스택 아키텍처 구성해보기

근 두달가까이 소식이 없다가, 그동안 쌓인 내용들을 부랴부랴 올리고 있습니다. 사실 파이썬3에 대한 이용능력을 좀 높일 필요가 있어서, 해커랭크에서 좀 살다 왔습니다. 신기한게 자격증도 ��

devloper-angmond.tistory.com

import json
import base64
import boto3
from datetime import datetime

def lambda_handler(event, context):
    print(f"로그를 정제합니다.")
    list_raw_record = event["Records"]
    list_converted_logs = []
    s3버킷의_이름 = "cloud-developer-angmonddddddd"
    
    # 로그 정제
    # KDS는 샤드 안의 데이터를 base64 인코딩하므로, 같은 방식으로 디코딩해야
    # 사람의 인식이 쉬운 데이터로 변환됨
    for kinesis_data in list_raw_record :
        raw_data_base64_encoded = kinesis_data["kinesis"]["data"]
        raw_data_decoded = base64.b64decode(raw_data_base64_encoded)
        list_converted_logs.append(raw_data_decoded)
    
    s3_client = boto3.client('s3')
    # 오브젝트 put 시, S3 또한 파티션 단위이므로, 1분단위 로그가 키네시스 입력 & 람다 트리거링이므로, yyyy-mm-dd-hh-mm 단위로 S3 오브젝트 파일명을 작성
    s3_client.put_object(Body=list_converted_logs, Bucket=s3버킷의_이름, Key="/nginx_logs/" + datetime.now().strftime("%Y-%m-%d %H:%M") )
        
    print(f"로그 정제작업이 끝났습니다.")
반응형