API Gateway의 API HTTP 504 제한 시간 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon API Gateway를 사용하여 REST API, HTTP API, Websocket API를 호출했을 때 HTTP 504 오류 상태 코드를 받았습니다.

간략한 설명

통합 요청이 API Gateway REST API의 최대 통합 시간 제한 파라미터보다 오래 걸리면 API Gateway가 HTTP 504 상태 코드를 반환합니다.

API Gateway의 504 제한 시간 오류를 해결하려면 먼저 Amazon CloudWatch 실행 로그에서 오류의 원인을 찾아서 확인합니다. 그리고 다음 방법 중 하나를 사용하여 시간이 초과되지 않을 때까지 통합 요청의 런타임을 낮춥니다.

해결 방법

Amazon CloudWatch Logs에서 504 오류의 원인을 식별하고 확인하려면

1.    Rest APIWebsocket API의 경우, 504 오류에 대해 API Gateway 실행 로그를 설정합니다. HTTP API의 경우, CloudWatch 로그에 로그를 작성하는 로깅을 활성화합니다.

2.    API에서 504 오류를 수동으로 재현합니다.

3.    API에 대해 액세스 로깅을 활성화하고, 다음 파라미터 변수를 사용하여 오류의 원인을 진단합니다.

$context.integration.status: The status code returned from an integration. For AWS Lambda proxy integrations, this is the status code that your Lambda function code returns.
$context.integrationStatus: For Lambda proxy integration, this parameter represents the status code returned from Lambda, not from the backend Lambda function.
$context.integrationLatency: The integration latency in ms.

자세한 내용은 데이터 모델, 권한 부여자, 매핑 템플릿 및 CloudWatch 액세스 로깅에 대한 $context 변수 섹션을 참조하세요.

4.    다음 CloudWatch 로그 인사이트 쿼리를 사용하여 액세스 로그에서 '5XX' 상태 코드를 필터링합니다.

fields @timestamp, @message, @logStream
| filter status like ‘5’
| sort @timestamp desc
| display @timestamp,httpMethod,resourcePath,status,extendedRequestId,requestId

5.    CloudWatch 콘솔에서 오류를 수신하는 통합에 대한 API Gateway 실행 로그를 봅니다.

6.    CloudWatch 로그에서 요청 ID를 추적합니다. 통합에 제한 시간이 있는 경우, “Endpoint request body after transformations:” 행 다음에 “Execution failed due to a timeout” 오류가 보입니다. 자세한 내용은 내 CloudWatch logs에서 API Gateway REST API 오류를 찾으려면 어떻게 해야 하나요?를 참조하세요.

7.    다음 CloudWatch 로그 인사이트 쿼리를 사용하여 오류를 필터링하고, API 게이트웨이 실행 로그 그룹을 선택합니다.

fields @timestamp, @message
|filter @message like "Execution failed due to a timeout error"
|sort @timestamp desc

8.    오류의 원인을 확인하려면 연결된 통합 엔드포인트가 호출되었는지 확인합니다.

9.    통합이 요청 처리를 완료하고 API 게이트웨이에 응답하는 데 걸린 시간을 확인합니다.

10.    통합이 호출되지 않은 경우 클라이언트에서 API 재시도를 구현합니다. (API 게이트웨이 서비스의 일시적인 네트워크 장애로 인해 오류가 발생했을 수 있습니다.)

참고: 애플리케이션에 멱등성이 있는지 확인합니다. 이렇게 하면 API 요청을 다시 시도할 때 데이터 충돌을 방지합니다.

-또는-

통합이 호출되었지만 여전히 504 오류 메시지를 반환하는 경우, 통합 런타임을 줄여보세요. HTTP API인 경우, 최대 통합 요청 제한 시간 파라미터를 늘릴 수도 있습니다.

참고: API 게이트웨이 REST API의 기본 최대 통합 시간 제한은 29초입니다. HTTP API의 경우 최대 30초까지 시간 제한을 구성할 수 있습니다. 최댓값 제한은 늘릴 수 없습니다.

통합 런타임을 줄이는 방법

  • API Gateway가 클라이언트로 HTTP 응답을 보내는 데 필요한 로직만 백엔드 통합에 포함되어 있는지 확인하세요. 비종속 또는 후처리 로직은 Lambda와 같은 다른 서비스로 이동하는 것이 좋습니다.
  • 네트워크 지연으로 인해 504 오류가 발생하는 경우 클라이언트 측 애플리케이션에서 재시도 로직을 구현하세요.
  • 플랫폼 최적화 모범 사례를 준수하여 백엔드 통합 성능을 개선합니다.
  • 백엔드 Lambda 함수의 비동기 호출 설정을 고려해 보세요.

관련 정보

REST API 통합 설정

API Gateway에서 WebSocket API 통합 요청 설정

HTTP API에 대한 통합 구성

Amazon API Gateway 할당량 및 중요 정보