【问题标题】:DynamoDB triggering a Lambda function in another AccountDynamoDB 在另一个账户中触发 Lambda 函数
【发布时间】:2019-01-07 02:33:06
【问题描述】:

我在账户 A 中有一个 DynamoDB 表,在账户 B 中有一个 AWS Lambda 函数。当 DynamoDB 表发生变化时,我需要触发 Lambda 函数。

我遇到了aws lambda - It is possible to Access AWS DynamoDB streams accross accounts? - Stack Overflow,它说这是不可能的。但我再次发现amazon web services - Cross account role for an AWS Lambda function - Stack Overflow 说这是可能的。我不确定哪个是正确的。

有人尝试过我想要达到的相同场景吗?

【问题讨论】:

  • 我回答了第二个链接,我会对其进行测试,所以我会说,是的,它确实有效。你试过了吗?您遇到了什么问题?
  • 请不要误会我的意思。我只是想在我花一些时间之前确认一下。您回答的问题是 lambda 和 route53 之间的交互,另一个链接指向官方的 aws 文档,该文档说这是不可能的。这就是我发布这个问题的原因。
  • 啊!我刚刚重新阅读了第二个链接。它与您的方案相关。它提供了一种 Lambda 函数可以访问不同账户中的资源的方式。它没有解释了如何让 DynamoDB 在不同的账户中触发 Lambda 函数。

标签: amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

指向的第一个链接是正确的。从基于 Stream 的事件到 Lambda 的触发器仅限于同一 aws 账户和同一区域。


但是,有一种方法可以实现您的目标。


Pre-requisite:我假设您已经在 AWS 账户 A 中创建了一个 Dynamo DB (DDB) 表(我们称之为 Table_A)。此外,您在 AWS 账户 B 中有一个处理 lambda(我们称之为 Processing_Lambda)。


步骤:

  1. 在账户 A 中创建一个新的代理 lambda(我们称之为 Proxy_Lambda)。此 lambda 将广播它处理的事件。
  2. 在 DDB 表 Table_A 上启用发电机流。此流将包含对表执行的所有更新/插入/删除事件。
  3. Proxy_Lambda 创建一个 lambda 触发器,以从 Table_A 的 dynamo db 表流中读取事件。
  4. 在 AWS 账户 A 中创建新的 SNS 主题(我们称之为 AuditEventFromTableA
  5. Proxy_Lambda 中添加代码,将从流中读取的事件发布到 SNS 主题 AuditEventFromTableA


  6. 创建一个 AWS SQS 队列(如果您的用例需要顺序事件,也可以是 FIFO 队列)。此队列存在于 AWS 账户 B 中。我们将此队列称为 AuditEventQueue-TableA-AccountA

  7. 为 AWS 账户 A 中的 SNS 主题 AuditEventFromTableA 创建订阅到 AWS 账户中的 SQS 队列 AuditEventQueue-TableA-AccountA AuditEventQueue-TableA-AccountA强>B。这将允许在帐户 B 的 SQS 队列中接收来自帐户 A 的所有 SNS 事件。
  8. 为 AWS 账户 B 中的 Processing_Lambda 创建触发器,以使用来自 SQS 队列 AuditEventQueue-TableA-AccountA 的消息。

Result: 这样你就可以根据账户 A 的发电机表的变化来触发账户 B 中的 lambda。

注意:如果您的用例需要严格跟踪顺序事件,您可能更喜欢将更新事件从 Proxy_Lambda 直接发布到账户 B 中的 AWS Kinesis 流,而不是 SNS-SQS 路径。

【讨论】:

  • 为什么需要 SQS?我可以简单地将 Lambda 附加到 SNS 主题吗?
  • SNS 位于 AWS 账户 A 中,SQS 位于 AWS 账户 B 中。而且由于 Lambda 工作方式的现有限制,您将无法从任何不同的 AWS 账户为 lambda 创建触发器
  • 这仍然是 2021 年触发跨账户 ddb 流的 lambda 函数的最佳方式吗?
【解决方案2】:

简单! 在账户 A 中创建一个代理 lambda A,并允许 A 调用目标 lambda Bin 账户 B。 DDB 流触发 lambda A。Lambda A 调用 Lambda B。

【讨论】:

    猜你喜欢
    • 2018-01-08
    • 2018-08-29
    • 2021-12-28
    • 1970-01-01
    • 2020-02-27
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多