AWS Lambda和Redis客户端。为什么我不能打电话回叫?

时间:2016-09-20 15:29:41

标签: node.js amazon-web-services redis aws-lambda

我正在尝试编写一个使用Redis的AWS Lambda函数。当我运行以下代码时:

'use strict'

function handler (data, context, callback) {
  const redis = require("redis")
  const _ = require("lodash")
  console.log('before client')
  const client = redis.createClient({
    url: 'redis://cache-url.euw1.cache.amazonaws.com:6379',
  })
  console.log('after client')
  callback(null, {status: 'result'})
  console.log('after callback')
}

exports.handler = handler

我有这样的答案:

{
  "errorMessage": "2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds"
}

和日志看起来像:


17:22:24
START RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da Version: $LATEST

17:22:26
2016-09-20T15:22:26.014Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    before client

17:22:26
2016-09-20T15:22:26.134Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    after client

17:22:26
2016-09-20T15:22:26.135Z    07d24e0b-7f46-11e6-85e9-e5f48906c0da    after callback

17:22:27
END RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da

17:22:27
REPORT RequestId: 07d24e0b-7f46-11e6-85e9-e5f48906c0da  Duration: 3001.81 ms    Billed Duration: 3000 ms Memory Size: 128 MB    Max Memory Used: 24 MB

17:22:27
2016-09-20T15:22:27.301Z 07d24e0b-7f46-11e6-85e9-e5f48906c0da Task timed out after 3.00 seconds

,恕我直言,这意味着回调被召唤但没有发生任何事情。

当我删除客户端的初始化时,我看到了正确的响应。

任何想法?

1 个答案:

答案 0 :(得分:4)

来自the official documentation

  

当调用回调时,Lambda函数仅在之后退出   Node.js事件循环为空。

由于您正在调用回调,但您的Lambda函数调用没有结束,看起来您仍然在事件循环上有一些东西。除了创建Redis连接之外,您的功能并没有做任何事情。我猜你需要在完成后关闭Redis连接,以便清除事件循环并允许Lambda调用完成。