使用旧版 AWS CloudFormation Designer 创建模板 - AWS CloudFormation

使用旧版 AWS CloudFormation Designer 创建模板

CloudFormation 控制台中的应用程序编辑器模式是推荐用于直观地构建 CloudFormation 基础设施的新方式。只有您所在区域支持 Designer,才能使用旧版 AWS CloudFormation Designer。有关更多信息,请参阅 使用应用程序编辑器直观地创建模板

Designer 是一种可用于创建、查看和修改 AWS CloudFormation 模板的图形工具。通过使用 Designer,您可以使用拖放界面以图表形式查看模板资源,然后使用集成的 JSON 和 YAML 编辑器编辑其详细信息。不管您是新手还是经验丰富的 AWS CloudFormation 用户,AWS CloudFormation Designer 都能帮您迅速了解模板中各项资源的相互联系并轻松地修改模板。

Designer 是 AWS CloudFormation 控制台的一部分。要使用它,请在 https://console.aws.amazon.com/cloudformation/designer 中打开 Designer 并用您的 AWS 凭证登录。

Designer 具备以下优势:可以图形化的方式表示模板中的资源、简化模板撰写工作、简化模板编辑工作。

可视化模板资源

分析 JSON 或 YAML 格式的文本文件以了解模板中的资源及其之间的关系是项艰难的任务。在 Designer 中,您可以查看模板中包含的资源的图形化表示,了解它们之间的关系。

Designer 在模板元数据中定义有关您的资源的信息,如资源的大小、相对位置等。在您打开模板时,Designer 会自动添加此元数据,以便在您保存模板时保留当前布局。当您在 Designer 中重新打开模板时,它会显示与上次保存模板时完全相同的图表。

所有布局信息均在 AWS::CloudFormation::Designer 元数据键中定义,后者仅供 Designer 使用,不会干扰 AWS CloudFormation 堆栈的创建。下面的模板元数据示例显示了 Designer 以元数据形式添加到模板中的布局信息:

JSON

