0

我需要解决 lambda 的一个常见问题,即冷启动问题。当我使用带有打字稿的 CDK 时。我见过很多解决方案,但没有找到正确的方法。如果有任何插件解决了我的问题,那么我提到了在一段时间后调用 lambda 函数的逻辑。还需要并发特性和成本也很重要,而在 CDK 中我为 lambda- 定义的类似代码

const lambda = new aws.lambda.Function("mylambda", {
    code: lambda.Code.fromAsset("/src"),
    handler: "handler",
    timeout: 30
});

如何解决冷启动问题。

4

2 回答 2

1

您可以使用Provisioned Concurrency防止冷启动,这将使许多 lambda 实例始终保持温暖。

要在 CDK 中执行此操作,您需要为您的函数创建别名:

const lambdaCode = lambda.Code.fromCfnParameters();
const func = new lambda.Function(this, 'Lambda', {
  code: lambdaCode,
  handler: 'index.handler',
  runtime: lambda.Runtime.NODEJS_12_X,
});
const version = func.addVersion('NewVersion');
const alias = new lambda.Alias(this, 'LambdaAlias', {
  aliasName: 'Prod',
  version,
  // Keeps one instance warm all the time
  provisionedConcurrentExecutions: 1
});

上面的示例是Alias 文档中稍作修改的示例。

于 2021-11-29T09:27:52.000 回答
-3

冷启动总是发生,这是 Lambda 真正强大的东西的缺点。没有什么黑魔法可以防止冷启动。无需处理冷启动的一种方法是将工作负载容器化(例如迁移到 Fargate)。

您只是面临 TS 或 Lambda 预置执行环境的初始编译周期。

如果您想坚持使用 Lambda,您可以考虑使用 Lambda 层来存储并让 Lambda 以预编译的 TS 为目标。另一种方法是定期调用您的 Lambda 函数。

在我看来,所有这些保持 Lambda 的“温暖”的方式都是反模式,如果你不能在你的流程中考虑冷启动,那么首先转移到没有冷启动的东西。

于 2021-11-28T17:10:36.263 回答