繁体   English   中英

从AWS Lambda访问AWS S3会超时(无VPC)

[英]Access to AWS S3 from AWS Lambda fall into timeout (No VPC)

我目前正在研究一个使用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配置为具有AmazonS3FullAccessno 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秒钟以上的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM