我目前正在使用AWS Lambda和Serverless Framework构建Web API。
在我的lambda函数中,每个函数都连接到Redis(elasticache)和RDB(Aurora,RDS)或DynamoDB以检索数据或写入新数据。 我的所有lambda函数都在我的VPC中运行。
一切正常,除了在最后一次执行后首次执行或执行lambda函数时,执行lambda函数需要相当长的时间(1-3秒),或者有时它甚至会响应网关超时错误(大约30秒),即使我的lambda函数配置为60秒超时。
如here中所述,我假设1-3秒用于初始化新容器。但是,我想知道是否有办法减少这个时间,因为1-3秒或网关超时并不是生产使用的理想选择。
答案 0 :(得分:5)
你有两个问题:
1-3秒延迟。使用Lambda时,这是预期的,并且有详细记录。正如@Nick在评论中提到的,防止容器进入睡眠状态的唯一方法就是使用它。您可以使用Lambda Scheduled Events使用速率表达式rate(1 minute)
每分钟执行一次您的函数。如果您向函数添加一些参数以帮助您区分真实请求和其中一个ping请求,您可以立即返回ping请求,然后您就可以解决您的问题。它会花费你更多,但如果有的话,我们可能每月都会说几美分。 Lambda拥有慷慨的免费等级。
30秒延迟是不寻常的。我肯定会检查你的CloudWatch日志。如果从功能正常工作时看到日志,但是当看到30秒超时时没有记录,那么我认为问题出在API网关而不是Lambda。如果您确实看到日志,那么他们可以帮助您排除故障。另一个要检查的地方是AWS Status Page。我有时会看到Lambda功能暂停并间歇性地响应,我只是想知道亚马逊的问题是否存在并且他们正在研究它。
这里有一个blog post with additional information on Lambda Container Reuse,虽然有点旧,但仍然有一些很好的信息。