본문 바로가기
lambda-python3.8

람다 애플리케이션 메소드별 local, api gateway 데이터 받기

by 2세1의 행복한 개발 2021. 3. 6.
반응형

pycharm으로 lambda 애플리케이션을 개발하다보니

로컬과 api gateway에서 event안에 들어있는 구조가 달라

그걸 통합하기 위하여 공통 라이브러리가 필요하다고 판단함

import json


class Parameters:

        def event(event):

        parameters = ''
        # local은 resource가 비어 있다
        resourcePath = event.get('resource', 'local')
        if resourcePath == 'local':
            # local은 event안에 오브젝트 타입으로 데이터가 들어있다
            event['serverCheck'] = 'N'
            result = event
            return result
        else:
            method = event.get('httpMethod')
            if method == 'GET' or method == 'get':
                # method get은 queryStringParameters안에 list로 들어있음
                parameters = event['queryStringParameters']
            elif method == 'POST' or method == 'post':
                # multipart쪽 예외처리 하고 싶으나 람다에서 파일업로드는 제한이 많아 안씀
                # if event['headers']['Content-Type'] == 'multipart/form-data':
                # body안에 오브젝트/json으로 들어있음
                # parameters = event['body']
                # else:
                if event['body']:
                    parameters = json.loads(event['body'])

            # for key in parameters:
                # print(parameters[key])
            result = parameters

        # 빈값 처리
        if not result:
            result = {}

        # path 파라미터 추가
        if event['pathParameters']:
            result.update(event['pathParameters'])
        # stage 변수 추가
        if event['stageVariables']:
            result.update(event['stageVariables'])

        return result

Parmeters lib를 만들었고 계층에 올려서 lambda로 로드하였음

import json
from layerLib import Parameters


def tagList(event=None, context=None):

    parameters = Parameters.event(event)
    return {
        "statusCode": 200,
        "body": json.dumps({
            "data": {
                "event" : event,
                "parameters" : parameters
            }
        }, default=str),
    }

parmeters 를 최상단에서 선언하여

모든 파라미터를 해당 변수에서 받아올수 있다

해당 코드를 통하여 데이터가 잘 나오는걸 확인이 가능하다

댓글