我们使用 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]