CloudFormation 模板具有以下几个优势:
- 遵循熟悉的格式:CloudFormation 模板只是一个 JSON(Javascript 对象表示法)或 YAML 格式的文本文件,用于描述运行某个应用程序或服务所需的 AWS 基础设施以及它们之间的互联关系。
- 管理关系:模板能简要地获取资源间的关系,例如 EC2 实例必须与 Elastic Load Balancing 负载均衡器相关联,或者 EBS 卷必须与其挂载的实例位于同一 EC2 可用区内。
- 反复使用:使用模板参数可使单个模板用于具有不同配置值的多个基础设施部署,例如要为该应用程序部署多少实例的模板。
- 获取帮助反馈:模板还提供输出属性,以便向用户返回部署结果或配置信息。例如,完成实例化后,模板可能向客户提供 Elastic Load Balancing 终端节点的 URL,用于连接最新实例化的应用程序。
- 避免冲突:模板中的所有 AWS 资源由逻辑名称进行标识,以便利用一个模板创建多个堆栈时 AWS 资源之间不会产生命名冲突。
- 即写即用:使用任何方法启动堆栈,无需提前用 AWS CloudFormation 注册模板。
- 直观显示您的堆栈:CloudFormation Designer 让您能够以图表形式直观显示模板。您可以轻松地查看 AWS 资源及其之间的关系并安排布局,使图表更符合您的意图。您可以借助拖放界面和集成的 JSON 编辑器编辑模板。您对图表所做的修改会自动反映到模板的 JSON 中。
- 查询资源:AWS CloudFormation 保留堆栈模板的副本,以便您可以使用 AWS 管理控制台、命令行工具或 API 查询堆栈创建期间应用的确切资源配置。
- 自动化:您可以选择使用编程语言或所选工具自动生成模板。您还可以选择使用 CloudFormation API、AWS SDK 或 AWS CLI 从模板中自动创建堆栈。
模板具有下列高级别 JSON 结构:
{
"Description" : "模板使用方法的文本描述",
"Parameters": {
// 用于根据每个部署自定义模板的一组输入值
},
"Resources" : {
// 一组 AWS 资源及其之间的关系
},
"Outputs" : {
// 堆栈创建者可以看到的一组值
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
下列模板是说明如何创建 EC2 实例的一个简单示例:
{
"Description" : "创建运行 Amazon Linux 32 位 AMI 的 EC2 实例。",
"Parameters" : {
"KeyPair" : {
"Description" : "允许 SSH 访问此实例的 EC2 密钥对",
"Type" : "String"
}
},
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : "ami-3b355a52"
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "新创建的 EC2 实例的实例 ID",
"Value" : {
"Ref" : "Ec2Instance"
}
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
堆栈是实例化模板所产生的资源集。您可以通过向 AWS CloudFormation 提供模板和任何所需参数来创建堆栈。基于模板和在该模板中指定的任何依赖关系,AWS CloudFormation 可确定需要创建的 AWS 资源及其顺序。
若要更新堆栈,需提供具有堆栈中所有资源的所需配置的模板。您可修改堆栈中现有资源的属性,以便对环境变化或新应用程序要求作出反应。例如,您可以改变 AWS CloudWatch 警报的警报阈值,或者更新堆栈中正在实例中运行的 AMI。AWS CloudFormation 负责处理堆栈中不同资源之间的更改。在许多情况下,所做更改不会影响您运行的应用程序。但是,如果无法进行动态更改(例如在 EC2 实例上更新 AMI),AWS CloudFormation 将创建新的资源并将其重新接入堆栈,并在服务确定完全更新成功后,删除旧的资源。
AWS CloudFormation 将完整创建或更新一个堆栈。如果无法完整创建或更新堆栈,AWS CloudFormation 将回滚该堆栈。出于调试目的,可以禁用回滚操作并稍后手动重试堆栈创建或更新操作。
您还可以使用 AWS CloudFormation Designer 创建或修改堆栈的模板,然后将之提交给 AWS CloudFormation 以创建或更新堆栈。AWS CloudFormation Designer 可在 AWS 管理控制台中访问。
您可以通过 AWS 管理控制台轻松访问 AWS CloudFormation,使用该控制台的点选式 Web 界面部署和管理堆栈。只需几个简单步骤,您就能在 AWS 管理控制台内创建、删除和更新应用程序。
AWS CloudFormation Designer 是一种可视化工具,它为向模板添加资源等操作提供了一个拖放界面。CloudFormation Designer 让您能够将更多的时间花在设计 AWS 基础设施而不是手动编写模板代码上。例如,当您添加或删除资源时,CloudFormation Designer 会替您自动修改底层的 JSON。您还可以使用集成的文本编辑器指定模板详细信息,如资源属性值和输入参数。阅读本文档了解更多信息。
AWS CloudFormation Designer 是 AWS CloudFormation 控制台的一部分;您必须使用 AWS 凭证登录才能使用该工具。要使用 AWS CloudFormation Designer,请访问 https://console.thinkwithwp.com/cloudformation/designer。以下情景突出展示了 AWS CloudFormation Designer 的一些功能。
直观显示模板资源
解析 JSON 格式的文本文件以了解模板中的资源及其之间的关系是项艰难的任务。借助 AWS CloudFormation Designer,您可以打开任何有效的 AWS CloudFormation 模板,该工具能够以图表形式直观显示所有模板资源。您可以轻松地查看模板资源及其连接方式,无需阅读 JSON。AWS CloudFormation Designer 包含一个 JSON 文本编辑器,您可以根据需要随时查看模板的详细信息。
简化模板撰写工作
在文本编辑器中操作模板资源时,您必须手动编辑 JSON,这一过程繁琐又容易出错。在 AWS CloudFormation Designer 中,您能够以操作图表的方式操作这些资源。拖放新资源就能将其添加到模板中,拖放资源之间的连接即可建立关系。AWS CloudFormation Designer 会自动修改 JSON。除了直观显示资源外,集成的 JSON 文本编辑器还提供了资源属性名称自动补全功能。通过使用 AWS CloudFormation Designer,您可以将更多的时间花在设计 AWS 基础设施而不是手动编写模板代码上。
AWS CloudFormation 可提供一组操作简单并且非常灵活 API。如需获取可用 AWS CloudFormation API 的完整列表,请参阅 AWS CloudFormation API 参考指南。下面列出了一些常用 API 及其功能:
- CreateStack:开始创建新堆栈。调用时的输入参数包括堆栈名称和源模板的文件名(或 Amazon S3 URL)。如果堆栈创建过程成功完成,堆栈将处于 CREATE_COMPLETE 状态。如果堆栈创建失败,AWS CloudFormation 会删除之前创建的资源,除非用户指定了标记保留这些元素,以便实现调试目的。
- ListStacks:列出您的账户中的所有堆栈。您可以使用该项来查看堆栈集及其当前状态,例如该堆栈已创建还是已更新。
- ListStackResources:列出作为堆栈创建一部分的所有 AWS 资源名称和识别符。除了向您提供信息,此调用还可供 AWS CloudFormation 感知应用程序使用,以了解其环境。
- DescribeStackEvents:列出 AWS CloudFormation 为堆栈生成的所有操作和事件,以便您可以查看创建或删除操作的进展状态。
- UpdateStack:启动现有堆栈的更新过程。调用时的输入参数包括堆栈名称和所更新模板的文件名(或 Amazon S3 URL)。如果堆栈更新过程成功完成,堆栈将处于 UPDATE_COMPLETE 状态。如果堆栈更新失败,AWS CloudFormation 将回滚所进行的任何资源更改,以便堆栈返回到原始模板中所述的状态。
还可通过 AWS SDK 和 AWS CLI 使用 AWS CloudFormation。
AWS CloudFormation 与 Amazon Simple Notification Service (Amazon SNS) 结合让您能在堆栈创建、更新和删除过程中接收通知。除了 AWS CloudFormation 为您提供堆栈状态外,AWS CloudFormation 也会使其他程序获悉 CloudFormation 中的项目并做出反应,甚至会参与到堆栈配置过程中。
AWS CloudFormation 模板旨在让您能够利用 AWS 现有体验。每个资源都有一组参数,其名称与通过其原生 API 创建资源时所用的名称完全相同。下列模板片段演示如何定义 Amazon EBS 卷。模板中卷的逻辑名称是“myVolume”,它的类型为“AWS::EC2::Volume”。如果您以前使用过 EBS 卷,那么您应该对这些属性应该很熟悉。
"myVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "10",
"SnapshotId" : "snap-7b8fd361",
"AvailabilityZone" : "us-east-1a"
}
}
AWS CloudFormation 提供了多个帮助程序脚本,可以设置到您的 EC2 实例中。这些脚本能让您轻松地从堆栈中读取资源元数据并用其配置您的应用程序,将设置软件包和文件到模板中所列的实例,并对配置变化或应用程序更新等堆栈更新作出反应。
可供使用的脚本如下:
- cfn-get-metadata:在模板中检索与资源关联的元数据。
- cfn-init:下载并安装模板中所述的软件包和文件。
- cfn-signal:向堆栈创建工作流程发出信号,以示您的应用程序已在运行并准备好接受流量。
- cfn-hup:这是一个后台守护程序可以侦听借助 AWS 控制台/命令行工具或直接通过 API 启动的堆栈更新,并运行特定于您的应用程序的钩子以便对变化作出响应。
您可以单独或与 CloudInit 一起使用 CloudFormation 脚本,CloudInit 是 Amazon Linux AMI 和一些其他 Linux AMI 上提供的功能。有关引导应用程序和更新配置的更多详细信息,请参阅 AWS CloudFormation 开发人员资源。
使用本服务需遵守 Amazon Web Services 客户协议。