AWS cdk 堆栈部署顺序

Lig*_*303 9 aws-cdk

我正在寻找一种方法来指定项目中堆栈的部署顺序。我知道我可以添加依赖项,但是,这些堆栈彼此不依赖,我可能想稍后删除一些。

我有一个每个其他堆栈(例如 rds)全局所需的服务框架。这些都是从一开始就部署的。

  • 应用程序网络
  • 应用程序-环球资源

现在我想为新客户添加堆栈,这些堆栈将依赖于 2 个全局堆栈,并且相互依赖,但不依赖于任何其他客户的堆栈。

例如

  • 应用程序客户-A-EC2(取决于应用程序网络)
  • 应用程序客户A-Lambda(取决于应用程序客户A-EC2)
  • App-Customer-A-Settings(取决于 App-GlobalResources、App-Customer-A-Lambdas)

  • App-Customer-B-EC2(取决于应用程序网络)
  • App-Customer-B-Lambdas(取决于 App-Customer-B-EC2)
  • App-Customer-B-Settings(取决于 App-GlobalResources、App-Customer-B-Lambdas)

我希望所有这些堆栈都按此顺序部署。首先是全局堆栈,然后是所有客户 a,然后是所有客户 b。

然而,这就是 cdk 正在做的事情:

  • 应用程序网络
  • 应用程序-环球资源
  • 应用程序-客户-A-EC2
  • 应用程序-客户-B-EC2
  • 应用程序客户 A-Lambda
  • 应用程序客户 B-Lambda
  • 应用程序-客户-A-设置
  • 应用程序-客户-B-设置

这意味着客户A必须等到所有其他客户资源都生成后才能使用该系统等等。由于客户堆栈之间不存在交叉依赖关系,因此不必按照 cdk 的顺序进行部署。

那么,我有什么选择呢?除了添加依赖项之外?我最初认为它会按堆栈名称或构造路径按字母顺序排序,但似乎并非如此。

谢谢你!

编辑:我浏览了 cdk 应用程序的代码并找到了排序代码。目前我的情况没有办法。CDK 使用的排序类型将始终产生观察到的模式。

我现在正在通过添加依赖项来解决问题。当删除“中间”且具有依赖关系的堆栈时,我必须用参数销毁它们-e

小智 9

从文档的堆栈依赖关系部分:

两个不同的堆栈实例可以相互依赖。当一个堆栈中的资源在另一个堆栈中引用时,就会发生这种情况。在这种情况下,CDK 会记录资源的跨堆栈引用,自动生成正确的 CloudFormation 原语,并在两个堆栈之间添加依赖关系。您还可以使用 stackA.addDependency(stackB) 方法手动添加两个堆栈之间的依赖关系。


Dzh*_*eyt -2

您可以cdk deploy [stack_name]多次调用来首先部署“必要的”堆栈(例如部署 RDS 或网络组件的堆栈),最后调用cdk deploy *来配置所有剩余的堆栈。