0

我们使用 Middy 作为我们所有 lambdas 的包装器来处理一些日志记录和检测逻辑,这很棒。我们还使用 LaunchDarkly (launchdarkly-node-server-sdk) 来无服务器访问功能标志,遵循此处提出的基本选项 1 。那也很棒。

现在,尝试将这些方法结合起来用于处理流事件的新 lambda 函数,我遇到了一个问题,即 lambda 可以正常调用,但只有一次,然后挂起。当它超时时,调用被视为失败,并且该事件永远不会从流中删除,从而导致每 120 秒对同一事件进行新的调用。需要明确的是,造成问题的不是装饰品之一,而是它本身。

所以这有效:

const wrap = f => {
  return f;
  //   ...
};   

  const clientLD = LaunchDarkly.init(process.env.LaunchDarklySDKKey, { logger });

 
  const handler = wrap(async (event,context) => {
  try {
    logger.info(event);

    await clientLD.waitForInitialization();
    const list = await clientLD.variation(
      'tenants-forwarding-to-analytics',
      { key: 'lambda-function-dynamostreamforwarder' },
      [],
    );

    logger.info(list);
  } catch (e) {
    logger.error(e.message, e);
  }
  return null;
});

但这挂起:

const wrap = f => {
  return middy(f);
  //   ...
};   

// [same]
4

1 回答 1

0

在这里找到我的答案

就我而言,侵入性最小的解决方案是简单地添加以下行:

    context.callbackWaitsForEmptyEventLoop = false;

给我的处理程序。

于 2021-11-02T16:09:24.697 回答