我對AWS lambda和node.js都是新手。我已經通過一些異步架構進行了摔角,這些架構讓我很熟悉,但仍然沒有經驗,還有回調。我確定這是相關的,但我不明白爲什麼,因爲如果我在本地測試它,它會運行得很好。我已經正確設置了環境變量並測試了它也被傳遞了。AWS Lambda和Node.js函數沒有被調用
在下面的代碼片段中,我使用Claudia Bot Builder來獲取一條slack-slash-command消息,並將它傳遞給此SlackResponse函數,該函數使用Node Hubspot API通過用戶名進行查詢。出於某種原因,client.contacts搜索命令從不被調用。所有console.log()報告都顯示出來,但搜索回調似乎從不會執行,甚至是異步執行。
function SlackResponse(message, request, debug, currentresponse){
var SlackResponse = currentresponse;
var SenderID = message.originalRequest.user_name;
var CustomerID = 0;
if (debug){
SlackResponse += 'Slack Debug On' + '\r';
SlackResponse += 'SenderID: ' + SenderID + '\r';
}
client.useKey(process.env.HAPI_Key);
console.log('API Key set \r');
console.log(message);
console.log(currentresponse);
client.contacts.search(SenderID,
function processSearchResult(err, res) {
console.log('In processSearchResult function \r');
console.log(JSON.stringify(res));
if (err) { console.log('uh oh'); throw err; }
if (res.total === 0)
{
if(debug){console.log('New Customer Identified' + '\r')}
// Create a new Contact
var payload = {
"properties": [
{
"property": "firstname",
"value": SenderID
}]
}
client.contacts.create(payload, function(err, res){
if (err) { throw err; }
CustomerID = res.vid;
if(debug){console.log('New Customer Created with CustomerID: ' + CustomerID + '\r')}
})
}
else
{
CustomerID = res.contacts[0].vid;
if(debug){console.log('Hubspot CustomerID:' + CustomerID + '\r')}
}
}
);
console.log('About to return \r');
return SlackResponse;
}
任何人都可以解釋爲什麼這是發生?這是一個權限問題?爲什麼它在本地運行,但不在AWS中運行?
當函數執行完畢什麼被記錄在日誌的CloudWatch?是否有錯誤訊息?該功能是否超時?什麼是函數的配置超時值?您是否將此功能配置爲在沒有NAT網關的情況下在VPC內部運行? –
CloudWatch按預期方式顯示記錄到client.contacts.search()調用。沒有錯誤信息,我可以看到,雖然有可能我沒有在這裏找一個合適的菜鳥。函數使用默認的超時值,我相信這在Claudia中默認爲兩分鐘。我不知道如何回答你最後的問題,因爲我不知道這意味着什麼。 – dave
應該有一個日誌行說明函數執行的時間,以及它是否正常退出,或者有錯誤或超時。 –