AWS Lambda是否缓存API响应?

时间:2017-12-12 08:37:54

标签: amazon-web-services caching aws-lambda

我的Lambda函数调用CloudWatch describe-alarms API。 然后删除那些警报。 我使用CloudWatch Cron Event作为触发器。

我的印象就是缓存了带有警报的响应,即使它们被删除仍然会出现。

AWS Lambda中是否有任何缓存系统?

3 个答案:

答案 0 :(得分:10)

这是你的代码缓存响应。不是Lambda。

要修复它,您必须通过确保调用处理程序中 的API并修复代码来修复代码,而不将其存储在处理函数范围之外。

出于说明目的,

<强>不

const response = callAnApi()

async function handler(event, context, callback) {
  // No matter how many times you call the handler,
  // response will be the same
  return callback(null, response)
}

<强>不要

async function handler(event, context, callback) {
  // API is called each time you call the handler.
  const response = await callAnApi()

  return callback(null, response)
}

参考:AWS Lambda Execution Model

  

Lambda函数代码中的任何声明(在处理程序代码之外,请参阅编程模型)仍然初始化,在再次调用函数时提供额外的优化。例如,如果Lambda函数建立数据库连接,而不是重新建立连接,则在后续调用中使用原始连接。我们建议在代码中添加逻辑,以便在创建连接之前检查连接是否存在。

答案 1 :(得分:2)

据我所知,AWS Lambda中没有缓存机制,

也就是说,在(成功的)请求之后,Lambda创建的容器被冻结了#34;阻止它做&#34; async&#34;或&#34;背景&#34;工作。后续请求将重用容器并将新事件传递给函数处理程序。这个容器将保留在集群中,随时可以重用并提供请求,使其长时间不闲置,之后可以完全丢弃。 AWS未指定这些详细信息。

因为容器坐在那里等待后续请求,并且分配给它的内存每次都不会神奇地消失,我们可以存储数据以备将来的请求。 (但不推荐它)

答案 2 :(得分:0)

补充:如果要通过API网关访问AWS Lambda,则可以在API网关级别激活缓存,这对于Lambda可以提高速度并降低成本。该缓存系统使您可以将参数,请求标头等用作调用的键,从而使其变得简单高效。