API Gateway REST API를 통해 백엔드 Lambda 함수 또는 HTTP 엔드포인트로 데이터를 전달하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 8월 26일

Amazon API Gateway REST API가 백엔드 AWS Lambda 함수와 HTTP 엔드포인트에 데이터를 전달했으면 합니다. 어떻게 해야 하나요?

간략한 설명

데이터를 백엔드 Lambda 함수에 전달하도록 REST API를 구성하려면 Lambda 사용자 지정 통합을 사용합니다.

쿼리 문자열 파라미터를 HTTP 엔드포인트에 전달하려면 HTTP 사용자 지정 통합을 사용합니다.

중요: 입력 데이터가 통합 요청 페이로드로 제공되는지 확인합니다. 매핑 템플릿을 사용하여 페이로드를 제공하는 것이 가장 좋습니다. 자세한 내용은 메서드와 통합 간의 요청 및 응답 페이로드 매핑을 참조하세요.

해결 방법

API Gateway API의 사용자 지정 헤더를 처리하는 Lambda 함수 생성

1.    Lambda 콘솔을 엽니다.

2.    함수 생성을 선택합니다. 함수 생성 페이지가 열리고 새로 작성 옵션이 선택되어 표시됩니다.

3.    기본 정보(Basic information) 창에서 다음을 수행합니다. 함수 이름(Function name)에 함수의 용도를 설명하는 이름을 입력합니다. 예: MapTemplate. 런타임(Runtime)에서 Python 3.9를 선택합니다.

4.    권한(Permissions)에서 기본 실행 역할 변경(Change default execution role)을 선택합니다.

5.    기존 역할 사용을 선택합니다. 기존 역할의 드롭다운 목록이 나타납니다.

6.    기존 역할에서 앞에서 생성한 Lambda 실행 역할을 선택합니다.

7.    함수 생성을 선택합니다.

8.    코드(Code) 탭의 코드 소스(Code source)에서 lambda_function.py 코드를 다음과 같이 바꿉니다.

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps(event) # returning the data sent to backend lambda function as API response.
    }

9.    배포(Deploy)를 선택합니다.

자세한 내용은 Python으로 Lambda 함수 빌드를 참조하세요.

백엔드 Lambda 함수 또는 HTTP 엔드포인트에 데이터 전달

1.    API Gateway 콘솔을 엽니다.

2.    API 생성(Create API)을 선택합니다.

-또는-

(API Gateway를 처음 사용하는 경우) 서비스의 기능을 소개하는 페이지가 나타납니다. REST API에서 구축(Build)을 선택합니다. 예제 API 생성(Create Example API) 팝업이 나타나면 확인(OK)을 선택합니다.

3.    API 유형 선택에 대해 REST API 창에서 구축을 선택합니다.

4.    새 API 생성(Create new API)에서 새 API(New API)를 선택합니다.

5.    설정(Settings)에서 다음을 수행합니다. API 이름(API name)에 API의 용도를 설명하는 이름을 입력합니다. 예: MappingTemplateTutorial. (선택 사항) 설명(Description)에 API의 용도에 대한 간단한 설명을 입력합니다. 예: 백엔드 Lambda 함수/HTTP 엔드포인트로 데이터 전송. 엔드포인트 유형(Endpoint Type)에서 리전(Regional)을 선택합니다.

6.    API 생성(Create API)을 선택합니다.

API의 리소스, 통합 지점 및 본문 매핑 템플릿을 구성

1.    API Gateway 콘솔에서 이전 단계에서 생성한 API의 이름을 선택합니다. API의 리소스 페이지가 열립니다.

2.    리소스 페이지에서 작업을 선택합니다. 그런 다음 리소스 생성을 선택합니다.

3.    새 하위 리소스(New Child Resource) 창에서 프록시 리소스로 구성(Configure as proxy resource)에 대해 확인 표시 아이콘을 선택한 다음 리소스 만들기(Create Resource)를 선택합니다.

4.    /{proxy+} - ANY - 설정 페이지에서 다음을 수행합니다.

  • 통합 유형(Integration type)에서 Lambda 함수 프록시(Lambda Function Proxy)를 선택합니다.
  • Lambda 리전(Lambda Region)의 경우 함수를 호스팅하는 AWS 리전을 선택합니다.
  • Lambda 함수(Lambda Function)의 경우 함수 이름 MappingTemplateTutorial을 입력합니다.

저장(Save)을 선택합니다. Lambda 함수에 권한 추가(Add Permission to Lambda Function) 팝업이 나타나면, 확인(OK)을 선택합니다.

7.    /{proxy+} - ANY - 메서드 실행 페이지에서 통합 요청(Integration Request)을 선택합니다.

8.    /{proxy+} - ANY - 통합 요청 페이지에서 다음을 수행합니다.

  • Lambda 프록시 통합 사용(Use Lambda Proxy integration)의 확인란을 선택 해제합니다. Lambda 통합으로 전환(Switch to Lambda integration) 팝업이 나타납니다.
  • 팝업에서 확인(OK)을 선택합니다. Lambda 함수에 권한 추가(Add Permission to Lambda Function) 팝업이 나타납니다. 팝업에서 확인(OK)을 선택합니다.
  • 매핑 템플릿(Mapping Templates)을 확장합니다.
  • [Request body passthrough]에서 [When there are no templates defined (recommended)]를 선택합니다.

매핑 템플릿 추가(Add mapping template)를 선택합니다. 콘텐츠 유형application/json을 입력합니다. 그런 다음, 확인 표시 아이콘을 선택합니다.

9.    템플릿 생성(Generate template) 드롭다운 목록을 선택한 다음 메서드 요청 패스스루(Method Request passthrough)를 선택합니다.

10.    매핑 템플릿 편집기에 다음을 입력합니다.

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
#set($allParams = $input.params())
{
"method" : "$context.httpMethod", ## API method
"authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers
## passthrough body
"body-json" : $input.json('$'),
## passthrough headers, querystrings and path parameters
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

11.    저장(Save)을 선택합니다.

12.    /{proxy+} - ANY - 메서드 실행 페이지로 돌아가려면 메서드 실행(Method Execution)을 선택합니다.

13.    메서드 응답(Method Response)을 선택하여 유효한 메서드 응답을 설정합니다.

14.    /{proxy+} - ANY - 메서드 응답 페이지에서 응답 추가(Add Response)를 선택합니다.

15.    HTTP 상태 코드에 200을 입력합니다. 그런 다음, 확인 표시 아이콘을 선택합니다.

16.    스테이지에 API를 배포(Deploy API)작업(Actions)을 선택합니다.

API를 새 스테이지에 배포

1.    REST API를 스테이지에 배포의 지침을 따릅니다. 자세한 내용은 API Gateway 콘솔을 사용하여 메서드 설정을 참조하세요.

2.    단계 편집기 창에서 호출 URL을 클립보드에 복사합니다.

REST API 호출 URL 예제

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage

설정 테스트

API에 의해 모든 데이터가 백엔드 Lambda 함수 또는 HTTP 엔드포인트로 전달되는지 확인하려면 다음 curl 명령을 실행합니다.

중요: https://restApiId.execute-api.region.amazonaws.com/stageName을 API의 호출 URL로 바꿉니다.

curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'

명령 출력에는 백엔드 Lambda 함수가 클라이언트에 수신한 모든 데이터가 포함됩니다. 환경에 맞게 출력 메시지를 업데이트할 수 있습니다.

참고: Windows에서 curl을 설치하려면 Git 웹 사이트에서 다운로드를 참조하세요. curl에 대한 자세한 내용은 curl 프로젝트 웹 사이트를 참조하세요.