Ken*_*ell 5 amazon-sqs amazon-web-services node.js amazon-vpc aws-lambda
我有一个 Lambda,需要位于 VPC 上才能与 RDS 和 AWSDocumentDB 等受保护资源进行通信。它还需要能够看到外部世界以进行某些对 3rd 方 API 的调用。为此,我使用 VPC 向导创建一个同时具有公有子网和私有子网的 VPC。该向导还创建并附加了一个 Internet 网关。
之后,我将 Lambda、RDS 实例和 DocumentDb 集群附加到 VPC。然而从那时起,我就无法使用 NodeJS aws-sdk 从 lambda 中与我的 SQS 队列进行对话。
我想补充一点,我已阅读并实施了以下内容中的一些要点:AWS Lambda:无法通过具有 VPC 访问权限的 Lambda 函数访问 SQS 队列,但我仍然无法连接。
这是我所拥有的:
专有网络:
服务端点:
拉姆达:
代码
以下是我的代码中 SQS 调用的样子:
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();
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助,请让我知道我可以提供哪些其他信息。
谢谢!
** 编辑 **
我还应该提到,为了规避整个问题,我开始走上使用 SQS 作为 Lambda 目标的道路。虽然这确实将消息注入目标队列,但它可能无法根据我的用例进行扩展。如果需要,我可以进一步详细说明,因为它与实际问题并不完全相关。
** 编辑 2020 年 8 月 31 日 **
感谢所有的回复,这给了我很大的帮助,让我找到了解决办法。我想说的是,对于其他发现这篇文章的人来说,首先要观看的是:
https://www.youtube.com/watch?v=JcRKdEP94jM
这是我希望在开始这一切之前发现的东西,因为虽然它专门针对为 lambdas 提供互联网访问权限,但它经历了将 IG 和 Nats 映射到子网的过程,这实际上是我错误配置我的 vpc 的地方。通过这个视频,我重新创建了我的整个 VPC,它更加清晰、更容易将各个点连接起来。10/10 推荐。
再次感谢!
我对此的预感是,您的网络配置中某处缺少一条规则 - 数据包要么被丢弃到您的 SQS,要么在返回的途中(两者都需要逐跳考虑)。
我想到的三件事:
祝你好运!
归档时间: |
|
查看次数: |
2455 次 |
最近记录: |