当前位置: 首页 > 知识库问答 >
问题:

VPC内来自Lambda的SQS超时

曾沛
2023-03-14

在此之后,我将Lambda、RDS实例和DocumentDb集群附加到VPC。但是,从那时起,我就无法使用NodeJS AWS-SDK从我的lambda中与我的SQS队列进行对话。

我想补充的是,我已经阅读并实现了以下几点:AWS Lambda:无法从具有VPC访问的Lambda函数访问SQS队列,但是我仍然无法连接。

以下是我所拥有的:

    null
    null

λ:

  • 我将Lambda附加到VPC,如下所示。
  • 这允许我与公共第三方API和我受保护的资源对话。我希望有一个开放的SG仍然允许我的lambda与SQS对话,但它总是超时。
  • 我不确定在我的Lambda中使用哪个url作为我的endpoint。这里的示例:https://docs.aws.amazon.com/awsSimpleQueueservice/latest/sqsdeveloperGuide/sqs-senging-messages-from-vpc.html看起来仍然使用区域endpoint。

代码

  • const {SQS} = require('aws-sdk');
    
    // Constructor Init
    const sqs = new SQS({
       apiVersion: '2012-11-05', 
       endpoint: 'https://sqs.us-west-2.amazonaws.com', // not sure if this is 'invoking' the vpc endpoint or not
       region: 'us-west-2'
    });
    
    // Send message
    await sqs.sendMessage({
       MessageBody: 'Test body',
       QueueUrl: 'https://sqs.us-west-2.amazonaws.com/<rest of URI>',
       MessageAttributes: {...someAttrs}
    }).promise();
    
    
    
    

    我还应该提到,为了避免整个问题,我开始使用SQS作为Lambda目的地。虽然这确实将消息注入到目标队列中,但它可能不会与我的用例相适应。如果需要,我可以进一步阐述这一点,因为它与实际问题并不完全相关。

    **编辑8/31/20**

    感谢所有的回复,这是一个很大的帮助,让我有了一个决心。我要对任何发现这篇文章的人说,首先要注意:

    这是我希望在开始之前就能发现的东西,因为虽然它专门针对给lambdas提供internet访问,但它经历了将IG和Nats映射到子网的过程,这正是我错误配置VPC的地方。有了这个视频,我去重新创建了我的整个VPC,它是如此干净,更容易连接点。10/10推荐。

    再次感谢!

共有1个答案

申屠宗清
2023-03-14

AWS Lambda函数应该附加到VPC中的专用子网。

Amazon SQS位于Internet上,因此Lambda函数需要一种访问SQSendpoint的方法。

Amazon SQS的VPCendpoint可以在VPC和SQSendpoint之间提供直接链接,而不需要Internet访问。一旦创建,VPC将自动跨VPCendpoint发送SQS请求。这是一个很好的,简单的选择。

 类似资料:
  • 我在VPC中使用AWS Chalice托管了一个Lambda函数,因为我希望它访问一个无服务器的Aurora DB实例。现在,我还希望这个函数将send_message()转换为SQS。

  • 早上好,你能帮我们解决下一个问题吗:我有一个API网关+Java Lambda处理程序。这个Lambda使用httpconnection获取一些Internet REST API。 当我们使用这个Lambda而不使用VPC时,它工作得很好。但当我们使用配置了internet访问的VPC时--有时Lambda会出现超时错误而失败。它在20%的请求中失败(80%的请求工作正常),下一个错误发生在日志中

  • 在过去的几个小时里,我一直在调试、配置和命名它,我似乎不明白为什么会发生这种情况。 我正在尝试调用一个 lambda 函数,该函数只是从 ec2 中检索基本信息。当我在aws控制台中测试此lambda函数时,它似乎工作正常。但是,使用以下代码在另一个lambda中调用它; 它只是超时了。没有任何反应…两个Lambda都连接到VPC和所有子网 我认为是我的新VPC导致了这个问题。我的VPC包括: 1

  • 甚至,API网关资源策略是这样写的: 和VPCendpoint策略进行完全访问。

  • 我有一个连接到lambda的队列(fifo)。我想在lambda中向标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作。 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了标准队列 SQS URL是否正确 控制台中不会显示任何错