使用java从aws lambda访问sqs时超时

dfuffjeb  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(423)

我正在编写一个lambda函数(在java中),它应该向sqs添加一条消息。
lambda有权访问任何sq(amazonsqsfullacces):

{
    "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编写的脚本,所以这样做不容易/不好),还是我做错了其他事情?
lambda timeout现在设置为30秒。
谢谢,克里斯

olmpazwi

olmpazwi1#

如果存在权限问题,则可能会出现访问被拒绝或未经授权之类的错误。看起来函数根本无法与sqs通信(网络超时)。
专有网络之外的所有lambda功能都应该能够访问互联网上的任何资源。也就是说,这里的lambda函数似乎在专有网络中。
当lambda函数位于专有网络中并且它想要访问intenet(在本例中是sqs)时,lambda函数应该位于专有网络的私有子网中。该子网的默认路由指向该专有网络的公用子网中的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-安全组规则

相关问题