"Metadata": { "AWS::CloudFormation::Designer": { "6b56eaae-0bb6-4215-aad6-12345EXAMPLE": { "size": { "width": 60, "height": 60 }, "position": { "x": 340, "y": 430 }, "z": 2, "parent": "21ccc9b0-29e9-4a86-9cf2-12345EXAMPLE", "embeds": [], "ismemberof": [ "c3eead73-6a76-4532-9268-12345EXAMPLE" ] }, ...

YAML

Metadata: 'AWS::CloudFormation::Designer': 6b56eaae-0bb6-4215-aad6-12345EXAMPLE: size: width: 60 height: 60 position: x: 340 'y': 430 z: 2 parent: 21ccc9b0-29e9-4a86-9cf2-12345EXAMPLE embeds: [] ismemberof: - c3eead73-6a76-4532-9268-12345EXAMPLE ...

简化模板撰写工作

在文本编辑器中撰写模板资源时,您必须手动编辑 JSON 或 YAML,这一过程繁琐又容易出错。通过使用 Designer,您可以将更多的时间花在设计 AWS 基础设施而不是手动编写模板代码上。在 Designer 中,您可以拖放新资源以将其添加到模板中,然后在资源之间拖动连接线以建立关系。Designer 会自动修改 JSON 或 YAML。

创建模板时,Designer 会在资源间强制建立一些基本的关系,以帮助您创建有效的模板。例如,您无法直接在 VPC 中添加 EC2 实例;您必须将此实例添加到 VPC 中的子网内。

您还可以直接在 Designer 中验证模板。它提供与 ValidateTemplate API 调用相同级别的验证:检查 JSON 或 YAML 语法是否有效、所有引用参数是否都已声明、是否不存在循环依赖关系。

借助 集成的 JSON 和 YAML 编辑器 简化编辑工作

通过使用集成编辑器,您可以在 AWS CloudFormation 控制台中进行所有模板修改。您无需使用单独的文本编辑器来修改和保存您的模板。集成编辑器 还提供了自动补全功能,它可列出资源的所有属性名称,因此,您无需查找或记住它们。此外,您还可以使用集成编辑器将 JSON 模板转换为 YAML,或进行反向转换。

Designer 有四个窗格。canvas 窗格显示模板资源的图表,以便您迅速查看资源及资源间的关系。为向模板添加资源,可从 Resources types 窗格拖放资源到 canvas 窗格上。使用 Integrated JSON and YAML editor 窗格可指定模板详细信息,如资源属性或模板参数。修改模板后,您可以将其保存到本地文件或 Amazon S3 存储桶。当您将有效的模板从 JSON 转换为 YAML 或进行反向转换时,Messages 窗格会显示成功或失败消息。当您打开或验证无效的模板时,Messages 窗格会显示验证错误。

注意

Designer 无法显示或修改堆栈中正在运行的资源;只能用它创建、修改和保存模板。

下图介绍 Designer 窗格及其主要组件。

Designer 窗格和组

将窗格和组件编号的 Designer 屏幕截图。
1. 工具栏

工具栏可让您快速访问常见的操作命令,如打开和保存模板、撤消或重做更改、创建堆栈、验证模板等。您还可以将图表下载为图像、获取帮助或在画布窗格中刷新图表。

2. Resource types (资源类型) 窗格

Resource types (资源类型) 窗格列出了可添加到模板中的所有模板资源,并按其 AWS 服务名称分类。您可通过将资源从 Resource types 窗格拖放到画布上来添加资源。AWS 资源和属性类型参考 中列出了大多数支持的资源。Resource types 窗格未列出连接资源,如 AWS::EC2::SubnetRouteTableAssociation 资源。连接资源在您连接相关资源时创建,例如:当您将路由表连接到子网时。有关更多信息,请参阅 Canvas (画布) 窗格

注意

Designer 只能显示 AWS CloudFormation 支持的资源类型。它无法显示其他实体,如可用区 (AZ) 或嵌入堆栈资源。

3. Canvas (画布) 窗格

canvas 窗格以图表形式显示模板资源。可以用它添加或删除资源、在资源间创建关系、安排资源的布局。在 canvas 中更改后,系统会自动修改模板的 JSON 或 YAML 文件。有关更多信息,请参阅 Canvas (画布) 窗格

4. 适应窗口按钮

用于调整 canvas 窗格以适应模板图表的按钮。

5. 全屏和分屏按钮

用于选择 Designer 不同视图的按钮。可以选择全屏显示画布、全屏显示 Integrated JSON and YAML editor,或分屏显示画布和编辑器。

6. Integrated JSON and YAML editor (集成的 JSON 和 YAML 编辑器) 窗格

在 集成编辑器 中可指定模板的详细信息,如资源属性或模板参数。在 canvas (画布) 中选择某个项目时,Designer 将在编辑器中突出显示相关的 JSON 或 YAML。在编辑 JSON 或 YAML 后,您必须刷新 canvas (画布)(选择 )以更新图表。通过在 Choose template language(选择模板语言)中选择相应的单选按钮可以将有效的模板在 JSON 和 YAML 之间转换。Designer 只能转换有效的 YAML 或有效的 JSON 模板。如果转换成功,Messages(消息)窗格会显示类似下面的消息:Successfully converted the template to YAML(成功将模板转换为 YAML)。AWS CloudFormationDesigner 转换模板时不保留格式。

重要

我们建议您不要在 Designer 中将 # YAML 注释添加到模板中。如果 YAML 模板具有 # 注释,Designer 在编辑 YAML 或转换为 JSON 时不会保留这些注释。在 Designer 中编辑或修改模板 (例如,在画布上拖动资源) 时,注释将丢失。

选择模板语言后,拖动到画布上的任何新资源都将以所选语言创建。要切换成另一种语言,请确保模板有效,然后在提示 Choose template language 时选择 YAMLJSON

7. Messages (消息) 窗格

将模板从 JSON 转换为 YAML 或进行反向转换时,Messages 窗格会显示成功或失败消息。如果打开、验证无效的模板或尝试用无效模板创建堆栈时,Messages 窗格会显示验证错误。

Canvas (画布) 窗格

Designer 在 canvas 窗格中以图表形式显示模板资源。您可以在此窗格中修改图表的布局、添加或删除资源、添加或删除资源间的连接。例如,可以从 Resource types 窗格将自动扩缩组和启动配置添加到 canvas 窗格。要连接这些相关资源,在它们之间拖出一条连接线。

Designer 如何对资源建模?

当您将资源从 Resource types 窗格拖放到 canvas 窗格时,Designer 会将其建模为容器或方形对象。

容器

容器资源是可调整大小的矩形,其中可包含其他资源。例如,对于 AWS::EC2::VPC 资源类型,Designer 即将其建模为容器。您可以将资源 (如子网) 拖放到 VPC 中。

容器资源

容器资源示例。
方形对象

方形对象资源无法调整大小或包含其他资源。例如,对于 AWS::EC2::Instance 资源类型,Designer 即将其建模为方形对象。

方形对象

方形对象示例。

连接资源

您通过连接资源来在相关资源之间创建关联。例如,当您向 canvas 窗格添加 Internet 网关和 VPC 时,它们之间没有联系。要将此网关连接到 VPC,您必须连接它们。连接资源的方法取决于资源类型和 Designer 对于此资源的建模方式。下面的描述和图表介绍了各种方法。

向容器添加资源

当您将有效的资源拖放到容器中时,Designer 会自动创建资源和容器之间的关联。例如,VPC 是容器资源;您可以将子网拖放到 VPC 中,Designer 会自动关联这两种资源。

VPC 容器中的子网资源。

这些关联在模板中以 Ref 内部函数的形式表示,如以下示例所示:

JSON

"PublicSubnet": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": "10.0.0.0/24" }

YAML

PublicSubnet: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24

在某些情况下,将资源放入容器不会创建关联;您必须在资源间拖出一条连接线 (有关在资源之间拖放连接的信息,请阅读下一个方法)。要查看 Designer 是否关联了资源,请使用集成的 JSON 和 YAML 编辑器查找从一个资源到另一个资源的 Ref。例如,当您在子网容器中添加自动扩缩组时,Designer 不会指定此组的 VPCZoneIdentifier(子网)属性。要关联这两个资源,您必须拖出一条从自动扩缩组到此子网的连接线。

资源之间的拖放连接

每个方形和容器资源的边缘都有一个或多个点,代表您可以与之创建连接的资源。要创建连接,可以拖出一条从此点到相应资源类型的连接线。例如,要将 Internet 网关连接到 VPC,可以拖出一条从 VPC 网关连接点到 VPC 上任意位置的线。

拖放连接线以创建连接(显示为箭头)。

这些关联在模板中以 Ref 内部函数或独立的资源类型表示。例如,在将 Internet 网关连接到 VPC 时,Designer 会在模板中创建 AWS::EC2::VPCGatewayAttachment 资源类型,以关联它们。Resource types(资源类型)窗格中未列出此类资源。

JSON

"VPCGatewayAttachment": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { "InternetGatewayId": { "Ref": "InternetGateway" }, "VpcId": { "Ref": "VPC" } }

YAML

VPCGatewayAttachment: Type: 'AWS::EC2::VPCGatewayAttachment' Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC
资源之间的编码连接

在某些情况下,必须编辑模板的 JSON 或 YAML 才能创建连接,例如:当连接两个安全组时。如果必须编辑 JSON 或 YAML 才能创建连接,则需要创建硬编码的连接 (短划线连接)。您无法在 canvas 窗格中创建或编辑此类连接。

以短划线连接起来的两个资源。

通常,在资源的属性中嵌入引用 (Ref) 时,即创建了硬编码连接。例如,您可以在两个安全组之间定义连接,其中,一个安全组拥有允许来自另一安全组的流量的嵌入式传入规则。下面的 WebServerSecurityGroup 资源拥有一条引用 PublicLoadBalancerSecurityGroup 资源的传入规则。

JSON

"WebServerSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VPC" }, "GroupDescription": "Allow access from HTTP and SSH traffic", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIp": "0.0.0.0/0" }, { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": { "Ref": "SSHLocation" } } ] } ...

