1. 介绍
Designer 是用于创建、查看和修改 AWS CloudFormation 模板的图形工具。通过它,可以使用拖拽界面来绘制模板资源图,然后使用集成的 JSON 和 YAML 编辑器来编辑详细信息。
本文将使用 Designer 创建一个 CloudFormation 堆栈;将使用 Designer 添加资源并编辑基本的 Parameters、Mappings 和 Outputs;将使用 Designer 验证并启动堆栈,然后查看正在运行的堆栈。最后通过删除堆栈来清理资源。
2. Designer 工具组件
- 工具栏
- 工具栏提供对常用操作的命令的快速访问,例如打开和保存模板,撤消或重做更改,创建堆栈以及验证模板。
- 资源类型窗口
- “资源类型”窗格列出了所有模板资源(按其 AWS 服务名称分类),您可以通过将其拖动到画布上来添加到模板中。
- 帆布
- 画布窗格将您的模板资源显示为图表。
- 您可以使用它来添加或删除资源,在资源之间创建关系并安排其布局。
- 您在画布中所做的更改会自动修改模板的JSON。
- JSON 编辑器
- 在 JSON 编辑器中,您可以指定模板的详细信息,例如资源属性或模板参数。
- 当您在画布中选择一个项目时,相关的 JSON 将在编辑器中突出显示。
- 调节大小按钮
- 这将调整画布窗口的大小以展示图表资源。
- 全屏或分屏按钮
- 这些选择 AWS CloudFormation Designer 的不同视图。您可以选择画布的全屏视图,JSON 编辑器的全屏视图或画布和编辑器的分屏视图。
- 消息窗口
- 当打开、验证或尝试使用无效模板创建堆栈时,它将显示错误信息。
3. 实验
任务1:添加 EC2 实例资源
任务2:设置参数
参数是在创建堆栈时指定的输入值。参数对于传递值很有用,以避免模板中的硬编码。例如,您不需要再模板中对服务器 实例类型
进行硬编码。相反,可以在创建堆栈时使用参数指定实例类型。这允许使用同一模板来创建具有不同实例类型的多个服务器。
{
"Parameters": {
"InstanceType": {
"Description": "Server EC2 instance type",
"Type": "String",
"Default": "t3.micro",
"AllowedValues": [
"t3.micro",
"t2.micro"
],
"ConstraintDescription": "must be a valid EC2 instance type."
}
}
}
此代码添加了用于选择“实例类型”的参数。
任务3:添加映射
映射对于根据输入参数值来指定某个属性值很有用。在本例中,将使用映射根据堆栈部署的 Region 为 EC2 实例选择 AMI ID。
{
"Mappings" : {
"AWSRegionToAMI": {
"us-east-1": { "AMI": "ami-c58c1dd3" },
"us-east-2": { "AMI": "ami-4191b524" },
"us-west-1": { "AMI": "ami-7a85a01a" },
"us-west-2": { "AMI": "ami-4836a428" },
"ca-central-1": { "AMI": "ami-0bd66a6f" },
"eu-west-1": { "AMI": "ami-01ccc867" },
"eu-west-2": { "AMI": "ami-b6daced2" },
"eu-central-1": { "AMI": "ami-b968bad6" },
"sa-east-1": { "AMI": "ami-37cfad5b" },
"ap-southeast-1": { "AMI": "ami-fc5ae39f" },
"ap-southeast-2": { "AMI": "ami-162c2575" },
"ap-south-1": { "AMI": "ami-52c7b43d" },
"ap-northeast-1": { "AMI": "ami-923d12f5" },
"ap-northeast-2": { "AMI": "ami-9d15c7f3" }
}
}
}
任务4:添加输出
本例中,将输出 EC2 实例的 Public IP。
{
"Outputs": {
"PublicIP": {
"Value": {
"Fn::GetAtt": [
"ServerInstance",
"PublicIp"
]
},
"Description": "Newly created server IP address"
}
}
}
任务5:指定资源属性
本例中,为 EC2 实例指定一些属性:
{
"Resources": {
"ServerInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": {
"Ref": "InstanceType"
},
"ImageId": {
"Fn::FindInMap": [
"AWSRegionToAMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
}
}
}
}
}
该 InstanceType
将被设置为通过 Parameters 部分定义传递的值。
该 ImageId
将使用映射,通过正在使用堆栈的 Region 来选择适当的 AMI。