【问题标题】:The difference between a Stack and Construct in AWS CDKAWS CDK 中的 Stack 和 Construct 之间的区别
【发布时间】:2022-04-16 04:25:56
【问题描述】:

我是 CDK 新手,对 Construct 和 Stack 之间的区别感到困惑。使用 CDK,我们可以定义称为 Construct 的可重用云组件,并且我们可以进一步将它们组合成一个堆栈或应用程序。请参阅下面 AWS 网站的图表,

但是,我见过通过扩展 Construct 基类创建构造的类,以及通过扩展 Stack 基类创建 Stack 的类。这两个子类可以稍后用于创建主堆栈。例如,参见下面的代码,我可以创建一个名为 HitCounter 的 Construct 或 Stack 类,它创建相同的资源集并在主 Stack 中以相同的方式使用它们。那么使用 Stack 和 Construct 有什么区别呢?

import * as cdk from '@aws-cdk/core';

export class HitCounterConstruct extends cdk.Construct {} // imagine this construct creates a bunch of related resources

export class HitCounterStack extends cdk.Stack {} // imagine this stack creates the same resources as the construct class above

// In main stack file App.ts

new HitCounterConstruct(cdk.App, "construct");
new HitCounterStack(cdk.App, "stack");

如果我在代码中犯了任何错误,请纠正我。在此先感谢:)

【问题讨论】:

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


    【解决方案1】:

    Stack 表示 CDK 术语中的 CF 模板。而 Construct 代表您要创建的 AWS 资源,例如 Lambda 函数、S3 存储桶、Api 网关等。

    或者如果你愿意,Stack 是你的文本文件,当我们在 yaml 或 json 中编写 CF 模板时,Constructs 是在这个文件中定义的资源。

    在您的情况下,如果您尝试在没有任何构造的情况下部署 HitCounterStack,它将是一个没有资源的空 cf 模板。

    通过CDK渲染CF模板,需要遵循以下结构: Stack -> Constructs,类似于 file->resources,但在它之上还应该定义 App,它还扩展了基类 Construct,因此 CDK 代码的最终正确模式应该是:

    应用程序 -> 堆栈 -> 构造。

    【讨论】:

      【解决方案2】:

      堆栈是一个 CloudFormation 概念。它被部署为一个单元。

      Construct 是一个 CDK OOP 类,它只是将类似的东西放在一起以分离关注点,并且对 CloudFormation 结果没有影响。

      【讨论】:

        【解决方案3】:

        根据AWS CDK API Reference

        Stack 是最小的物理部署单元,直接映射到 CloudFormation 堆栈。

        当您的应用程序增长时,您可能会决定将其拆分为多个 Stack 类更有意义。发生这种情况的原因有很多。

        一旦您的概念应用程序开始包含多个堆栈,就可以方便地将它们包装在另一个代表您的逻辑应用程序的构造中。然后,您可以像对待单个堆栈一样对待这个新单元:通过为应用程序的不同实例多次实例化它。

        您可以定义Construct 的自定义子类,包含一个或多个Stacks,以表示应用程序的单个逻辑实例。

        最后一点:Stacks 不是重用单元。它们描述了物理部署布局,因此最好留给应用程序构建者来组织他们的部署。如果您想出售可重用的构造,请将其定义为 Construct 的子类:构造的消费者将决定将其放置在自己的堆栈中的哪个位置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          • 1970-01-01
          • 2013-07-11
          • 2014-12-07
          • 2023-03-10
          相关资源
          最近更新 更多