2016-01-06 44 views
1

當從ruby SDK調用Amazon Web Service Lambda函數時,有什麼方法可以確定函數是否遇到了context.fail?如何從Ruby SDK調用AWS Lambda函數時知道context.fail?

即。如果我調用一個AWS lambda函數像這樣在Ruby SDK:

resp = LAMBDA.invoke({ 
        function_name: "cropSomeStuff", 
        invocation_type: "RequestResponse", 
        log_type: "Tail", # accepts None, Tail 
        payload: payload.to_json 
       }) 

和函數遇到context.fail(err)

resp.successful?仍然返回true。我可以看看Base64.decode64(resp.log_result)的日誌,但是,我沒有看到一種簡單的方法來以編程方式告訴函數調用在ruby級別失敗。

回答

1

response object應包括響應代碼(#status_code)和錯誤字符串(#function_error)。您可以使用這些檢測錯誤:

使用#function_error

unless resp.function_error.empty? 
    # An error occured 
end 

使用#status_code

unless resp.status_code.between?(200, 299) 
    # An error occured 
end 

(請注意,文件只有指定的成功爲「200範圍內「)

在文檔中沒有#successful?方法,所以不確定它是從哪裏來的。

+0

無論失敗與否,它都會返回200,並且function_error僅表示它已被處理。 – iMack

+0

'處理過的'和'未處理的'都意味着有錯誤,但如果您需要細節,您可能需要解析有效載荷。 – Drenmi

0

看起來好像解析resp.payload是最好的行爲方式,如果出現錯誤,那麼響應字典中唯一的密鑰將是errorMessage。只要該函數被調用,200就會返回,最好通過查看傳遞給context.fail的返回結果來處理這些情況。