YAML

WebServerSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: !Ref VPC GroupDescription: Allow access from HTTP and SSH traffic SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: !Ref SSHLocation

使用资源菜单访问常见资源操作

Resource 菜单提供对常见资源操作的便捷访问:编辑资源属性、复制资源、删除资源或查看资源文档。要查看 Resource 菜单,可以右键单击 canvas 窗格中的资源。文档链接指向模板参考,其中描述了该资源的属性和语法。

资源菜单

具有四个按钮的资源菜单。

定义明确的依赖关系

要指定 AWS CloudFormation 创建和删除资源的顺序,您可以创建明确的依赖关系。要覆盖并行资源创建和删除,明确的依赖关系是非常有用的。AWS CloudFormation 自动确定可以并行处理模板中的哪些资源,而无法处理哪些资源。当您指定的属性引用相同模板中另一来源的属性(使用 Ref 内部函数)或获取另一资源的属性(使用 Fn::GetAtt 内部函数)时,即暗示着存在依赖关系,AWS CloudFormation 会以正确的顺序构建它们。

但是,在某些情况下,您必须明确定义依赖关系。例如,在网关连接到 VPC 之前,路由规则无法使用互联网网关。通常,AWS CloudFormation 在创建 Internet 网关后会因为隐式依赖关系立即创建路由规则。但是,AWS CloudFormation 可能在将 Internet 网关连接到 VPC 之前即创建规则,从而导致出错。因此,您必须明确定义网关-VPC 连接的依赖关系。

