Posts API Gateway에서 람다로 쿼리스트링 넘겨주기
Post
Cancel

API Gateway에서 람다로 쿼리스트링 넘겨주기

API Gateway에서 람다함수로 쿼리스트링 전달하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import boto3
import json
from boto3.dynamodb.conditions import Key, Attr

def lambda_handler(event, context):
  
    ...
    
    response = table.query(
        KeyConditionExpression=Key('product_code').eq(event["product_code"])
    )
    
    ...
    
    return {
        'statusCode': 200,
        'body': items
    }

위 코드는 product_code를 키로 Dynamo DB를 조회하는 람다함수 입니다. 그리고, 테스트 이벤트를 구성하여 람다함수에 리퀘스트 요청이 들어왔을 때를 시뮬레이션 해본 결과입니다. 정상적으로 핸들러 event에 쿼리가 들어오는 것을 알 수 있습니다.

API Gateway와 Lambda 함수 연결 및 해결

API Gateway에 리소스와 GET 메서드를 생성해주고 앞서 생성한 람다함수를 연결했습니다.

그리고 테스트에 쿼리 파라미터를 넣고 수행한 결과 다음과 같은 오류가 났습니다.

‘product_code’를 쿼리 문자열에 넣어줬지만 람다함수에는 전달되지 않아서 생긴 오류입니다.

통합 요청 -> 매핑 템플릿 -> 정의된 템플릿이 없는 경우 -> application/json -> 매핑룰 작성

쿼리 스트링으로 들어온 product_code(우측)를 람다함수의 이벤트 객체에 product_code(좌측)으로 매핑 시켜줍니다. 그러면 다시 테스트를 수행했을 때 정상적으로 DB에 GET의 쿼리스트링으로 질의한 결과를 얻을 수 있습니다.

정리

REST API를 개발할 때, 람다함수를 생성하고 올바르게 작동하는지 테스트를 수행합니다. 하지만, API Gateway에 연결하여 API를 노출할 때 GET 요청 URL의 쿼리스트링이 전달되지 않았습니다. 이를 해결하기 위해서 API Gateway 측에서 람다함수랑 통합할 때 매핑룰을 작성해주면 해결됩니다.

This post is licensed under CC BY 4.0 by the author.

Vue 컴포넌트간 통신(event)

DynamoDB 기존 테이블에 Item 업데이트 하기

Comments powered by Disqus.