Lambda冷启动-从S3复制文件

时间:2019-03-24 01:03:18

标签: aws-lambda

我有一个Java lambda,当前正在将文件从S3复制到/ tmp。根据Lambda实例的大小,这需要6到10秒。该文件可在使用同一Lambda实例的新调用上重新使用。但是,流量非常刺耳,我可以看到同时出现50多个请求,并且S3的冷启动副本是不可接受的...

是否有比从S3复制更好的方法将数据“预加载”到Lambda实例中?如何通过HTTP请求从Cloudfront中获取缓存的副本。在有初始启动数据要求时,是否还有其他“技巧”可以加快冷启动速度?

答案:是请参见下文

1 个答案:

答案 0 :(得分:0)

答案:是

从CloudFront前面的S3托管存储桶中提取并使用GZip更快。在1.5MB的文件上,我看到性能从12秒提高到只有4秒。这是我为此编写的代码:

void getFile(String remoteUrl) throws Exception {

    URL url = new URL(remoteUrl); 
    HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

    con.setRequestProperty("Accept-Encoding", "gzip");

    BufferedInputStream bis;
    if ("gzip".equals(con.getContentEncoding())) {
        bis = new BufferedInputStream(new GZIPInputStream(con.getInputStream()));
    }
    else {
        bis = new BufferedInputStream(con.getInputStream());
    }

    String getPath = url.getPath();
    String fileName = "/tmp/"+getPath.substring(getPath.lastIndexOf('/') + 1);

    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
    byte[] buff = new byte[16 * 1024];
    int len;
    while ((len = bis.read(buff)) > 0)
        out.write(buff, 0, len);
    bis.close();
    out.close();
}

希望这对其他人有帮助。

悬崖