如何使用跨账户 Kinesis 流式传输调用 Lambda 函数?

上次更新日期:2021 年 12 月 16 日

我想使用另一个 AWS 账户中的 Amazon Kinesis 流式传输来调用 AWS Lambda 函数。该如何设置?

简短描述

Lambda 目前不支持来自 Kinesis 或任何基于流式传输的源的跨账户触发器。

作为一种解决方法,您可以在与 Kinesis 流式传输相同的账户(账户 1)中创建“轮询器”Lambda 函数。然后,将该函数配置为调用另一个账户(账户 2)中的第二个“处理器”Lambda 函数。

警告:此配置会消除使用 Kinesis Data Streams 的许多益处。完成此过程后,无法在分片中阻止记录或创建顺序。最佳实践是仅当您的应用程序不需要这些功能时才使用此解决方法。

解决方法

在与 Kinesis 流式传输相同的账户(账户 1)中配置“轮询器”Lambda 函数

1.    在账户 1 中创建一个包含执行角色的 Lambda 函数。

注意:您可以使用 Lambda 控制台或通过构建并上载您自己的部署程序包创建函数

2.    将 Kinesis 流式传输所需的权限添加到函数的执行角色。

3.    将 Kinesis 流式传输配置为函数的事件源

重要提示:创建事件源映射时,请确保 Lambda 函数和 Kinesis 流式传输位于同一账户中。

在第二个账户(账户 2)中配置“处理器”Lambda 函数

1.    在账户 2 中创建一个包含执行角色Lambda 函数

2.    在账户 2 中创建一个 AWS Identity and Access Management (IAM) 角色(调用角色)。

注意:此调用角色由账户 1 中的“轮询器”函数承担,以调用账户 2 中的“处理器”函数。

3.    通过以下方式修改账户 2 中调用角色的策略

  • 授予调用角色在账户 2 中调用(使用 lambda:InvokeFunction 操作)“处理器”Lambda 函数的权限。
  • 编辑信任关系以允许账户 1 中“轮询器”Lambda 函数的执行角色承担账户 2 中的调用角色。

有关更多信息,请参阅适用于 AWS Lambda 的基于身份的 IAM 策略。另外,创建向 AWS 服务委派权限的角色

配置账户 1 中的“轮询器”Lambda 函数,以承担账户 2 中的调用角色

1.    为账户 1 中的执行角色策略授予调用 AssumeRole API 和承担账户 2 中的调用角色的权限。确保使用 sts:AssumeRole 操作。有关更多信息,请参阅授予用户切换角色的权限

2.    更新账户 1 中的“轮询器”函数,使其执行以下操作:

  • 承担账户 2 中的调用角色。有关说明,请参阅切换到 IAM 角色 (AWS API)
  • 将输入事件从 Kinesis 传递到账户 2 中的“处理器”函数。要让函数传递输入事件,请实例化服务客户端并使用适当的开发工具包方法请求异步调用事件调用类型)。
    注意:要确定要调用的适当开发工具包方法,请参阅运行时的开发工具包文档。

3.    为账户 2 中的函数配置死信队列 (DLQ)。这允许您在发生函数错误时调查或重试任何错过的事件。

为失败事件记录配置目标

为账户 1 中的“轮询器”函数设置的事件源配置失败事件记录的目标

注意:为失败事件记录配置目标会告诉 Lambda 将有关丢弃记录的详细信息发送到目标队列或主题。