初识Terraform

认识

  • Terraform 是一个 IT 基础架构自动化编排工具,它的口号是 “Write, Plan, and create Infrastructure as Code”, 基础架构即代码。
  1. 基础设施即代码,声明式的代码工具
  2. 通过配置语言,实现可读的自动化部署
  3. 通过不同的配置语言适配不同的运营商

Overview

  • Terraform使用其自己的配置语言,旨在允许对基础结构进行简洁的描述。

  • Terraform语言是声明性的,描述的是预期目标,而不是达到目标的步骤。

  • Terraform语言的主要目的是声明资源。 所有其他语言功能的存在只是为了使资源的定义更加灵活和方便。

  • 可以将一组资源收集到一个模块中,从而创建更大的配置单元。 资源描述单个基础结构对象,而模块可能描述一组对象以及它们之间的必要关系,以便创建更高级别的系统。

  • Terraform配置由一个开始评估的根模块以及一个模块调用另一个模块时创建的子模块树组成。


使用

参数、代码块以及表达式

Terraform语言的语法仅包含一些基本元素:

resource "vsphere_custom_attribute" "attribute" {
  name                = "terraform-test-attribute"
  managed_object_type = "VirtualMachine"
}

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
  # Block body
  <IDENTIFIER> = <EXPRESSION> # Argument
}
  • BLOCK是其他内容的容器,通常代表某种对象(例如资源)的配置。 块具有块类型,可以具有零个或多个标签,并且具有包含任意数量的参数和嵌套块的主体。 Terraform的大多数功能由配置文件中的顶级块控制。
  • Argument为名称分配一个值。 参数在块内使用。
  • EXPRESSION可以通过字面量或引用并组合其他值来表示一个值。 表达式作为参数的值使用,或者在其他表达式中作为值使用。

Terraform 常用命令

命令含义类型
terraform plan资源的预览资源管理
terraform apply资源的新建和变更资源管理
terraform show资源的展示资源管理
terraform destroy资源的释放资源管理
terraform import资源的导入资源管理
terraform taint标记资源为被污染资源管理
terraform untaint取消被污染标记资源管理
terraform output打印出参及其值资源管理
terraform state list列出当前state中的所有资源状态管理
terraform state show展示某一个资源的属性状态管理
terraform state pull获取当前state内容并展示状态管理
terraform state rm移除特定的资源状态管理
terraform state mv变更特定资源的存放地址状态管理
terraform init初始化加载模块其他
terraform validate对tf脚本语法进行检查其他

使用步骤

  • 使用 Terraform 的常规流程:
  1. 创建一个 terrafom 项目,编写所需要的 tf 脚本。
  2. 在命令行下运行terraform init进行初始化。
  3. 运行 Terraform 管理命令,例如 terraform apply对云端IT资源进行操作。
  4. 根据需求,修改配置文件,重新执行第三步。
  • Terraform 项目执行的过程发生了什么?
    • 执行 terraform init 初始化项目,Terraform 会在项目根目录下加载所有的 *.tf文件,读取配置信息,生成一个.terraform目录,自动下载与对应的远端资源进行通行的必要插件。
    • 在命令行下执行 terraform apply命令,terraform 会根据 tf脚本对远程IT资源进行更新或者创建,IT资源的状态信息会保存在terraform.tfstate文件中,这是一个自动创建的 json文件,可以理解为一个缓存文件。每次通过 terraform 操作远端时,会读取该文件的状态信息进行对比,然后操作,再将状态信息写回到terraform.tfstate中。

代码组织

  • Terraform语言使用以.tf文件扩展名命名的配置文件。 还有一种基于JSON的语言变体,其文件扩展名为.tf.json。

  • 配置文件必须始终使用UTF-8编码,并且按照惯例,通常使用Unix样式的行尾(LF)而不是Windows样式的行尾(CRLF)进行维护,尽管两者均被接受。

  • 模块是.tf或.tf.json文件的集合,这些文件保存在一个目录中。 运行Terraform时,根模块是根据当前工作目录中的配置文件构建的,该模块可以引用其他目录中的子模块,而这些子模块又可以引用其他模块等。

  • 最简单的Terraform配置是仅包含单个.tf文件的单个根模块。 随着添加更多资源,配置可以逐渐增长,方法是在根模块中创建新的配置文件,或者将资源集组织到子模块中。


文件说明

Terraform执行时会读取工作目录中的.tf/.tfvars文件,所以可以按照不同的职责将参数放入不同的文件中。

文件名说明
provider.tfprovider配置
terraform.tfvars配置provider要用的变量
varable.tf通用变量
resource.tf资源定义
data.tf包文件定义
output.tf输出

provider

  • 在 Terraform 中负责管理资源的生命周期:创建、读取、更新、删除。比如访问 AWS 中的资源需要使用 AWS 的 provider,访问 Azure 中的资源需要使用 Azure 的 provider。

resource

  • 是基础设施的一个组件。它可能是一些低级组件,例如物理服务器、虚拟机或容器。也可以是更高级别的组件,如电子邮件提供程序、DNS记录或数据库提供程序。

配置顺序

因为Terraform的配置语言是声明性的,所以块的顺序通常并不重要。 (资源中预配器块的顺序是影响块顺序的唯一主要功能。)

Terraform根据配置中定义的资源之间的关系自动以正确的顺序处理资源,因此您可以采用对基础架构有意义的任何方式将资源组织到源文件中。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值