跨账户触发 AWS Lambda 函数的 Amazon Managed Streaming for
  • 11

从跨账户 Amazon 托管的 Apache Kafka 流触发 AWS Lambda 函数

由 Marcia Villalba 发表于 2023年11月16日,内容属于 Amazon Managed Streaming for Apache Kafka (Amazon MSK), AWS Lambda 和 Serverless。

永久链接

重点概述

在此篇博文中,我们将探讨如何通过跨账户 Amazon 的托管 Apache Kafka(cluster) 来触发 AWS Lambda 函数。借助于这种架构,您能够建立去中心化的应用程序,跨多个 AWS 账户进行流处理。本文会详细介绍触发 Lambda 函数所需的配置以及在生产者和消费者账户中进行的配置步骤。

许多组织采用多账户策略来处理流式数据应用。这种策略将整体架构分解为一个生产者账户和多个消费者账户。在 AWS 中,生产者账户可以使用 Amazon 托管的 Apache Kafka (Amazon MSK) 而在消费者账户中可以使用 AWS Lambda 函数来处理事件。本文将解释怎样从跨账户的 Amazon MSK 集群中触发 Lambda 函数。

跨账户触发 AWS Lambda 函数的 Amazon Managed Streaming for

Lambda 事件源映射 (ESM) 对于 Amazon MSK 会持续从 Amazon MSK 集群中拉取新事件,将它们聚合成批次,然后触发目标的 Lambda 函数。Amazon MSK 的 ESM 充当一个无服务器的 Kafka 消费者集合,确保每个事件至少被处理一次。此外,事件在每个 Kafka 分区中按照接收的顺序进行处理。ESM 还会批量处理数据流,并根据配置的逻辑过滤事件。

概述

Amazon MSK 支持两种不同的部署类型:供应的和无服务器的。仅在同一区域内部的供应集群中支持从跨账户的 Amazon MSK 集群触发 Lambda 函数。为了实现这个功能,Amazon MSK 利用 多 VPC 私有连接,借助于 AWS PrivateLink,简化了在不同 AWS 账户中运行的 Kafka 消费者与 Amazon MSK 集群的连接。

下图展示了本示例的架构:

该架构主要分为两个部分:生产者和消费者。

在生产者账户中,您将拥有启用多 VPC 连接的 Amazon MSK 集群。多 VPC 连接仅对经过身份验证的 Amazon MSK 集群可用。集群策略是必需的,以授予其他 AWS 账户的权限,允许他们与 Amazon MSK 集群建立私有连接。您可以将权限委托给相关角色或用户。在与 AWS 身份和访问管理 (IAM) 客户端身份验证相结合时,集群策略提供了对连接应用程序的 Kafka 数据平面权限的细粒度控制。

在消费者账户中,您将有用于 Amazon MSK 的 Lambda ESM 以及在同一 VPC 中部署的 托管 VPC 连接。托管 VPC 连接允许消费者应用程序 VPC 与 Amazon MSK 集群进行私有连接。Amazon MSK 的 Lambda ESM 通过 IAM 身份验证连接到跨账户的 Amazon MSK 集群。同时,它还支持 SASL/SCRAM 和互信 TLS (mTLS) 身份验证集群。ESM 从 Kafka 主题接收事件,并调用 Lambda 函数进行处理。

部署示例应用程序

要设置跨账户 Amazon MSK 集群作为事件源的 Lambda 函数触发器,请按照以下步骤进行操作。用于部署示例的 AWS CloudFormation 模板可以在 GitHub 仓库中找到。

作为示例的一部分,一些示例数据是通过 Kafka 控制台生产者发布的,而 Lambda 会处理这些事件并写入 Amazon S3。

风驰加速器下载

先决条件

在此示例中,您需要两个 AWS 账户。本文使用以下命名约定:

生产者例如,账户编号:1111 1111 1111:托管 Amazon MSK 集群和 Kafka 客户端实例的账户。消费者例如,账户编号:2222 2222 2222:托管 Lambda 函数并从 Amazon MSK 消费事件的账户。

要开始执行,请:

本地克隆仓库:git clone https//githubcom/awssamples/lambdacrossaccountmskgit

设置生产者账户:您必须配置 VPC 网络,部署 Amazon MSK 集群和一个 Kafka 客户端实例以发布数据。为此,请从 AWS 控制台部署 CloudFormation 模板 produceraccountyaml,并从 CloudFormation 输出选项卡中记下 MSKClusterARN。

设置消费者账户:要设置消费者账户,您需要 Lambda 函数、用作 Lambda 函数的 IAM 角色以及接收数据的 S3 存储桶。为此,请从 AWS 控制台部署 CloudFormation 模板 consumeraccountyaml,并输入参数 MSKAccountId,即生产者 AWS 账户 ID例如,账户 ID:1111 1111 1111。记录 CloudFormation 输出选项卡中的 LambdaRoleArn。

