一、背景介绍
Terraform使用文本文件描述基础设施和设置变量,这些文件被称为Terraform配置文件。Terraform配置文件主要有两种格式:Terraform格式(.tf)和JSON格式(.tf.json)。Terraform配置文件主要由Providers、Resources、Data Sources和Variables组成。
二、格式介绍
2.1 Providers、Resources
我们用之前博客中介绍的一个示例来做分析。
terraform {
# providers代表一个服务供应商,Terraform通过插件机制与Provider进行交互。
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
# 对docker provider进行配置说明
provider "docker" {}
# docker_image是资源类型名,nginx是创建出的资源名
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
# docker_iamge.nginx.latest为引用资源的属性
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
2.2 Variables
2.2.1 输入变量
输入变量需要用variable
块进行申明。
# image_id是变量名
# 变量名可以是任何有效标识符,关键字除外:source, version, providers, count, for_each, lifecycle, depends_on, locals.
variable "image_id" {
type = string
}
variable "availability_zone_names" {
type = list(string)
default = ["us-west-1a"]
}
variable "docker_ports" {
type = list(object({
internal = number
external = number
protocol = string
}))
default = [
{
internal = 8300
external = 8300
protocol = "tcp"
}
]
}
通过如下方式可以设置输入变量:
- 通过命令行中 -var 选项指定
- 通过变量定义文件 (.tfvars),在命令行中指定或自动加载
- 设置环境变量
在
terraform plan
和terraform apply
命令行中,通过 -var 选项可以指定变量。 其中,-var 选项可以多次使用,例如:
terraform apply -var='vpc_name=my_vpc'
terraform apply -var='vpc_name=my_vpc' -var='vpc_cidr=192.168.0.0/16'
terraform apply -var='availability_zone_names=["cn-north-1a", "cn-north-1c"]'
2.2.2 输出变量
paas
2.3 Data Sources
data source
是一类特殊的资源类型。就下面的例子而言,data
块会请求Terraform从给定数据源(aws_am_i
)读取数据并且导出到本地变量名中(example
)中,查询到相关信息后,我们也可以在其他reosurce中使用该属性,引用格式为:data.<数据类型>.<名称>.<属性>。
data "aws_ami" "example" {
most_recent = true
owners = ["self"]
tags = {
Name = "app-server"
Tested = "true"
}
}
三、参考文献
- TERRAFORM TUTORIAL - TERRAFORM FORMAT(TF), INTERPOLATION(VARIABLES) & TERRAFORM CONSOLE
- Terraform 基础知识
- Terraform variables