简短版本:
如果我在lambda容器中缓存值,如何清除此缓存?我想我可以重新部署lambda,这将强制所有新请求启动新的冷启动,但这似乎不是一个很好的解决方案。
长版:
我正在为AWS API Gateway(使用Python)编写自定义授权者,该授权者可以完成两件事:
在遵循了一些代码(this code)之后,我了解到我可以“全局”缓存可以在lambda的调用之间重复使用的值,太好了!但是,如果我在查询api密钥时高速缓存说dynamodb响应,如果我不得不在某个时候撤消/发出新的api密钥怎么办? 我希望能够确保以某种方式擦除我的lambda缓存。
答案 0 :(得分:1)
简短的答案:您可以在退出同一功能的执行之前,通过调用UpdateFunctionCode
或UpdateFunctionConfiguration
来强制每次调用使用新的容器。您可以在返回响应之前保持更改函数超时的状态,下一次调用将以冷启动代价启动新的执行环境(容器/沙盒)。
正确的方法:如果要缓存函数变量,则可以在处理程序中清除它们并继续执行逻辑。这样可以确保您在以后的调用中不会受到冷启动的惩罚,并且可以控制选择“正确”的值。
这在使用数据库客户端时可以得到更好的解释。您可以在处理程序外部创建客户端,但是对于每个调用,请验证客户端是否有效。如果原来无效,则在处理程序中重新创建客户端。这将为您节省一些处理时间-函数到达处理程序时为CPU is throttled。
由于您使用的是API网关,因此冷启动处罚将导致API的集成超时(身份验证和后端合计为29秒的硬性限制);并且我将尽量避免强迫冷启动。