AWS CloudFormation 简介
关键词:Infrastructure as Code - 基础设施即代码
刚开始接触 AWS 的时候,我们应该都是用管理控制台(management console)来创建所需的资源,比如 EC2, database 等。这种方法容易上手,只需要打开浏览器登录控制台,用鼠标点击几下即可,并且有很直观的图形界面,非常适合新手入门。
但当我们需要部署的资源越来越多,并且需要在不同的 account 和 Region 下构建相同的环境时,控制台方式就显得不合时宜了。我们需要一种效率更高的方式,这也就是我们今天要了解的一个 AWS 服务 - AWS CloudFormation。
AWS CloudFormation 的作用
快速提供(provision)AWS 资源以及第三方资源(3rd party resources)
确保部署一致性(consistency)
管理资源的生命周期(lifecycle),包括创建,更新和删除等
CloudFormation 是如何做到上述这些的呢?
因为在 CloudFormation 中,资源部署可以被定义成一个 YAML 或 JSON 格式的结构化文档,称为 CloudFormation Template,里面包含了需要被 CloudFormation 管理的资源描述,以及它们的依赖关系。CloudFormation 可以根据 Template 来创建这些资源并管理它们的生命周期,我们称一套这样的资源为 Stack。一个 Template 可以创建出多个 Stack,这就有点像面向对象编程里面类和实例的关系。因此我们也给这种构建资源的方式起了个高大上的名字 - 基础设施及代码(Infrastructure as Code)。
AWS CloudFormation 的好处
下面列举几个 AWS CloudFormation 主要的好处
Automation
可以将 CloudFormation 集成到 CI/CD pipeline 中,从而实现 DevOps 或 GitOps 自动化的运维管理流程。
Scale worldwide
使用 CloudFormation 可以轻易地将部署在不同 account 或者 Region 上进行扩展。
Integrate with other AWS services
CloudFormation 跟若干 AWS 服务实现了集成,从而形成一个更加完整可靠的管理流程。例如跟 IAM 集成实现访问控制,跟 AWS Config 集成实现合规性,跟 AWS CodePipeline 集成实现 CI/CD 自动化。
Manage 3rd party and private resources
CloudFormation 也能够跟一些第三方的服务和资源进行集成,从而为客户提供更加多样化的选择和更加丰富的功能。这些服务包括监控,生产力工具,CI/CD 工具等。
Extend CloudFormation with community
CloudFormation 还在 Github 上提供了开源项目,以对 CloudFormation 的能力进行扩展。你可以使用 CloudFormation registry 和 CloudFormation CLI 来定义资源和资源提供方,从而实现自动化和系统化的资源构建。
什么时候用 AWS CloudFormation
除了一些非常简单的部署使用控制台方式更为高效,其它场合都应该尽量使用 AWS CloudFormation。
单一部署 - 节省成本
如果在一次性部署时需要管理大量的资源,并且资源之间还有依赖关系,那么使用 AWS CloudFormation 更为高效可靠。此外,当需要删除这些资源时,手动删除可能会造成遗漏,而 CloudFormation 则能确保所有资源被清除干净。
企业级部署 - 基础设施及代码
企业级部署通常需要跨多个 account 或者 Region,有必要使用 AWS CloudFormation 来避免重复劳动并且确保部署一致性。此外,最佳实践的做法还应将 AWS CloudFormation 跟 CI/CD 集成起来,真正实现 Infrastruture as Code - 即把 CloudFormation 的源文件进行版本控制,每当有修改被审核通过之后,合入主线版本并触发部署更新,从而完成企业对 AWS 资源的完全自动化管理。
灾难恢复
使用 AWS CloudFormation 管理的部署,当有灾难发生导致资源受到影响时,可以非常快速的进行恢复。
如何创建 CloudFormation Stacks
我们再来加深一下 CloudFormation 的几个基本概念的印象:
Resources - 可以是 AWS 上的资源,如 EC2, VPC 等,也可以是第三方资源
Template - YAML 或 JSON 格式的模板,对需要管理的资源和它们的依赖关系进行描述;支持参数设定,可以在创建 Stack 时指定参数的值。
Stack - 由 Template 创建出来的一套资源实例
StactSet - 由同一个 Template 创建出来的 Stack 集合,但是它们被部署在不同的 account 或者 Region 上
有两种方式可以创建 CloudFormation Stacks
管理控制台手动方式
AWS CLI 命令行方式
在创建过程中可以选择 IAM Role 以获得必要的权限,如果没有选择 Role,那么 CloudFormation 将使用登录的 IAM User 权限。
计费
使用 AWS CloudFormation 对 AWS 资源进行管理是免费的
使用 AWS CloudFormation 对第三方资源进行管理需要收取少许的服务费
版权声明: 本文为 InfoQ 作者【冯亮】的原创文章。
原文链接:【http://xie.infoq.cn/article/cca53ebc5a45ad7b893f7c322】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论