gpt4 book ai didi

java - AWS lambda 间歇性地连接到 S3 超时

转载 作者:行者123 更新时间:2023-12-01 18:23:13 25 4
gpt4 key购买 nike

我是 AWS 新手。

我有一个用 Java 编写的 Lambda,用于处理来自 SQS 队列的 S3 事件。这些事件是通过在 S3 存储桶的指定目录中创建文件来触发的。

Lambda 对从队列接收的单个 S3 事件的处理(即创建一个文件)按预期工作。

如果我同时创建一批包含 5 到 10 个文件的文件,则会启动 Lambda 的多个实例(通常数量在 3 到 5 个之间)来处理生成的事件。有些可以正常工作,但至少其中一个(有时不止一个)会失败。这种行为(有点令人沮丧)不一致。

在执行失败的 Lambda 期间,当它尝试连接到 AWS Secrets Manager 时会发生第一个错误:

com.amazonaws.http.conn.ssl.SdkTLSSocketFactory - connecting to secretsmanager.ap-southeast-2.amazonaws.com/<ip>:<port>
c.a.http.conn.ClientConnectionManagerFactory - java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... stack trace...
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to secretsmanager.ap-southeast-2.amazonaws.com:<port> [secretsmanager.ap-southeast-2.amazonaws.com/<ip>, secretsmanager.ap-southeast-2.amazonaws.com/<ip>, secretsmanager.ap-southeast-2.amazonaws.com/<ip>] failed: connect timed out
... stack trace...
Caused by: java.net.SocketTimeoutException: connect timed out

Lambda 又重试连接几次,但始终失败。 Lambda 代码捕获异常并尝试进行一些清理,但也无法连接到 S3 存储桶:

com.amazonaws.http.conn.ssl.SdkTLSSocketFactory - Connecting socket to <s3 bucket>.s3.ap-southeast-2.amazonaws.com/<ip>:<port> with timeout 10000
c.a.http.conn.ClientConnectionManagerFactory - java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... stack trace...
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to <s3 bucket>.s3.ap-southeast-2.amazonaws.com:<port> [<s3 bucket>.s3.ap-southeast-2.amazonaws.com/<ip>] failed: connect timed out
... stack trace...
Caused by: java.net.SocketTimeoutException: connect timed out

由于这种行为不一致,我不确定是否有方法可以确定问题所在 - 我无法弄清楚为什么 Lambda 的某些实例会完全失败,而同时运行的其他实例却没有任何问题。

我在我的 Java 项目中使用 com.amazonaws 中的以下库:

aws-lambda-java-core: 1.2.0
aws-java-sdk-s3: 1.11.714
aws-java-sdk-events: 1.11.714
aws-java-sdk-secretsmanager: 1.11.718
aws-java-sdk-sqs: 1.11.719

预先感谢您的帮助。

最佳答案

问题是网络问题 - Lambda 的 VPC 使用的私有(private)子网之一的路由表配置错误,该路由表被分配给不存在的 NAT 网关。

添加正确的 NAT 网关后,Lambda 就会按预期工作。

非常感谢 John Rotenstein 帮助诊断此问题。

关于java - AWS lambda 间歇性地连接到 S3 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60270627/

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