Amazon API Gateway API를 통해 전달되는 사용자 지정 헤더를 처리하도록 사용자 지정(비프록시) 통합을 통해 AWS Lambda 함수를 구성하려고 합니다.
간략한 설명
기본적으로 Lambda 함수는 API Gateway API 요청에서 받은 메서드 요청 본문만 처리합니다. API Gateway API에서 Lambda 함수로 사용자 지정 헤더를 전달하려면 본문 매핑 템플릿을 사용하십시오. API는 먼저 업데이트된 API 요청을 Lambda 함수에 전송하여 헤더를 처리합니다. 그러면 Lambda 함수가 원래 API 요청에서 하나 이상의 헤더 값을 반환합니다.
해결 방법
필요한 IAM 권한 구성
IAM 권한으로 REST API에 대한 액세스 제어의 지침을 따르십시오.
이 절차를 테스트하려면 AWS Identity and Access Management(IAM) 역할을 생성한 다음 AmazonAPIGatewayInvokeFullAccess와 AmazonAPIGatewayPushToCloudWatchLogs를 AWS 관리형 정책에 연결합니다. 자세한 내용은 AWS 관리형 정책을 참조하십시오.
Lambda 함수를 생성하여 API Gateway API에서 사용자 지정 헤더 처리
다음 단계를 완료하십시오.
- Lambda 콘솔을 엽니다.
- 함수 생성을 선택합니다. 처음부터 새로 작성 옵션이 선택된 상태로 함수 생성 페이지가 열립니다.
- 기본 정보 창에서 다음 작업을 수행합니다.
함수 이름에 함수의 용도를 설명하는 이름을 입력합니다. 예: CustomHeaders.
런타임에 Node.js 20.x를 선택합니다.
- 권한에서 기본 실행 역할 변경을 확장합니다.
- 기존 역할 사용을 선택합니다. 기존 역할의 드롭다운 목록이 나타납니다.
- 기존 역할에서 이전에 생성한 Lambda 실행 역할을 선택합니다.
- 함수 생성을 선택합니다.
- 코드 소스 창에서 편집기 창의 index.mjs 코드를 다음 코드로 바꿉니다.
export const handler = async (event, context, callback) => {
callback(null, "The custom header " +event.headers["header1"] +" has been processed successfully by AWS Lambda via Amazon API Gateway");
};
배포를 선택합니다.
자세한 내용은 Node.js를 사용하여 Lambda 함수 빌드를 참조하십시오.
API Gateway REST API 생성
다음 단계를 완료하십시오.
- API Gateway 콘솔을 엽니다.
- API 생성을 선택합니다 .
-또는-
API Gateway를 처음 사용하는 경우 API Gateway의 기능을 소개하는 페이지가 나타납니다. REST API에서 빌드를 선택합니다.
- REST API 생성 섹션의 API 세부 정보에서 새 API를 선택합니다.
- API 이름에 API 용도를 설명하는 이름을 입력합니다. 예: SendtoLambda.
(선택 사항) 설명에 API 용도를 간략히 설명합니다.
엔드포인트 유형에서 지역을 선택합니다.
- API 생성을 선택합니다.
API의 통합 포인트 및 바디 매핑 템플릿 구성
다음 단계를 완료하십시오.
-
API Gateway 콘솔을 엽니다.
-
이전에 생성한 API의 이름을 선택합니다. API의 리소스 페이지가 열립니다.
-
리소스 페이지에서 리소스 생성을 선택합니다.
-
리소스 생성 창에서 다음 작업을 수행합니다.
리소스 이름에 리소스를 설명하는 이름을 입력합니다. 예: HeadersResource.
리소스 생성을 선택합니다.
-
생성한 리소스를 선택한 다음 메서드 생성을 선택합니다.
-
메서드 생성 창에서 다음 작업을 수행합니다.
메서드 유형의 드롭다운 목록에서 POST를 선택합니다.
통합 유형에서 Lambda 함수를 선택합니다.
Lambda 프록시 통합이 비활성화되어 있는지 확인합니다.
Lambda 함수에서 함수를 호스팅하는 AWS 리전을 선택한 다음 Lambda 함수의 이름 또는 Amazon 리소스 이름(ARN)을 입력합니다.
메서드 생성을 선택합니다. 이 작업은 Lambda 함수를 호출할 수 있는 권한을 API Gateway에 자동으로 부여합니다.
-
이전 단계에서 생성한 리소스 메서드로 POST를 선택합니다. 메서드 실행 창에서 통합 요청을 선택합니다.
-
통합 요청 창에서 편집을 선택하고 다음 작업을 수행합니다.
요청 본문 패스스루에서 **템플릿이 정의되지 않은 경우(권장)**를 선택합니다.
창 하단에서 매핑 템플릿을 확장합니다.
매핑 템플릿 추가를 선택합니다.
콘텐츠 유형에 application/json을 입력합니다.
-
템플릿 본문 편집기에서 다음을 입력합니다.
{
"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 배포
다음 단계를 완료하십시오.
- 지침에 따라 REST API를 스테이지에 배포합니다. 자세한 내용은 API Gateway에서 REST API의 스테이지 설정을 참조하십시오.
- API 배포 버튼을 선택합니다.
- API 배포 팝업 창에서 스테이지의 새 이름을 입력한 다음 배포를 선택합니다.
- 스테이지 창에서 스테이지를 확장하면 이전 단계에서 만든 리소스와 메서드를 볼 수 있습니다.
- 리소스 메서드로 POST를 선택하고 호출 URL을 클립보드에 복사합니다.
REST API 호출 URL의 예:
https://1a2bc3d456.execute-api.region.amazonaws.com/stageName/resourceName
설정 테스트
API와 Lambda 함수가 헤더를 처리하고 있는지 확인하려면 다음 curl 명령을 실행합니다.
curl -H "Content-Type: application/json" -H "header1: value1" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName
참고: ** API의 호출 URL로 바꾸십시오.
출력 예시
"The custom header value1 has been processed successfully by AWS Lambda via Amazon API Gateway"
참고: Windows에 curl을 설치하려면 Git 웹 사이트에서 다운로드를 참조하십시오. curl에 대한 자세한 내용은 curl 프로젝트 웹 사이트를 참조하십시오.
관련 정보
API Gateway의 데이터 변환 설정
AWS Lambda에서 권한 관리
IAM 권한으로 REST API에 대한 액세스 제어