从AWS Lambda获取URL时出现了静默错误。

4

我正在尝试从AWS Lambda获取一个网页的内容,但它默默地失败了,CloudWatch日志只包含以下几行(timeout被设置为10秒,这就是为什么持续时间是10000毫秒):

开始请求编号:f101849f-1219-411b-8875-8944a76de937 版本:$LATEST
结束请求编号:f101849f-1219-411b-8875-8944a76de937 报告请求编号:f101849f-1219-411b-8875-8944a76de937 持续时间:10008.39毫秒

我运行的代码只需要输入URL并读取内容。在本地环境下,它可以正常工作,但在AWS Lambda上测试时就出现问题了。

public class TestHandler implements RequestHandler<Object, String>{

    @Override
    public String handleRequest(Object o, Context context) {
        try {
            Connection con = HttpConnection.connect(new URL("https://www.google.com"));
            con.timeout(40000);
            return con.get().getAllElements().toString();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

在处理请求时,有没有我不知道的任何AWS限制?


2
你的Lambda是否在VPC中?你尝试过增加Lambda的超时时间吗? - Suraj Bhatia
1
你的lambda函数是同步还是异步运行的?它是否会将Promise返回给调用者或运行时? - Jorge Garcia
2个回答

0

Java容器需要时间来初始化。在您的情况下,您也正在访问Lambda,并且您可能已经知道如果没有请求,Lambda将保持冷状态。只有在请求到来时它才会被唤醒。此外,您的Lambda配置中的超时设置为10秒。请从Lambda UI屏幕中增加它。作为一名Java开发人员,我建议您删除不必要的jar或maven依赖项,如果可以找到的话。请先增加时间,然后再尝试。


在这种情况下,瓶颈来自于内存限制。 - rubenafo

0
问题出在内存限制不足,因为默认设置为128MB。 当我将其增加到256MB时,连接按预期工作并检索了页面内容。 所以结果是AWS在达到最大内存限制时会杀死lambda,而CloudWatch中没有任何消息(如果超时被杀死,则会收到消息)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接