Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services lambda@edge超时与s3图像处理_Amazon Web Services_Amazon S3_Aws Lambda_Aws Lambda Edge - Fatal编程技术网

Amazon web services lambda@edge超时与s3图像处理

Amazon web services lambda@edge超时与s3图像处理,amazon-web-services,amazon-s3,aws-lambda,aws-lambda-edge,Amazon Web Services,Amazon S3,Aws Lambda,Aws Lambda Edge,我用lambda@edge用于动态调整图像大小的函数。这非常有效-除了同时调用此函数f.e.5x。然后在s3上查找图像需要约4秒钟。自从lambda@edge函数的最大超时时间只有5s,我只剩下1s,这对于处理图像来说太少了 所以我问自己,为什么5秒的限制这么低? 也许我可以优化s3对图像的查找,在多次调用函数时需要4s(当只调用一个图像时,它的速度非常快,为200ms) s3查找: 导出异步函数s3ObjectExists(键:string,Bucket=BucketFiles){ 试一试{

我用lambda@edge用于动态调整图像大小的函数。这非常有效-除了同时调用此函数f.e.5x。然后在s3上查找图像需要约4秒钟。自从lambda@edge函数的最大超时时间只有5s,我只剩下1s,这对于处理图像来说太少了

所以我问自己,为什么5秒的限制这么低?

也许我可以优化s3对图像的查找,在多次调用函数时需要4s(当只调用一个图像时,它的速度非常快,为200ms)

s3查找:

导出异步函数s3ObjectExists(键:string,Bucket=BucketFiles){
试一试{
等待对象(钥匙、铲斗);
}捕获(e){
如果(e&&e.code==='NotFound'){
返回false;
}
抛出新错误(e);
}
返回true;
}
整个代码lambda@edge功能(简化):

exports.handler=async(e)=>{
const{request,response}=e.Records[0].cf;
const q=getQuery(request.querystring);
const{uri}=请求;
const match=uri.match(/^\/(.+)\(png | jpg | jpeg))/i);
常量键=匹配[1];
const keyWithoutExt=匹配[2];
const keyExt=将[3]匹配为“jpg”|“png”;
const ext=q.format=='webp'?'webp':keyExt.toLowerCase();
const newKey=getKey(`${keyWithoutExt}${JSON.stringify(q)}.${keyExt}`);
如果(等待s3ObjectExists(newKey,bucketTmp)){
const file=wait s3GetObject(newKey,bucketTmp);
response.body=file.body.toString('base64');
}否则{
const file=wait s3GetObject(key,bucket);
设sharpConfig=sharp(file.Body作为缓冲区);
if(q.宽度| | q.高度){
sharpConfig=sharpConfig.resize(q.width,q.height{
未放大:真
});
}
const buffer=wait sharpConfig.toBuffer();
等待s3PutObject(bucketTmp、newKey、buffer、{
CacheControl:'最大年龄=31536000',
标记:“ImageCache=true”
});
response.body=buffer.toString('base64');
}
响应状态=200;
response.bodyEncoding='base64';
response.headers['content-type']=[
{
关键字:“内容类型”,
值:'image/'+ext=='jpg'?'jpeg':ext
}
];
返回响应;
};

好的,我刚刚发现,
原始响应可以有。所以我可以增加它。

好奇您使用@edge调整大小的是哪个库。。。你能分享吗?是的,你可以在上面的代码中看到,我使用的是
sharp
()。非常强大的lib,只适合lambda包;)请注意,根据他们的文档,如果需要,我们应该能够请求甚至超过30秒