API Gateway를 Lambda 함수와 통합할 때 발생하는 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 4월 6일

Amazon API Gateway를 AWS Lambda 함수와 통합할 때 발생하는 오류를 해결하려고 합니다.

해결 방법

API 및 스테이지에 대한 로깅 활성화

1.    API Gateway 콘솔에서 API에 대한 [스테이지 편집기(Stage Editor)]를 찾습니다.

2.    [스테이지 편집기(Stage Editor)] 창에서 [로그/추적(Logs/Tracing)] 탭을 선택합니다.

3.     [로그/추적(Logs/Tracing)] 탭의 [CloudWatch 설정(CloudWatch Settings)]에서 다음을 수행하여 로깅을 활성화합니다.
[CloudWatch Logs 활성화(Enable CloudWatch Logs)] 확인란을 선택합니다.
[로그 수준(Log level)]에서 [정보(INFO)]를 선택하여 모든 요청에 대한 로그를 생성합니다. 또는 오류를 발생시키는 API에 대한 요청에 대해서만 로그를 생성하려면 [오류(ERROR)]를 선택합니다.
REST API에 대해 [전체 요청/응답 데이터 로깅(Log full requests/responses data)] 확인란을 선택합니다. 또는 WebSocket API에 대해 [전체 메시지 데이터 로깅(Log full message data)] 확인란을 선택합니다.

4.    [사용자 지정 액세스 로깅(Custom Access Logging)]에서 다음을 수행하여 액세스 로깅을 활성화합니다.
[액세스 로깅 활성화(Enable Access Logging)] 확인란을 선택합니다.
[액세스 로그 대상 ARN(Access Log Destination ARN)]에 CloudWatch 로그 그룹 또는 Amazon Kinesis Data Firehose 스트림의 Amazon 리소스 이름(ARN)을 입력합니다.
[로그 형식(Log Format)]을 입력합니다. 지침의 경우 CLF, JSON, XML 또는 CSV를 선택하여 해당 형식의 예제를 볼 수 있습니다.

5.    [변경 내용 저장(Save Changes)]을 선택합니다.
참고: 콘솔은 설정이 저장되었는지 확인하지 않습니다.

자세한 내용은 API Gateway 콘솔을 사용하여 CloudWatch API 로깅 설정을 참조하세요.

6.    로그에서 식별하는 오류 유형에 따라 다음 중 하나를 선택합니다.

다음 오류가 발생하면 동시성 문제 해결 섹션의 단계를 완료합니다.

(XXXXX) Lambda invocation failed with status: 429. Lambda request id: XXXXXXXXXX
(XXXXX) Execution failed due to configuration error: Rate Exceeded.
(XXXXX) Method completed with status: 500

다음 오류 중 하나가 발생하면 시간 초과 문제 해결 섹션의 단계를 완료합니다.

Lambda 사용자 지정 통합의 경우:

