API Gateway REST API에서 HTTP 502 "malformed Lambda proxy response" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 11월 18일

AWS Lambda 함수와 함께 작동하도록 Amazon API Gateway 프록시 통합을 구성했습니다. REST API를 호출하면 구성 오류 또는 HTTP 502 상태 코드가 발생합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

API 요청에 대한 Lambda 함수의 응답이 올바르게 형식이 지정되지 않은 경우 API Gateway는 HTTP 502 상태 코드를 반환합니다.

Amazon CloudWatch Logs에 나타나는 HTTP 502 "Malformed Lambda proxy response" 오류 메시지의 예

Thu Dec 08 01:13:00 UTC 2016 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Dec 08 01:13:00 UTC 2016 : Method completed with status: 502

API Gateway가 Lambda 함수의 응답을 처리하려면 함수가 다음 JSON 형식에 따라 출력을 반환해야 합니다.

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

자세한 내용은 프록시 통합을 위한 Lambda 함수의 출력 형식을 참조하십시오.

해결 방법

1.    API Gateway의 API 대시보드를 사용하여 REST API의 CloudWatch 지표를 검토합니다.
-또는-
Amazon CloudWatch 콘솔에서 REST API의 로그 이벤트를 검토합니다.

2.    로그에서 API에 대한 Lambda 함수의 응답 형식을 검토합니다. 응답이 필수 JSON 형식이 아닌 경우 형식을 다시 지정합니다.

3.    API Gateway 콘솔에서 REST API 방식을 테스트합니다.

응답의 형식이 올바르게 지정된 Node.js Lambda 함수의 예

참고: Node.js Lambda 함수는 비동기 핸들러비동기 외의 핸들러를 지원합니다. 다음 예제 함수는 비동기 핸들러를 사용합니다.

exports.handler = async (event) => {

    const responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    const response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };

    return response;
};

이 예제 응답에는 네 개의 필드가 있습니다.

  • statusCode는 API Gateway에서 해석되는 정수로, API 메서드의 호출자에게 반환됩니다.
  • headers는 수집된 후 API Gateway 응답과 함께 다시 전송됩니다.
  • body데이터를 JSON으로 반환하는 경우 문자열로 변환되어야 합니다.
    참조: 이 작업은 JSON.stringify를 사용하여 Node.js 함수에서 처리할 수 있습니다. 다른 런타임에는 서로 다른 솔루션이 필요하지만 개념은 동일합니다.
  • isBase64Encoded 필드는 바이너리 데이터로 작업하는 경우 필수 필드입니다. 이 필드를 사용하지 않는 경우 값을 FALSE로 설정하는 것이 모범 사례입니다.