lambda@edge 中的速度修复或替代方案

Speed fix or alternatives in lambda@edge

我有一个 lambda@edge 运行ning 应客户请求。我将消息放入 SQS 以供另一个 lambda 处理。

我的脚本在更新后的第一个 运行 非常长 - 经常会经历五秒的硬超时,这不是一个好的用户体验。

其中大部分是加载 AWS SDK,始终超过 2.5 秒

var timerstart = new Date();
var timercheck = new Date();
console.log("Time check: 0");

const AWS = require('aws-sdk');

timercheck = new Date();
console.log("Time check - AWS sdk loaded: ", timercheck - timerstart);

我也在加载 https

const https = require('https');

第一个 运行 大约需要 120 毫秒。

许多后续的 运行 完全在亚毫秒内完成,很少超过 5 毫秒。

有没有其他人遇到过这个问题 - 希望找到克服它的方法?我没有通过 googlefu 找到任何东西。了解第一个 运行 和随后的 运行 之间的差异会有所帮助。

疯狂的想法

@jogold 带来了一些有趣的阅读。

出于某种原因,我认为将 require 放在导出之外会很有趣。

发件人:

'use strict';
exports.handler = async (event, context, callback) => {
    const AWS = require('aws-sdk');
    //... stuff

收件人:

'use strict';
const AWS = require('aws-sdk');
exports.handler = async (event, context, callback) => {
    //... stuff

在几次(相当确定的)冷启动后,第一次检查现在减少到大约 300 毫秒。也许这只是其他人都知道的事情,也是我对 NodeJS 知识的空白,但如果其他人来寻找 Lambda@Edge 执行时间的问题,请看这里。

这称为冷启动

看看Everything you need to know about cold starts in AWS Lambda

如果这很重要,您应该考虑预热您的函数。