要创建明确的依赖关系,可以从路由上的 DependsOn (*) 点拖一条线到网关-VPC 连接。

拖放 DependsOn 点以创建依赖关系。

有关何时可能需要创建明确依赖关系的更多信息,请参阅DependsOn 属性

JSON

在 JSON 中,这些明确的依赖关系以资源上的 DependsOn 属性表示,如以下示例所示:

"PublicRoute": { "Type": "AWS::EC2::Route", "DependsOn": "VPCGatewayAttachment", "Properties": { "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "PublicRouteTable" }, "GatewayId": { "Ref": "InternetGateway" } }
YAML

在 YAML 中,这些明确的依赖关系以资源上的 DependsOn 属性表示,如以下示例所示:

PublicRoute: Type: 'AWS::EC2::Route' DependsOn: - VPCGatewayAttachment Properties: DestinationCidrBlock: 0.0.0.0/0 RouteTableId: !Ref PublicRouteTable GatewayId: !Ref InternetGateway

集成的 JSON 和 YAML 编辑器

可以使用 Designer 的集成的 JSON 和 YAML 编辑器查看和编辑模板详细信息。例如,可以使用 集成编辑器 定义资源的属性或更改模板参数。集成编辑器具有两个视图:Components (组件) 视图和 Template (模板) 视图。

要对模板的特定部分进行次要变更,可以使用 Components 视图。在 Components 视图中,可编辑的组件划分到了各个选项卡中。这些选项卡根据您是否选择了资源而变化。

例如,如果您选择了某个资源,则 Designer 提供编辑此资源属性的选项卡,如更新策略或创建策略。如果尚未选择任何元素,则 Designer 提供编辑模板参数、映射、条件、元数据和输出的选项卡。在 Components 视图中所做的任意更改都必须是有效的 JSON 或 YAML 标记。如果引入无效的 JSON 或 YAML,在退出 Components (组件) 视图时,Designer 将无效的标记恢复为有效的标记。

要对模板执行广泛的变更,可以使用 Template 视图。在 Template (模板) 视图中,集成的 JSON 和 YAML 编辑器显示整个模板的原始 JSON 或 YAML。如果要更改资源,请在画布窗格中选择该资源。Designer 在集成的 JSON 和 YAML 编辑器中自动突出显示该资源。

AWS CloudFormation Designer 集成的 JSON 和 YAML 编辑器

具有原始 JSON 的集成的 JSON 和 YAML 编辑器屏幕截图。

将模板转换为 YAML 或 JSON

通过在 Choose template language(选择模板语言)中选择相应的单选按钮可将有效的模板在 JSON 和 YAML 之间来回转换。Designer 只能转换有效的 YAML 或有效的 JSON 模板。如果转换成功,Messages(消息)窗格会显示类似下面的消息:Successfully converted the template to YAML(成功将模板转换为 YAML)。

重要

我们建议您不要在 Designer 中将 # YAML 注释添加到模板中。如果 YAML 模板具有 # 注释,Designer 在编辑 YAML 或转换为 JSON 时不会保留这些注释。在 Designer 中编辑或修改模板 (例如,在画布上拖动资源) 时,注释将丢失。

选择模板语言后,拖动到画布上的任何新资源都将以所选语言创建。要切换成另一种语言,请确保模板有效,然后在提示 Choose template language 时选择 YAMLJSON

注意

在将模板转换为 YAML 时,Designer 使用函数的短格式表示法。例如,- !GetAtt。此外,在 YAML 模式下,绘制的任何视觉链接也将使用短格式表示法。有关内部函数的更多信息,请参阅Ref

自动完成

集成的 JSON 和 YAML 编辑器 包含自动补全功能,可帮助您指定资源属性,因此,您不必记住属性名称。要查看 JSON 模板中的有效属性列表,请在 Properties 大括号 ({}) 中按 Ctrl+Space,如以下示例所示:

JSON 示例中的自动完成选项。

对于 YAML 模板,您可以先删除左/右大括号,然后按 Enter 以转到新行。要查看有效的属性列表,请在 Properties 后面的新行上按 Ctrl+Space,如以下示例所示:

YAML 示例中的自动完成选项。

键盘快捷键

Designer 的集成的 JSON 和 YAML 编辑器提供以下键盘快捷键:

Ctrl+Space

在资源的 Properties 键中,列出该资源的所有可用属性。

Ctrl+F

搜索特定的值。

要突出显示与指定值匹配的所有内容,请按 Alt+Enter

有关如何使用 AWS CloudFormation Designer 创建和更新模板的示例,请参阅以下演练: