AWS CDK 将多个 Lambda 订阅到同一个 SNS 队列

AWS CDK Subscribe Multiple Lambdas to Same SNS Queue

我想执行列出的第一种方法 here,为了在单个 S3 存储桶更新时触发各种 lambda 函数 运行,我会在两者之间放置一个 SNS 队列。

目前我将每个 Lambda 作为一个堆栈,我更愿意保持这种状态,特别是因为我有单独的管道阶段,无论如何我都需要分开。但是,我希望能够让它们都共享同一个 SNS 队列。执行此操作的最佳方法是什么?

根据我的想法,最好的方法是创建一个创建主题的“sns 队列堆栈”,然后将该主题传递到每个 lambda 堆栈并以这种方式订阅 lambda 函数,但我仍然不确定部署此 sns 队列堆栈的最佳方式。

关于在 CDK 中使用部署管道,这让我最困惑。我有多个管道阶段,每个管道阶段都有多个部署组和所述部署组中的多个 lambda 堆栈。我应该如何添加这个堆栈以确保它被正确部署?

我猜测我会在所有其他堆栈之前将它添加到第一个部署组的第一个阶段,然后它应该适用于所有其他阶段,但我不确定这是否是一种方式那行得通。

我们可以使用两种方法。

单个 CDK 项目中的多个堆栈:

我们在同一个项目中有多个堆栈的单个 CDK 项目。例如,我们有 1 个带有 SNS 主题的堆栈和 1 个用于每个 lambda 及其 SNS 订阅的堆栈。我们可以像记录的那样在堆栈中使用 sns 主题名称 here

const snsStack = new MySnsStack(app, 'my-sns-stack');

// each stack takes property topic as input, which behind the scenes perform cloudformation export and import.
 new MyLambdaOne(app, 'Stack2', {
  topic: snsStack.topic
});
 new MyLambdaTwo(app, 'Stack2', {
  topic: snsStack.topic
});

我们需要做的就是cdk deploy,堆栈按正确顺序排列和部署。即 sns 首先堆栈,然后根据引用其余的 lambda 堆栈。

多个 CDK 项目:

我们每个 cdk 项目有 1 个堆栈。因此,我们有多个 CDK 项目需要维护。然后我们必须使用 cfnOutput from the first stack and import topic arn in other stacks using Fn.ImportValue 手动导出主题 Arn。 然后我们需要 运行 多个 deployes cdk deploy MySnsStack, cdk deploy MyLambdaStack 等分别。首先是 sns 堆栈,其余并行。