使用 Java 从 AWS Lambda 访问 SQS 时超时
Timeout when accessing SQS from AWS Lambda using Java
我正在编写一个 Lambda 函数(在 Java 中),它应该向 SQS 添加一条消息。
Lambda 有权访问任何 SQS (AmazonSQSFullAccess):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
我的代码使用的是标准 SQS 客户端:
private final AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(Regions.EU_NORTH_1).build();
问题是在尝试获取队列列表或发送消息时 lambda 永远不会结束(超时):
ListQueuesResult 结果 = sqs.listQueues();
SendMessageRequest sendMsgRequest = new SendMessageRequest()
.withQueueUrl(queueUrl)
.withMessageBody(assetBody)
.withDelaySeconds(0);
sqs.sendMessage(sendMsgRequest);
我的问题是我是否应该在实例化 sqs 客户端时提供凭据(lambda 是用 terraform 编写的脚本,所以 easy/nice 不应该这样做)还是我做错了什么?
Lambda 超时现在设置为 30 秒。
谢谢,
克里斯
如果存在权限问题,您可能会收到诸如访问被拒绝或未经授权之类的错误。这看起来函数根本无法与 sqs 通信(网络超时)。
vpc 之外的所有 lambda 函数应该能够访问互联网上的任何资源。话虽如此,这里的 lambda 函数似乎在 VPC 中。
当 lambda 函数位于 VPC 内并且它想要访问互联网(在本例中为 sqs)时,lambda 函数应位于 VPC 的私有子网中。该子网的默认路由指向该 VPC 的 public 子网中的 NAT 网关。
https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/
除了检查与 lambda 函数链接的安全组之外,它应该有一个出站规则以允许来自所有端口的所有流量。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule
我正在编写一个 Lambda 函数(在 Java 中),它应该向 SQS 添加一条消息。
Lambda 有权访问任何 SQS (AmazonSQSFullAccess):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
我的代码使用的是标准 SQS 客户端: private final AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(Regions.EU_NORTH_1).build();
问题是在尝试获取队列列表或发送消息时 lambda 永远不会结束(超时):
ListQueuesResult 结果 = sqs.listQueues();
SendMessageRequest sendMsgRequest = new SendMessageRequest()
.withQueueUrl(queueUrl)
.withMessageBody(assetBody)
.withDelaySeconds(0);
sqs.sendMessage(sendMsgRequest);
我的问题是我是否应该在实例化 sqs 客户端时提供凭据(lambda 是用 terraform 编写的脚本,所以 easy/nice 不应该这样做)还是我做错了什么?
Lambda 超时现在设置为 30 秒。
谢谢, 克里斯
如果存在权限问题,您可能会收到诸如访问被拒绝或未经授权之类的错误。这看起来函数根本无法与 sqs 通信(网络超时)。
vpc 之外的所有 lambda 函数应该能够访问互联网上的任何资源。话虽如此,这里的 lambda 函数似乎在 VPC 中。
当 lambda 函数位于 VPC 内并且它想要访问互联网(在本例中为 sqs)时,lambda 函数应位于 VPC 的私有子网中。该子网的默认路由指向该 VPC 的 public 子网中的 NAT 网关。
https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/
除了检查与 lambda 函数链接的安全组之外,它应该有一个出站规则以允许来自所有端口的所有流量。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule