Aws lambda 如何在自定义VPC中为Lambdas使用MSK触发器?

Aws lambda 如何在自定义VPC中为Lambdas使用MSK触发器?,aws-lambda,serverless-framework,aws-msk,Aws Lambda,Serverless Framework,Aws Msk,我正在尝试将MSK Lambda触发器与连接到VPC的Lambda一起使用 但是,在部署Lambda时,我总是会遇到以下错误: Last processing result: PROBLEM: Connection error. Please check your event source connection configuration. 我所尝试的: lambda具有中列出的所有必需权限 lambda与MSK集群位于同一个VPC中,我甚至部署了另一个lambda,它可以在Kafka中成功

我正在尝试将MSK Lambda触发器与连接到VPC的Lambda一起使用

但是,在部署Lambda时,我总是会遇到以下错误:

Last processing result: PROBLEM: Connection error. Please check your event source connection configuration.
我所尝试的:

  • lambda具有中列出的所有必需权限
  • lambda与MSK集群位于同一个VPC中,我甚至部署了另一个lambda,它可以在Kafka中成功生成消息,具有完全相同的VPC配置
  • 子网连接了NAT网关和internet网关
  • 安全组允许所有端口中的所有传入/传出流量
我还能试什么?可能遗漏了什么?我使用的是无服务器框架

编辑:好的,问题是MSK集群的安全组

文档提到您需要此规则:

入站规则–允许指定为源的安全组的所有端口上的所有流量


但是,有没有一种方法比允许来自任何地方的流量更具限制性呢?

我发现了这一点,并希望它能有所帮助,它似乎与您试图实现的目标是一致的

新的MSK服务并不是为公众提供的 我们发现的网络和解决方法可能不适合您,但我希望 了解服务的工作原理可能会有所帮助

首先,我创建了一个超过3个可用区域的新VPC, 具有3个公用子网、3个专用子网、1个NatGw、3个 InternetGw和只允许传出流量的安全组。 在这个VPC上,我创建了一个基本的MSK集群,没有TLS认证,10GB 磁盘空间,3个节点,每个可用性区域一个,每个节点位于 公用子网,并分配给以前创建的安全组

在这一点上,15分钟后,你会发现自己与一个品牌 新建集群,如果单击“客户端详细信息”按钮,您将获得 要与消费者/生产者客户端一起使用的连接字符串 通过TLS或普通认证和动物园管理员联系卡夫卡。问题是 目前,只能从服务器内部访问该集群 专有网络

要使集群在不使用VPN的情况下可见,这就是我所要做的 已完成:–请求3个EIP–查看 群集将名称解析为专用IP地址–现在查看 EC2菜单中的网络接口部分,并与每个 其中一个群集接口具有公共IP地址(使用IP地址 我们通过上面的发现来了解哪些网络接口是其中的一部分 集群的一部分)-完成后,您将拥有一个具有3个公共 接口,但由于安全组不可用,因此如果 现在修改入站规则以接受正确端口上的连接 对于ZooKeper和Kafka.——现在尝试一下telnet来验证这一点 一切都是开放的-在这一点上,你可以尝试连接,但卡夫卡 可能会向您抛出一个错误,表示“与群集的连接已断开” 工作正常,但卡夫卡集群没有响应”。这是因为我们 没有使用专有名称调用卡夫卡节点编辑你的 宿主文件,并为Kafka群集的每个节点插入一个带有 公共IP地址和该节点的名称;保存它,关闭它, 再试一次

欢迎使用新的远程MKS群集

您可以在以下链接中找到:


您可以为端点实现API密钥,可以实现BasicAuth,还可以通过注册用户角色来使用Cognito,用户角色可用于按角色限制对端点的访问。有很多选择。取决于你想走哪条路。如果你需要帮助,我可以向你展示我使用过的一些工具。虽然它不是API端点,但它是MSK的lambda触发器。在Lambda和MSK之间设置事件源映射时,它会创建一个Kafka使用者组,但看起来它是由AWS内部管理的,而不是在同一Lambda安全组中。我想知道我是否可以在MSK安全组中创建一个入站规则,该规则只允许访问此消费者,而不是“允许访问所有端口上的所有流量”。