AWS lambda 间歇性超时连接到 S3
AWS lambda intermittently times out connecting to S3
我是 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 使用的私有子网之一有一个配置错误的路由 table,该路由被分配给了一个不存在的 NAT 网关。
添加正确的 NAT 网关后,Lambda 将按预期运行。
非常感谢 John Rotenstein 帮助诊断此问题。
我是 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 使用的私有子网之一有一个配置错误的路由 table,该路由被分配给了一个不存在的 NAT 网关。
添加正确的 NAT 网关后,Lambda 将按预期运行。
非常感谢 John Rotenstein 帮助诊断此问题。