首页 > 解决方案 > AWS lambda 的 AmazonS3.readObject() 非常慢

问题描述

我正在从 AWS lambda 读取位于 S3 中的 1.5 MB 文件:

public class AwsFileStorage {

    private static final AmazonS3 amazonS3;
    static {
        var builder = AmazonS3ClientBuilder.standard();
        builder.setRegion(MY_REGION);
        amazonS3 = builder.build();
    }

    public InputStream read(String filekey) {
        var initTime = Instant.now(); // Timer ON
        var s3Object = amazonS3.getObject("bucket-name", filekey);    
        var endTime = Instant.now();  // Timer OFF

        var millis = Duration.between(initTime, endTime).toMillis(); 
        System.out.println(millis);

        return s3Object.getObjectContent();
    }
}

当我直接从 AWS 控制台在 512 MB AWS lambda(在我的 S3 的同一区域)上运行此代码时,我得到:

3642 毫

但是当我运行相同的代码时,也会从 AWS S3 中获取文件:

486 毫

我不明白,AmazonS3.getObject()我的笔记本电脑的执行速度怎么可能比在 AWS 基础设施上执行的 lambda 快 10 倍,即使文件也托管在同一个 AWS 基础设施 - 同一个区域。

这种延迟有什么原因吗?有没有其他更优化的方法可以从 AWS lambda 读取托管在 S3 中的文件?

提前致谢

标签: javaamazon-web-servicesamazon-s3

解决方案


这取决于您在笔记本电脑上运行该进程时配置的内存和 CPU 分配。这可能远高于 512 mb


推荐阅读