1

我準備了一個管道來創建Lambda & API網關。我的功能是一個計算器。 當我單獨測試Lambda函數時,如果給出正確的響應,但是當我調用API網關URL並傳遞相同的JSON時,它會給出如下錯誤。AWS Codepipeline搭建AWS Lambda,API Gateway返回格式錯誤的Lambda代理響應,502錯誤

Fri Jun 02 09:17:46 UTC 2017 : Endpoint response body before transformations: "Invalid operator entered" 
Fri Jun 02 09:17:46 UTC 2017 : Endpoint response headers: {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=57991ca2-4774-11e7-bb26-5f9c6ab6fea6, Connection=keep-alive, Content-Length=26, Date=Fri, 02 Jun 2017 09:17:46 GMT, X-Amzn-Trace-Id=root=1-59312d3a-625acffb6cc2497ff543900e;sampled=0, Content-Type=application/json} 
Fri Jun 02 09:17:46 UTC 2017 : Execution failed due to configuration error: Malformed Lambda proxy response 
Fri Jun 02 09:17:46 UTC 2017 : Method completed with status: 502 

我的lambda函數是如下

exports.calculator = (event, context, callback) => { 
    // TODO implement 
    var i1 = event.key1; 
    var i2 = event.key2; 
    var operation = event.key3; 
    switch(operation){ 
     case '+' : callback(null, i1+i2);break; 
     case '-' : callback(null, i1-i2);break; 
     case '*' : callback(null, i1*i2);break; 
     case '/' : callback(null, i1/i2);break; 
     default:callback(null,"Invalid operator entered");break; 
    } 
}; 

任何建議,請

感謝

回答

0

聽起來你正在使用API網關中的'代理'風格Lambda集成。您可以在「集成請求」頁面的API網關控制檯中確認。

在這種情況下,由lambda函數生成的響應必須是以下格式:

{ 
    "body": "<payload>", 
    "statusCode": <http_status_code>, 
    "headers" : { 
    <response_headers_map> 
    } 
} 

API網關將解析此併爲客戶端生成一個匹配HTTP響應。

+0

我理解了這個問題,並在Integration Request頁面看到已選擇了代理風格。 但是,你能否更多地解釋我應該怎麼做才能解決它。你已經給出瞭解釋的響應格式,但我應該在哪裏添加它。請幫忙。 對不起,無知。雖然我認爲它是在方法響應,但如何? – Rohit

+0

我正在使用Codepipeline來構建和部署。 – Rohit

+0

我甚至在取消選擇Lambda代理集成後嘗試過,但結果相同。 – Rohit