< 29 sec:
(XXXXX) Method response body after transformations: {"errorMessage":"2019-08-14T02:45:14.133Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Lambda 프록시 통합의 경우:

< 29 sec:
(XXXXX) Endpoint response body before transformations: {"errorMessage":"2019-08-14T02:50:25.865Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

다음 오류가 발생하면 함수 오류 해결 섹션의 단계를 완료합니다.

(XXXXX) Execution failed due to configuration error: Malformed Lambda proxy response
(XXXXX) Method response body after transformations: {"errorMessage": "Syntax error in module 'lambda_function'"}

동시성 문제 해결

Lambda 함수를 확장할 수 있는 것보다 빠르게 API Gateway에서 추가 요청이 들어오면 429 조절 오류 또는 500 오류가 발생합니다.

이러한 오류를 해결하려면 CloudWatch에서 Cound(API Gateway), Throttles(Lambda) 및 ConcurrentExecutions(Lambda) 지표를 분석합니다. 다음을 고려합니다.

  • Count(API Gateway)는 지정된 기간의 총 API 요청 수입니다.
  • Throttles(Lambda)는 조절된 호출 요청 수입니다. 모든 함수 인스턴스가 요청을 처리 중이고 동시성을 확장할 수 없는 경우 Lambda는 TooMayRequestException 오류로 추가 요청을 거부합니다. 조절된 요청 및 기타 호출 오류는 호출 또는 오류로 계산되지 않습니다.
  • ConcurrentExecutions(Lambda)는 이벤트를 처리하는 함수 인스턴스 수입니다. 이 수가 AWS 리전의 동시 실행 할당량 또는 함수에서 구성한 예약된 동시성 한도에 도달하면 추가 호출 요청이 조절됩니다.

참고: 자세한 내용은 API Gateway 지표AWS Lambda 함수 지표 작업을 참조하세요.

Lambda 함수에서 동시성 예약을 설정한 경우 Lambda 함수에 대해 더 높은 동시성 예약 값을 설정합니다. 또는 Lambda 함수에서 동시성 예약 값을 제거합니다. 그러면 예약되지 않은 동시 실행 풀에서 함수를 가져옵니다.

Lambda 함수에서 동시성 예약을 설정하지 않은 경우 ConcurrentExecutions 지표를 확인하여 사용량을 확인합니다. 자세한 내용은 Lambda 할당량을 참조하세요.

시간 초과 문제 해결

모든 API Gateway 통합에 대한 통합 제한 시간은 29초(하드 제한)입니다. Lambda 통합을 사용하여 API Gateway API를 구축할 때 두 가지 시나리오가 발생할 수 있습니다. 제한 시간이 29초 미만인 경우 또는 29초를 초과한 경우가 이러한 시나리오에 해당합니다.

Lambda 함수 제한 시간이 29초 미만인 경우 Lambda 로그를 확인하여 이 문제를 조사합니다. Lambda 함수를 29초 후에 실행해야 하는 경우 Lambda 함수를 비동기식으로 호출하는 방법을 고려합니다.

Lambda 사용자 지정 통합의 경우 다음 단계를 완료합니다.

1.    API Gateway 콘솔을 엽니다.

2.    탐색 창에서 [API]를 선택하고 API를 선택합니다.

3.    [리소스(Resources)]를 선택하고 메서드를 선택합니다.

4.    [통합 요청(Integration Request)]을 선택합니다.

5.    메서드 요청(Method Request)을 선택합니다.

6.    [HTTP 요청 헤더(HTTP Request Headers)]를 확장합니다.

7.    [헤더 추가(Add header)]를 선택합니다.

8.    [이름(Name)]에 헤더 이름을 입력합니다. 예: X-Amz-Invocation-Type

중요: 'Event'에서 헤더를 매핑해야 합니다(작은 따옴표를 입력해야 함).

Lambda 프록시 통합의 경우:

2개의 Lambda 함수, 함수 A와 함수 B를 사용합니다. API Gateway는 먼저 함수 A를 동기적으로 호출합니다. 그런 다음, 함수 A는 함수 B를 비동기적으로 호출합니다. 함수 A는 함수 B의 응답에 신경 쓰지 않으므로, 함수 B가 비동기적으로 호출될 때 API Gateway에 대한 응답을 반환할 수 있습니다.

Lambda 프록시 통합을 사용하는 경우 사용자 지정 통합으로 변경하는 방법을 고려합니다. 그러나 요청/응답을 원하는 형식으로 변환하도록 매핑 템플릿을 구성해야 합니다. 자세한 내용은 백엔드 Lambda 함수의 비동기 호출 설정을 참조하세요.

참고: 비동기 Lambda 함수는 백그라운드에서 실행되므로 클라이언트는 Lambda 함수에서 직접 데이터를 수신할 수 없습니다. 영구 데이터를 저장하려면 중간 데이터베이스가 있어야 합니다.

함수 오류 해결

API를 호출할 때 함수 오류가 발생할 수 있습니다. 이 오류는 Lambda 함수의 구문 오류로 인해 발생할 수 있습니다. Lambda 함수가 프록시 통합을 위해 API Gateway에서 예상하는 유효한 JSON 객체를 반환하지 않는 경우에도 이 오류가 발생할 수 있습니다.

이 오류를 해결하려면 API 및 스테이지에 대한 로깅 활성화 섹션의 단계를 완료합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?