사용자 지정 Lambda 통합을 사용하여 API Gateway를 통해 Lambda 함수에 사용자 지정 헤더를 전달하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 7월 27일

Amazon API Gateway API를 통해 전달된 사용자 지정 헤더를 처리하는 AWS Lambda 함수를 구성하고 싶습니다. 어떻게 설정해야 하나요?

간략한 설명

기본적으로 Lambda 함수는 API Gateway API 요청에서 수신하는 메서드 요청 본문만 처리합니다. API Gateway API에서 Lambda 함수로 사용자 지정 헤더를 전달하려면 본문 매핑 템플릿을 사용합니다. API는 업데이트된 API 요청을 Lambda 함수로 전송하여 헤더를 처리합니다. 그런 다음 Lambda 함수는 원래 API 요청에서 하나 이상의 헤더 값을 반환합니다.

해결 방법

필요한 IAM 권한을 구성합니다.

IAM 권한을 사용하여 API에 대한 액세스 제어의 지침을 따릅니다.

이 절차를 테스트하기 위해 IAM 역할을 생성하고 다음 AWS 관리형 정책을 연결할 수 있습니다.

  • AmazonAPIGatewayInvokeFullAccess
  • AmazonAPIGatewayPushToCloudWatchLogs

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

1.    Lambda 콘솔을 엽니다.

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

3.    기본 정보 창에서 다음을 수행합니다.
함수 이름에 함수의 용도를 설명하는 이름을 입력합니다. 예: CustomHeaders.
런타임에서 Node.js 14.x를 선택합니다.

4.    권한에서 기본 실행 역할 변경을 확장합니다.

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

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

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

8.    구성 창의 함수 코드에서 편집기 창(index.js)의 코드를 다음 내용으로 교체합니다.

exports.handler = (event, context, callback) => {
// TODO implement
callback(null, "This message header was processed by Amazon " +event.headers["header1"]);
};

9.    저장을 선택합니다.

자세한 내용은 Node.js를 사용하여 Lambda 함수 구축을 참조하세요.

API Gateway REST API 생성

1.    API Gateway 콘솔을 엽니다.

2.    API 생성을 선택합니다.

-또는-

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

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

4.    [Create new API]에서 [New API]를 선택합니다.

5.    설정에서 다음을 수행합니다.
API 이름에 API의 용도를 설명하는 이름을 입력합니다. 예: SendtoLambda.
(선택 사항) 설명에 API의 용도에 대한 간단한 설명을 입력합니다.
엔드포인트 유형에서 리전을 선택합니다.

6.    API 생성을 선택합니다.

API의 통합 지점 및 본문 매핑 템플릿 구성

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

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

3.    새 하위 리소스 창에서 다음을 수행합니다.
리소스 이름에 리소스를 설명하는 이름을 입력합니다. 예: HeadersResource.
리소스 생성을 선택합니다.

4.    작업을 선택합니다. 그런 다음, 메서드 생성을 선택합니다.

5.    /headersresource 아래의 드롭다운 목록에서 POST를 선택합니다. 그런 다음, 확인 표시 아이콘을 선택합니다.

6.    /headersresource - POST - 설정 페이지에서 다음을 수행합니다.
통합 유형에서 Lambda 함수를 선택합니다.
Lambda 리전의 경우 함수를 호스팅하는 AWS 리전을 선택합니다.
Lambda 함수에 함수 이름을 입력합니다.
저장을 선택합니다. Lambda 함수에 권한 추가 팝업이 나타납니다.
팝업에서 확인을 선택합니다.

7.    /headersresource - POST - 메서드 실행 페이지에서 통합 요청을 선택합니다.

8.    /headersresource - POST - 통합 요청 페이지에서 다음을 수행합니다.
매핑 템플릿을 확장합니다.
[Request body passthrough]에서 [When there are no templates defined (recommended)]를 선택합니다.
매핑 템플릿 추가를 선택합니다.
콘텐츠 유형application/json을 입력합니다. 그런 다음, 확인 표시 아이콘을 선택합니다.

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

{
    "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
    }
}

10.    저장을 선택합니다.

API를 새 스테이지에 배포

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

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

REST API 호출 URL 예제

https://1a2bc3d456.execute-api.region.amazonaws.com/test

설정 테스트

API 및 Lambda 함수에 의해 메시지 헤더가 처리되고 있는지 확인하려면 다음 curl 명령을 실행합니다.

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

curl -H "Content-Type: application/json" -H "header1: API Gateway and AWS Lambda" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/headersresource

명령 출력 예

"This message header was processed by Amazon API Gateway and AWS Lambda"

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