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

Amazon web services 如何清除AWS Lambda缓存(或强制冷启动),amazon-web-services,aws-lambda,amazon-api-gateway,Amazon Web Services,Aws Lambda,Amazon Api Gateway,短版本: 如果在lambda容器中缓存值,如何清除此缓存?我想我可以重新部署lambda,这将强制所有新请求启动新的冷启动,但这似乎不是一个好的解决方案 长版本: 我正在为AWS API网关(Python)编写一个自定义授权程序,它完成两件事: 它从http头中获取api密钥,并在dynamo表中查找该密钥以验证其有效性(并获取附加到它的一些属性) 它验证JWT令牌(使用#1中的一些属性) 在完成了一些代码()之后,我了解到我可以“全局”缓存值,这些值可以在lambda调用中重复使用,太棒了!但

短版本:

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

长版本:

我正在为AWS API网关(Python)编写一个自定义授权程序,它完成两件事:

  • 它从http头中获取api密钥,并在dynamo表中查找该密钥以验证其有效性(并获取附加到它的一些属性)
  • 它验证JWT令牌(使用#1中的一些属性)
  • 在完成了一些代码()之后,我了解到我可以“全局”缓存值,这些值可以在lambda调用中重复使用,太棒了!但是如果我缓存了dynamodb在查找api键时的响应,那么如果我必须在某个时候撤销/发布一个新的api键呢?
    我希望能够确保我的lambda缓存以某种方式被擦除。

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

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

    在使用数据库客户机时可以更好地解释这一点。您可以在处理程序之外创建客户机,但对于每个调用,都要验证客户机是否有效。如果原始客户端现在无效,请在处理程序内重新创建客户端。这将为您节省一些处理时间,就像函数命中处理程序时一样


    由于您使用的是API网关,因此冷启动惩罚将导致API的集成超时(认证和后端组合的硬限制为29秒);我将尽可能避免强制冷启动。

    当您决定删除或覆盖任何全局变量时,您可以在代码中添加自己的逻辑。例如,您也可以通过CLI更新函数配置,而不是重新部署,因此很容易编写脚本()。更新一个环境变量就足够了,函数会被替换,因此在任何地方都会强制冷启动。关键是要跨lambda调用进行缓存,但如果数据发生变化,则能够以某种方式使该缓存失效。强制冷启动与根本不缓存是一样的。Lambda将冻结执行上下文,以便在容器仍然处于热状态时以及在您不同时调用函数时进行后续调用。由于每次调用都会调用处理程序,因此必须在处理程序中调用DDB才能始终获取最新记录。