如何使用跨账户 Kinesis 流调用我的 Lambda 函数?

上次更新时间:2019 年 8 月 5 日

我想使用另一个 AWS 账户中的 Amazon Kinesis 流来调用 AWS Lambda 函数。该如何操作?

简短描述

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

作为一种变通方法,您可以在与 Kinesis 流相同的账户(账户 A) 中使用“poller”Lambda 函数来调用另一个账户(账户 B)中的“processor”Lambda 函数。

警告:此配置消除了使用 Kinesis Data Streams 的许多好处,例如顺序排序和阻止分片中的记录。我们建议,仅当您的应用程序不需要这些功能时才使用此解决方法。

解决方法

在账户 A 中配置 Lambda 函数

  1. 在账户 A 中创建一个具有执行角色的 Lambda 函数。
    注意:您可以使用 Lambda 控制台或通过构建并上传您自己的部署程序包创建函数
  2. 授予账户 A 中的执行角色与 Kinesis 流相关的权限
  3. 将 Kinesis 流配置为事件源
    重要提示:创建事件源映射时,请确保 Lambda 函数和 Kinesis 流位于同一账户中。

在账户 B 中配置 Lambda 函数

  1. 在账户 B 中创建一个具有执行角色的 Lambda 函数。
  2. 在账户 B 中创建 AWS Identity and Access Management (IAM) 角色。此“调用角色”由账户 A 中的函数承担,以调用账户 B 中的函数。
  3. 修改调用角色的策略,如下所示:
    授予其在同一账户(账户 B)中调用(使用 lambda:InvokeFunction 操作)Lambda 函数的权限。
    编辑信任关系以允许账户 A 中的执行角色承担调用角色。

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

更新配置

  1. 修改账户 A 中执行角色的策略。授予其调用 AssumeRole API(使用 sts:AssumeRole 操作)以承担账户 B 中执行角色的权限。有关详细信息,请参阅向用户授予切换角色的权限
  2. 更新账户 A 中 Lambda 函数的代码,以便它执行以下操作:
    承担账户 B 中的调用角色。有关更多信息和示例,请参阅切换至 IAM 角色 (AWS API)
    通过实例化服务客户端并使用适当的开发工具包方法请求异步调用(调用类型为事件),将函数 A 的输入事件传递给账户 B 中的函数。
    注意:要确定要调用的开发工具包方法,请参阅运行时的开发工具包文档。
  3. 为账户 B 中的函数配置死信队列 (DLQ)。这让您可以在出现函数错误时调查或重试任何错过的事件。