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 함수의 출력 형식을 참조하십시오.

  1. API Gateway 콘솔에서 로깅 출력을 검토하거나 Amazon CloudWatch 콘솔에서 API Gateway 로그 이벤트를 확인합니다.
  2. 로그에서 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, bodyisBase64Encoded의 4개 필드가 있습니다.

  • statusCode는 API Gateway를 통해 해석되어 API 메서드 호출자에게 반환되는 정수입니다.method
  • headers는 수집된 후 API Gateway 응답을 통해 다시 전송됩니다.
  • JSON을 반환하는 경우 응답과 관련된 추가 문제를 방지하려면 body 필드를 문자열로 변환해야 합니다. 이 작업은 Node.js 함수에서 JSON.stringify를 사용하여 처리할 수 있습니다. 런타임에 따라 서로 다른 해결 방법을 적용해야 하지만 개념은 동일합니다.
  • isBase64Encoded 필드는 바이너리 데이터로 작업하는 경우 중요합니다. 이 필드를 사용하지 않는 경우 false 부울 값으로 설정되어야 합니다.

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2017-10-16

업데이트 날짜: 2019-01-21