AWS CDK 中堆栈和构造之间的区别

Yun*_*Zou 22 amazon-web-services aws-cloudformation aws-cdk

我是 CDK 的新手,对构造和堆栈之间的区别感到困惑。使用 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");
Run Code Online (Sandbox Code Playgroud)

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

Mik*_* P. 22

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

\n

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

\n

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

\n

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

\n

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

\n

还需要知道Constructs用3个级别来表示。并且只有第一级Construct一对一映射到 AWS 资源。一对一表示Construct代表单个 AWS 资源。第一级名称以CfnConstruct开头。

\n

但第二级和第三级Constructs更高。因此,当您在 CDK 模板中定义第二级构造时,将创建几个AWS 资源,当您定义第 3 级构造 \xe2\x80\x93 时,将创建更多资源。

\n

这是针对抽象例行程序的。例如创建S3存储桶网站、Lambda应用程序等。

\n