AWS 拉姆达:org.apache.http.conn.ConnectTimeoutException

AWS Lambda: org.apache.http.conn.ConnectTimeoutException

我的 Lambda 函数无法从 Lambda 中下载对象,出现以下异常。

我的桶名和键名都是正确的。我通过 运行 我本地机器上的 Lambda 函数测试了它们,其中有一个虚拟的 main 和 bucket/key 它正在尝试下载并且它下载了对象就好了。

执行 Lambda 函数的角色具有 S3 只读权限。

我试过将套接字超时增加到 25 秒,将最大连接数增加到 10,但仍然没有成功。

下面是堆栈跟踪的顶部部分(似乎无法 copy/paste 以来自 AWS Cloudwatch 的漂亮格式)。我的代码中唯一的引用停在

s3Client.getObject(bucket, key);

我的 s3Client 对象创建如下:

private final AmazonS3Client s3Client = new AmazonS3Client();

搜索了几年前的类似问题,这似乎与特定问题或不正确的身份验证有关。

有什么想法吗?

下面是堆栈跟踪:

com.amazonaws.http.AmazonHttpClient executeHelper INFO: Unable to execute HTTP request: Connect to <>:443 http://<>/54.231.112.64 failed: connect timed out

org.apache.http.conn.ConnectTimeoutException: Connect to <>:443 http://<>/54.231.112.64 failed: connect timed out at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:150) at

54.231.112.64 是一个 public ip 地址,您是否在 VPC 中创建了 lambda 函数?如果是 - 确保其位于通过 NAT 访问互联网的子网中。阅读更多 here

连接到 S3 需要网关或 NAT 实例。如果您需要内部访问,您可以尝试设置 VPC endpoints.