1

简短版本:

如果我在我的 lambda 容器中缓存值,我该如何清除这个缓存?我想我可以重新部署 lambda,这将强制所有新请求启动新的冷启动,但这似乎不是一个好的解决方案。

长版:

我正在为 AWS API Gateway(在 Python 中)编写一个自定义授权器,它做两件事:

  1. 它从 http 标头获取 api-key 并在 dynamo 表中查找它以验证它是否有效(并获取一些附加到它的属性)。
  2. 它验证 JWT 令牌(使用 #1 中的一些属性)。

在遵循一些代码(这段代码)之后,我了解到我可以“全局”缓存值,这些值可以在 lambda 的调用中重复使用,太棒了!但是,如果我缓存说,查找 api 密钥时的 dynamodb 响应,如果我必须在某个时候撤销/发布新的 api 密钥怎么办?我希望能够确保我的 lambda 缓存以某种方式被擦除。

4

1 回答 1

1

简短回答:您可以通过调用UpdateFunctionCodeorUpdateFunctionConfiguration在退出相同函数的执行之前为每个调用强制一个新容器。您可以在返回响应之前不断更改函数超时,并且下一次调用将启动一个新的执行环境(容器/沙箱),并带有冷启动惩罚。

正确的方法:如果要缓存函数变量,可以在处理程序中清除它们并继续执行逻辑。这将确保您不会因后续调用而面临冷启动惩罚,并且您可以控制选择“正确”值。

这可以在使用数据库客户端时得到更好的解释。您可以在处理程序之外创建客户端,但每次调用都要验证客户端是否有效。如果原件现在无效,则在处理程序内重新创建客户端。这将为您节省一些处理时间 - 因为当函数到达处理程序时CPU 会受到限制。

由于您使用的是 API Gateway,因此冷启动惩罚将导致 API 的集成超时(身份验证和后端相结合的硬限制为 29 秒);我会尽量避免强制冷启动。

于 2020-05-16T14:40:07.767 回答