【问题标题】:AWS CDK Subscribe Multiple Lambdas to Same SNS QueueAWS CDK 将多个 Lambda 订阅到同一个 SNS 队列
【发布时间】:2021-03-17 10:22:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您在单个 cdk 项目中将每个 lambda 作为堆栈,还是有多个 cdk 项目?

标签: amazon-web-services aws-lambda amazon-cloudformation aws-cdk


【解决方案1】:

我们可以使用两种方法。

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

我们在同一个项目中有多个堆栈的单个 CDK 项目。例如,我们有 1 个包含 SNS 主题的堆栈,以及每个 lambda 及其 SNS 订阅的 1 个堆栈。我们可以在堆栈中使用 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 从第一个堆栈中手动导出主题 Arn,并使用 Fn.ImportValue 在其他堆栈中导入主题 arn。 然后我们需要分别运行多个部署 cdk deploy MySnsStackcdk deploy MyLambdaStack 等。首先是 sns 堆栈,其余的并行。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多