微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS CDK 中 Stack 和 Construct 的区别

如何解决AWS CDK 中 Stack 和 Construct 的区别

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

enter image description here

但是,我见过通过扩展 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");

如果我在代码中犯了任何错误,请纠正我。提前致谢:)

解决方法

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

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

,

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

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

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

通过 cdk 渲染 cf 模板需要遵循以下结构: Stack -> Constructs,就像 file->resources,但在它之上还应该定义 App,它也是扩展基类 Construct,所以 cdk 代码的最终正确架构应该是:

应用 -> 堆栈 -> 构造。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。