본문 바로가기
Server, DevOps/AWS

[ Lambda + API Gateway ] Lambda Event란? Lambda에 headers를 전달하는 방법

by lumayi 2022. 7. 11.

문제 현상

Client에서 Request headers를 전송했지만 API gateway에서 headers 정보를 찾아오지 못함

** Lambda에서 headers에 저장되어 있는 jwt 정보를 이용하여 jwt 토큰을 검증해야 하는데 headers가 도착하지 못하여 로직 수행 불가한 상태

 

구조 예시:

 

여기서 잠깐, Event 개념, Lambda의 event란 무엇일까??

이벤트 소스에서 읽어 Lambda 함수를 호출하는 Lambda 리소스


즉, Lambda는 실행되면서 전달되는 파라미터 값들을 event를 통해서 넘겨받게 된다.
API Gateway와 함께 Trigger로 호출되는 경우엔 event는 request처럼 사용된다.



원인

AWS 공식 document [1]을 읽어보면 "Lambda 함수는 API Gateway API 요청에서 수신하는 메서드 요청 본문만 처리합니다." 라고 명시되어있다.

여기서 말하는 메서드 요청 본문은 request body를 뜻함.
그래서 Lambda에서 Request headers는 받지 못했고, Request의 body만 API에서 걸러져 받게 된 것이다.

 


해결 방법

헤더를 전달하기 위한 mapping Template를 사용하여 API를 배포해야 한다.

{ "method": "$context.httpMethod", "body" : $input.json('$'), "headers": { #foreach($param in $input.params().header.keySet()) "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end #end } }

 

API에 해당 매핑 템플릿을 설정하고 배포 후, event.param 이 아닌 event.body.param 으로 소스 코드를 변경해야한다.
event에 body 외에 headers도 함께 출력되기 때문이다!
매핑 템플릿의 종류[2] 에는 이 외에도 다양한 query String을 전달하는 방법 등의 template이 존재한다.

 


============================

Document 링크


[1] https://aws.amazon.com/ko/premiumsupport/knowledge-center/custom-headers-api-gateway-lambda/?nc1=h_ls
[2] https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html

반응형