在 Amazon MSK 集群中设置多 VPC 连接

一旦创建账户,您必须启用它们之间的连通性。通过在 Amazon MSK 集群中启用 多 VPC 私有连接,您可以设置网络连接,以允许跨账户消费者连接到集群。

在生产者账户中,导航到 Amazon MSK 控制台。选择 producercluster,然后转到 Properties 选项卡。滚动到 Networking settings,选择 Edit,并选中 Turn on multiVPC connectivity。此操作需要一些时间,完成后将显示如下。

添加必要的集群策略,以允许跨账户消费者连接 Amazon MSK。在生产者账户中,从 AWS 控制台部署 CloudFormation 模板 producermskclusterpolicyyaml,并输入以下参数:

MSKClusterArn 生产者账户中 Amazon MSK 集群的 Amazon 资源名称 (ARN)。在 produceraccountyaml 的 CloudFormation 输出中查看此信息。

LambdaRoleArn 附加到消费者账户中 Lambda 函数的 IAM 角色的 ARN。可以在 consumeraccountyaml 的 CloudFormation 输出中找到此信息。LambdaAccountId 消费者 AWS 账户 ID例如,账户 ID:2222 2222 2222。

在 Amazon MSK 中创建 Kafka 主题并发布事件

在生产者账户中,导航到 Amazon MSK 控制台,选择名为 producercluster 的 Amazon MSK 集群。选择 View client information 以获取启动服务器信息。

CloudFormation 模板还会部署一个 Kafka 客户端实例,以创建主题和发布事件。

要访问客户端,请转到 Amazon EC2 控制台,选择实例 producerKafkaClientInstance1。使用 Session Manager 连接到 EC2 实例:

bashsudo su ec2user

设置 MSK Broker IAM 端点

export BS=ltlt此处提供 IAM 启动地址gtgt

您必须使用 Amazon MSK 集群的单个 VPC 私有端点,而不是多 VPC 私有端点,因为您将要从生产者账户的 Kafka 控制台生产者发布事件。

运行以下脚本以创建客户主题并发布示例事件:

bash/kafkacreatetopicsh/kafkaproduceeventssh

在消费者账户中创建托管 VPC 连接

要建立与生产者账户中的 Amazon MSK 集群的连接,您必须在消费者账户中创建托管 VPC 连接。Lambda 通过此托管 VPC 连接与跨账户 Amazon MSK 通信。

有关详细设置步骤,请阅读 Amazon MSK 管理的 VPC 连接 文档。

配置 Amazon MSK 的 Lambda ESM

最后一步是设置用于 Amazon MSK 的 Lambda ESM。设置 ESM 使您能够通过托管 VPC 终端连接到生产者账户中的 Amazon MSK 集群。这使您能够触发 Lambda 函数来处理 Kafka 主题中生成的数据。

在消费者账户中,转到 Lambda 控制台。打开 Lambda 函数 msklambdacrossaccountiam。进入 Configuration 选项卡,选择 Triggers,然后选择 Add Trigger。在 Trigger configuration 中选择 Amazon MSK。

配置此触发器时:

选择共享的 Amazon MSK 集群。这会自动默认使用连接到集群所需的 IAM 身份验证。

默认情况下,Active trigger 复选框已启用。这确保在创建后触发器处于活动状态。对于其他值:将 Batch size 保持为 100。将 Starting Position 更改为 Trim horizon。设置 Topic name 为 customer。设置 Consumer Group ID 为 msklambdaiam。

向下滚动并选择 Add。这将开始创建 Amazon MSK 触发器,这需要数分钟。创建完成后,触发器的状态显示为启用。

验证消费者端的输出

Lambda 函数会接收事件并将它们写入 S3 存储桶。

要验证函数是否正常工作,请转到消费者账户并导航到 S3 控制台。搜索名为 crossaccountlambdaconsumerdataltltREGIONgtgtltltAWS Account Idgtgt 的存储桶。在存储桶中,您可以查看到 customerdataltltdatetimegtgtcsv 文件。

清理工作

您必须手动清空并删除 S3 存储桶、托管 VPC 连接以及消费者账户中的 Amazon MSK 的 Lambda ESM。接下来,从 AWS 控制台中删除生产者和消费者账户中的 CloudFormation 堆栈,以移除作为示例创建的所有其他资源。

结论

通过 Lambda 和 Amazon MSK,您现在可以构建分散式应用程序,跨多个 AWS 账户进行部署。本文演示了如何将 Amazon MSK 设置为跨账户 Lambda 函数的事件源,并详细介绍了生产者和消费者账户中所需的配置过程。

有关 AWS Lambda 与 Amazon MSK 作为事件源的进一步阅读,请访问 文档。

更多无服务器学习资源,请访问 Serverless Land。

标签: 贡献、无服务器