API Gateway "malformed Lambda proxy response" 오류 또는 502 상태 코드를 해결하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 10월 30일
AWS Lambda 함수 작업을 위해 Amazon API Gateway 프록시 통합을 구성했습니다. API를 호출하면 구성 오류 또는 502 상태 코드가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
이러한 오류의 원인은 Lambda 함수의 응답 형식에 있는 경우가 많습니다. 형식에 문제가 있다면 로그에 다음과 같은 메시지가 표시됩니다.
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 함수의 출력 형식을 참조하십시오.
해결 방법
- API Gateway 콘솔에서 로깅 출력을 검토하거나 Amazon CloudWatch 콘솔에서 API Gateway 로그 이벤트를 확인합니다.
- 로그에서 API에 대한 Lambda 함수의 응답 형식을 확인합니다. 응답이 올바른 JSON 형식이 아니라면 형식을 다시 지정합니다.
올바른 형식의 응답이 포함된 Node.js의 예제 함수
exports.handler = (event, context, callback) => {
var responseBody = {
"key3": "value3",
"key2": "value2",
"key1": "value1"
};
var response = {
"statusCode": 200,
"headers": {
"my_header": "my_value"
},
"body": JSON.stringify(responseBody),
"isBase64Encoded": false
};
callback(null, response);
};
참고: 함수가 다른 프로그래밍 언어로 작성된 경우 해당 언어의 프로그래밍 참조를 참조하십시오. 함수가 올바른 형식으로 응답을 반환하는지 확인합니다.
이 응답에는 statusCode, headers, body 및 isBase64Encoded의 4개 필드가 있습니다.
- statusCode는 API Gateway를 통해 해석되어 API 메서드 호출자에게 반환되는 정수입니다.
- headers는 수집된 후 API Gateway 응답을 통해 다시 전송됩니다.
- JSON을 반환하는 경우 응답과 관련된 추가 문제를 방지하려면 body 필드를 문자열로 변환해야 합니다. Node.js 함수에서 JSON.stringify를 사용하여 이를 처리할 수 있습니다. 런타임에 따라 서로 다른 해결 방법을 적용해야 하지만 개념은 동일합니다.
- isBase64Encoded 필드는 바이너리 데이터로 작업하는 경우 중요합니다. 이 필드를 사용하지 않는 경우 이 필드를 FALSE의 부울 값으로 설정하는 것이 가장 좋습니다.