概述
Terraform 是由 HashiCorp 创立的开源“基础架构即代码”(IaC Infrastructure as Code)工具。
Terraform它的一个重要功能之一,就是自动化地协助你云(多云)场景下的自动化基础设施资源的管理(AWS、谷歌云、阿里云等)。这意味着你可以以声明式的方式,自动化地创建、更新、删除你的公有云资源,减少手动点点点所带来地时间上地消耗和人工操作不可避免的风险。
Terraform和Ansible的对比
Terraform和Ansible在初识时应该如何定位他们?它们的定位都是自动化的工具,应该如何选择?
其实Terraform和Ansible是有功能重叠的。Terraform配置文件中的resource块,提供provisioner配置,连接到远程主机并进行类似ansible可执行的环境准备的操作。
但是可以明确的是,Terraform目前更合适你的基础设施创建和管理,如创建你的云主机、负载均衡器等等;Ansible而是更适合你的云主机创建后,自动化地去初始化你的机器配置、安装组件、部署服务等。
Terraform如何工作?
Terraform通过社区或者其他人在Terraform Registry上公开的provider来调用云平台或各种服务的API接口,从而创建和管理资源。
(图片来自terraform官网)
核心 Terraform 工作流程包含三个阶段:
- Write-编写:定义资源,编写声明式配置文件定义资源。这些资源可能跨越多个云提供商和服务。
- Plan-计划: Terraform 创建一个执行计划,描述它将根据现有基础架构和您的配置创建、更新或销毁的基础架构。
- Apply-应用:在批准后,Terraform 会按照正确的顺序执行建议的操作,并尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中的虚拟机数量,Terraform 将在扩展虚拟机之前重新创建 VPC。
(图片来自terraform官网)
Terraform管理已存在的云平台资源
Terraform默认情况下只管理通过Terraform创建出来的资源。但是实际生产中,我们一般都有了一些公有云的资源,才开始考虑使用Terraform来管理这些资源。
实际这种场景下,需要使用terrform import将非terraform创建的资源进行导入。
但是麻烦的是,每次只能导入一个资源。且terraform目前只接受这种方式来导入资源,并不能自动识别并生成相关配置。