Max*_*val 14 amazon-s3 amazon-web-services aws-lambda
我有一个Lambda函数,每次执行时都需要从S3读取一个文件.
该文件非常小,大约200字节,S3桶位于美国标准区域,Lambda函数位于us-east-1区域(因此相同的区域).读取文件需要10到15秒,为什么这么慢?
谢谢.
编辑:一些代码
long start = System.nanoTime();
AmazonS3Client s3Client = new AmazonS3Client();
S3Object propertyFile = null;
try {
propertyFile = s3Client.getObject(S3_BUCKET_NAME, S3_PROPERTY_FILE);
} catch (Exception e) {...}
try (InputStream in = propertyFile.getObjectContent()) {
PROPERTIES.load(in);
} catch (Exception e) {...}
LOGGER.debug("S3 access " + (System.nanoTime() - start));
Run Code Online (Sandbox Code Playgroud)
编辑#2:布鲁克斯的建议之后我做了
AmazonS3Client s3Client = new AmazonS3Client(new InstanceProfileCredentialsProvider());
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
Unable to load credentials from Amazon EC2 metadata service
Run Code Online (Sandbox Code Playgroud)
编辑#3:
分配给Lambda函数的内存为256MB,当我分配1024MB时,需要3-4秒,这仍然太慢(从我的计算机本地测试时需要大约1-2秒).
我建议ProfileCredentialsProvider
在 Lambda 函数执行之间使用并缓存 S3 客户端实例:
public class MyLambda { // No matter you implement standard AWS SDK interfaces or not
private final AmazonS3Client s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
public String sayHello(Request request, Context context) {
S3Object s3Obj = s3Client.getObject(request.getBucket(), request.getKey());
return S3Utils.getContent(s3Object); // Some util which retrieves object content
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,设置管理连接池和其他资源的 S3 客户端需要一些时间。
归档时间: |
|
查看次数: |
2458 次 |
最近记录: |