Java AWS lambda连接到S3时间歇性超时

Java AWS lambda连接到S3时间歇性超时,java,amazon-web-services,amazon-s3,aws-lambda,aws-secrets-manager,Java,Amazon Web Services,Amazon S3,Aws Lambda,Aws Secrets Manager,我是AWS的n00b 我有一个用Java编写的Lambda,它处理来自SQS队列的S3事件。这些事件是通过在S3存储桶的指定目录中创建文件触发的 Lambda对从队列接收的单个S3事件的处理(即创建一个文件)按预期工作 如果我同时创建一批5到10个文件,则会启动Lambda的多个实例(数量通常在3到5个之间)来处理结果事件。有些可以毫无问题地工作,但其中至少有一个(有时不止一个)会失败。这种行为(有点令人沮丧)前后矛盾 在执行失败的Lambda期间,第一个错误发生在尝试连接到AWS机密管理器时:

我是AWS的n00b

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

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

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

在执行失败的Lambda期间,第一个错误发生在尝试连接到AWS机密管理器时:

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的VPC使用的一个私有子网有一个错误配置的路由表,分配给不存在的NAT网关

一旦添加了正确的NAT网关,Lambda就会按预期工作


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

Lambda功能是配置为使用VPC,还是设置为“无VPC”?如果设置为“VPC”,请查看已配置的子网。有一个子网还是多个子网?如果有多个子网,则它们可能是公共/私有子网的混合体,并且行为不一致,因为它使用不同的子网,其中一些子网工作,一些子网不工作。@JohnRotenstein感谢您的想法。Lambda使用的VPC有三个子网,所有子网都是私有的。作为一个实验,你能把它改为只使用一个子网,看看这是否能解决问题吗?@JohnRotenstein:Lambda在使用单个子网时可以完美地处理大量文件。如果向其中添加第二个子网,则会重新引入超时问题。这表明子网的配置不同。检查两个子网上的路由表以查找差异。您可以旋转子网(一次一个子网),以确定是哪一个子网导致了问题,然后深入调查原因。
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
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