본문 바로가기

개발/AWS

[AWS] Lamda + API Gateway 시작하기 | GET, Query String 전달, json.dumps 한글 깨짐 해결

반응형

람다 간단하대서 써볼려했더니.. 엄청 삽질했네요;; 

 

Lamda + API Gateway를 활용하여 간단한 API를 개발해보겠습니다.

 

1. API 규격

이번에 만들 api 는 GET/test 입니다. 

GET /test 

  - queryString으로 first_name과 last_name이 있을 경우 :
         body에 hello {first_name} {last_name} 반환 

  - queryString이 비어있을 경우 :
         body에 hello anonymous 반환 

 

 

2. Lambda 함수 생성

AWS Lambda > 함수생성 > 새로작성

test라는 이름의 함수를 하나 만들어 주었습니다. 

 

새로 생성한 함수로 들어가서

코드 탭에서 코드를 원하는대로 편집합니다.

 

람다에서는, event 인자를 통해 request인자들이 들어옵니다.

queryString의 first_name과 last_name에 따라 분기 및 응답값 설정이 이루어지도록 아래와 같이 람다함수를 작성해줍니다. 

import json

def lambda_handler(event, context):
    message = 'hello anonymous'
    if event['queryStringParameters'] and 'first_name' in event['queryStringParameters'] and 'last_name' in event['queryStringParameters']:
        message = 'Hello {} {}!'.format(event['queryStringParameters']['first_name'], event['queryStringParameters']['last_name'])  
    return {
        'statusCode': 200,
        'body': json.dumps(message, ensure_ascii=False)
    }

 

 

참고) json.dumps 한글 깨짐 수정 반영 

응답값에 한글이 포함되면 응답이 깨져서 보이는데,

json.dumps(result, ensure_ascii=False

옵션을 넣어주면 이를 해결할 수 있습니다.

 

 

3. API Gateway에서 Lamda 트리거 

람다함수를 외부에서 호출하려면 API게이트웨이를 연결해주어야 합니다. 

구성 >  트리거 추가 

 

추가 트리거 구성은 아래와 같이 했습니다. 

API 게이트웨이 트리거가 생성되었네요.

 

API 엔드포인트라고 되어 있는 url을 클릭하면 새로운 탭에서 람다함수가 호출된 모습을 볼 수 있습니다. 

 

 

 

 

4. API Gateway에서 Query String 전달

api gateway에서 전달받은 인자들을 lambda에 넘겨주도록 설정해보겠습니다.

 

구성에서 API 게이트의 세부 화면으로 들어갑니다 (위 화면 기준 API 게이트웨이 : test-API 클릭 )

 

 

통합 요청 클릭

 

 

메소드 설정에서 Lambda 프록시 통합 사용에 체크박스를 활성화시켜줍니다. 

 

 

 

참고) event와 queryStringParameters

람다 내의 테스트 패널과 실제 api 호출 시 전달되는 패러미터가 조금 달라 헷갈리는 부분이 있습니다.

api call에서 쿼리패러미터는 event 패러미터 안에 queryStringParameters = {'key1' : 'value1', 'key2': 'value'  .. } 형태로 전달됩니다. 

import json

def lambda_handler(event, context):
    print("event1", event)
    if 'queryStringParameters' in event and event['queryStringParameters']:
            message = 'hello queryStringParameters'
            if 'first_name' in event['queryStringParameters'] and 'last_name' in event['queryStringParameters']:
                message = 'Hello {} {}!'.format(event['queryStringParameters']['first_name'], event['queryStringParameters']['last_name'])  
    return {
        'statusCode': 200,
        'body': json.dumps(message, ensure_ascii=False)
    }

 

반응형