0

我的最终目标是让 AWS Lambda 从 Kafka 主题触发,其中 Kafka 是在另一个 AWS 账户上运行的 MSK 集群。

设置。 Lambda 和 MSK 集群位于不同的 AWS 账户上。每个都连接到自己的 VPC,即子网(通过 NAT GW 私有),并由安全组设置防火墙(为了实验,我将它们全部设置为允许)

直接的问题。 我不能对 lambda 使用“MSK 触发器”,因为它需要为 MSK 集群指定 ARN,但这是不可能的,因为该 MSK 集群位于另一个帐户上,并且无法在 lambda 触发器的上下文中引用。

我试图解决的问题。 我正在尝试使用“Kafka 触发器”,它需要指定引导服务器(我有)、主题名称(我有)、批量大小和起始位置(不是问题)。问题在于第二组选项允许在 MSK 集群前对 lambda 触发器进行身份验证。它可以是 1) 基于网络的设置,以 MSK 集群的 VPC/子网/SecurityGroup 的组合形式,2) 基于机密的设置,以 SASL/xxx 配置的形式。

前一个选项,即基于网络的设置,不能使用,因为它需要来自 Kafka 集群的 VPC 和其他参数,即子网和安全组,这些参数在配置 Lambda 的账户上不可用。

后者需要指定其中一种 SASL 方法,即 PLAIN、SCRAM512 和 SCRAM256,并与存储用户名/密码组合的 SecretManager 记录的引用配对。我选择这种方法作为(在我看来)理论上可行的跨账户通信的唯一方法。

我做了什么:

  1. 在 Lambda 帐户上,我在 SecretManager 中使用 2 个键创建了一条记录:usernamepassword一些特定的值
  2. 在 Kafka 帐户上,我为 MSK 集群启用了 SASL/SCRAM 身份验证。它需要在 SecretManager 中设置一个记录,我做到了。我在 Lambda 账户上使用了与密钥相同的凭据。之后,我可以看到引导服务器的 3 个选项:(<hostname>:9092明文)、<hostname>:9094(TLS)和<hostname>:9096(SASL/SCRAM)。
  3. 我在我的 lambda 函数的 kafka 触发器设置中使用了引导服务器规范(具有 9096 端口的那个)。
  4. 为了在 Lambda 和 Kafka 的子网之间授予跨账户连接,我在路由表中设置了具有相应规则的 VPC 对等连接器。
  5. 我通过在 Lambda 的子网上旋转 EC2 测试了这些子网之间的连接性,并试图nmap -Pn -p 9092,9094,9096 <bootstrap server hostname>获得以下响应:
PORT     STATE SERVICE
9092/tcp open  unknown
9094/tcp open  unknown
9096/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

结果。 无论我在引导服务器/端口和 SASL 方法的不同组合方面尝试什么,我都会在 Lambda 触发器端收到此错误:问题:连接错误。请检查您的事件源连接配置

由于未提供其他详细信息,因此我找不到任何调试此错误情况的方法。在 MSK 集群上启用 CloudWatch 并没有帮助,因为它没有收集任何有用的信息。

4

0 回答 0