【发布时间】:2020-12-11 05:40:45
【问题描述】:
我正在编写一个 Lambda 函数(用 Java 编写),它应该向 SQS 添加一条消息。
Lambda 有权访问任何 SQS (AmazonSQSFullAccess):
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
我的代码使用的是标准 SQS 客户端: 私有最终 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 编写的,所以这样做并不容易/很好)还是我做错了什么?
Lambda 超时现在设置为 30 秒。
谢谢, 克里斯
【问题讨论】:
-
函数是否在 VPC 中运行?
-
这听起来像是网络超时。您是否将 lambda 放入 vpc 中,如果是,它是否在具有通往外部世界的路由的子网中?我建议不要在 vpc 中运行 lambda,除非它们需要访问内部资源
标签: java amazon-web-services aws-lambda amazon-sqs