簡體   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