如何清除AWS Lambda缓存(或强制冷启动)

时间:2020-05-16 11:47:52

标签: amazon-web-services aws-lambda amazon-api-gateway

简短版本:

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

长版:

我正在为AWS API Gateway(使用Python)编写自定义授权者,该授权者可以完成两件事:

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

在遵循了一些代码(this code)之后,我了解到我可以“全局”缓存可以在lambda的调用之间重复使用的值,太好了!但是,如果我在查询api密钥时高速缓存说dynamodb响应,如果我不得不在某个时候撤消/发出新的api密钥怎么办? 我希望能够确保以某种方式擦除我的lambda缓存。

1 个答案:

答案 0 :(得分:1)

简短的答案:您可以在退出同一功能的执行之前,通过调用UpdateFunctionCodeUpdateFunctionConfiguration来强制每次调用使用新的容器。您可以在返回响应之前保持更改函数超时的状态,下一次调用将以冷启动代价启动新的执行环境(容器/沙盒)。

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

这在使用数据库客户端时可以得到更好的解释。您可以在处理程序外部创建客户端,但是对于每个调用,请验证客户端是否有效。如果原来无效,则在处理程序中重新创建客户端。这将为您节省一些处理时间-函数到达处理程序时为CPU is throttled

由于您使用的是API网关,因此冷启动处罚将导致API的集成超时(身份验证和后端合计为29秒的硬性限制);并且我将尽量避免强迫冷启动。