gpt4 book ai didi

java - 从AWS Lambda访问AWS S3陷入超时(无VPC)

转载 作者:行者123 更新时间:2023-12-02 01:16:23 35 4
gpt4 key购买 nike

我目前正在开发一个使用 AWS lambda 和 AWS S3 的项目。我想创建一个将写入 S3 存储桶的 Lambda。这是我用 Java 编写的 lambda :

public class WriteIntoBucketHandler implements RequestHandler<SNSEvent, PutObjectResult> {

@Override
public PutObjectResult handleRequest(SNSEvent snsEvent, Context context) {
System.out.println("Connect to S3...");
AmazonS3 client = AmazonS3ClientBuilder.defaultClient();
System.out.println("Connected to S3 !");
System.out.println("Send data to S3...");
PutObjectResult result = client.putObject(
"my-bucket",
"tata",
snsEvent.getRecords().get(0).getSNS().getMessage()
);
System.out.println("Data sent to S3 !");
return result;
}
}

此 lambda 正确记录 Connect to S3... 但在此之后立即超时,因此不会显示 Connected to S3 !(超时设置为 10 秒) )

我将 lamda 配置为具有 AmazonS3FullAccess无 VPC

我已经阅读了很多关于互联网和堆栈溢出的文章。我发现没有什么可以解决它。有人有想法吗?

编辑:

我将超时设置为一分钟,并且在达到超时之前我收到了此日志:

START RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb Version: $LATEST
Connect to S3...
Metaspace: java.lang.OutOfMemoryError java.lang.OutOfMemoryError: Metaspace at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at ja
Exception in thread "main" java.lang.Error: java.lang.OutOfMemoryError: Metaspace
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:66)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:114)
Caused by: java.lang.OutOfMemoryError: Metaspace
END RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb
REPORT RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb Duration: 13202.94 ms Billed Duration: 13300 ms Memory Size: 128 MB Max Memory Used: 103 MB
Metaspace java.lang.OutOfMemoryError

最佳答案

我找到了解决方案。我将 lambda 设置为 1 分钟后超时。之后我得到了一个新的异常:

START RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb Version: $LATEST
Connect to S3...
Metaspace: java.lang.OutOfMemoryError java.lang.OutOfMemoryError: Metaspace at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at ja
Exception in thread "main" java.lang.Error: java.lang.OutOfMemoryError: Metaspace
at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:66)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:114)
Caused by: java.lang.OutOfMemoryError: Metaspace
END RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb
REPORT RequestId: c300eec4-42bb-4985-9360-7e1e0d9fbdfb Duration: 13202.94 ms Billed Duration: 13300 ms Memory Size: 128 MB Max Memory Used: 103 MB
Metaspace java.lang.OutOfMemoryError

正如在此异常中所说,128MB 不足以实例化 S3 客户端。 S3 客户端至少需要 192MB,因此我必须增加 lambda 大小的内存。

重要说明:只有第一个实例的执行时间超过 10 秒。此后所有 lambda 执行都会快得多。然而,1 小时后,lambda 将需要再次进行身份验证,并且需要超过 10 秒的时间。

关于java - 从AWS Lambda访问AWS S3陷入超时(无VPC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657940/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com