前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Terraform语法入门

Terraform语法入门

原创
作者头像
oliverpei
修改2020-04-17 18:24:48
8.2K1
修改2020-04-17 18:24:48
举报
文章被收录于专栏:资源编排资源编排

HCL是Terraform的配置语言,它是HashiCorp发明的一种声明式语言,能够以更加简短和人性化的方式来描述资源。本文主要介绍HCL配置语言的基本语法及使用,语法采用当前最新版本0.12。

基本组成

HCL文件以.tf结尾,Terraform执行时会读取该目录下所有的HCL文件。由于HCL是声明式语言,因此对资源和变量的引用不依赖于定义的顺序。通常tf文件包含provider,resource和data source,例如下面的代码创建一个cvm实例:

代码语言:txt
复制
provider "tencentcloud" {                                                                                                                                                      
    secret_id  = "xxxxxxxxxxxxx"
    secret_key = "xxxxxxxxxxxxx"
    region     = "ap-guangzhou"
}

data "tencentcloud_image" "my_favorate_image" {
  os_name = "centos"

  filter {
    name   = "image-type"
    values = ["PUBLIC_IMAGE"]
  }
}

resource "tencentcloud_instance" "my_awesome_app" {
  instance_name              = "test"
  availability_zone          = "ap-guangzhou-3"
  image_id                   = data.tencentcloud_image.my_favorate_image.image_id
  instance_type              = "S3.SMALL1"
  system_disk_type           = "CLOUD_PREMIUM"
  system_disk_size           = 50
  hostname                   = "user"
  project_id                 = 0
  internet_max_bandwidth_out = 1
  allocate_public_ip         = true
}
  • provider对应一个云厂商的基础设施,它提供了云厂商对应的resource和data source。使用provider需要设置对应的密钥、地区等,这些参数名称可以在各个云厂商的插件文档中找到,比如腾讯云的文档在这里。执行terraform init时会根据provider来下载需要使用的插件,默认会从terraform官方仓库下载最新版本的插件,也可以在provider中使用version来指定版本。
  • resource是Teraform中最重要的组成元素,每个resource块代表一个或多个云产品实例,比如多个CVM实例或者多个VPC实例。resource的定义可以参考这篇文章
  • data source用来查询一些信息给其他的resource配置使用,比如上面通过data source查询centos的共有镜像的ID,然后cvm实例中引用它。

类型

基本类型

  • string:字符串类型,由一个或多个Unicode字符组成,例如"hello"。
  • number: 数字类型,可以表示整数,也可以表示浮点数。
  • bool:布尔类型,只能是truefalse

数字类型和布尔类型在配置中都可以自动转换为字符串类型,相反,只要字符串值能代表有效的数字或布尔类型,都可以自动转换。比如true可以转换为字符串"true""true"也可以转换为true

复杂类型

  • list:列表类型,它的所有元素类型必须是相同类型,下标从0开始。当tf文件中表示对象的列表时写法为
代码语言:txt
复制
data_disks {
    data_disk_type = "CLOUD_SSD"
    data_disk_size = 100
}

data_disks {
    data_disk_type = "CLOUD_SSD"
    data_disk_size = 100
}
  • map: 包含多个key: value形式。在tf文件中的写法为
代码语言:txt
复制
tags = {
    test = "test1"
}

特殊类型

  • null:表示空,如果将一个参数设置为null,表示这个参数未填写,Terraform会完全忽略这个参数。null在条件表达式中比较有用,比如当var.test的值为""忽略该字段可以这样写name = var.test == "" ? null : var.test

变量引用

Terraform中resource和data source之间通常会引用属性值,引用方式如下:

  • 引用resource属性:可以使用<RESOURCE TYPE>.<NAME>.<ARGUEMENT>引用resource属性,比如引用上面示例中cvm的id,tencentcloud_instance.my_awesome_app.id
  • 引用data source属性:可以使用data.<DATA TYPE>.<NAME>引用data source属性,比如引用上面实例中镜像的id, data.tencentcloud_image.my_favorate_image.image_id
  • 当创建多个实例时,resource中的count不为1,可以使用count.index引用实例的索引
  • 引用对象列表的所有的name可以使用tencentcloud_instance.my_awesome_app.data_disks[*].data_size表示cvm的所有data_disks的data_size所组成的列表

表达式

运算符

terraform支持的运算符包括:

  • 算术运算符: +, -, *, /, %, -a
  • 比较运算符: ==, !=, < , <=, >, >=
  • 逻辑运算符: ||, &&, !a

条件表达式

terraform支持条件表达式,表示如果条件为真,结果时true_val, 否则结果为false_val。

代码语言:txt
复制
condition ? true_val : false_val

总结

以上就是terraform的基本使用语法,更多使用例子可以参考这里

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本组成
  • 类型
    • 基本类型
      • 复杂类型
      • 特殊类型
      • 变量引用
      • 表达式
        • 运算符
          • 条件表达式
          • 总结
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档