语法是terraform最重要的一点,有两个部分来讲解,第一部分是基础,第二部分是更加高级的扩展。
后面各种实践其实就是对terraform语法编写。
第一部分是provider插件,provider提供了资源和数据源,插件,资源,数据源都是三个比较重要的内容。
其次是变量和输出。
Terraform 配置语法
terraform配置文件都是以.tf为后缀的,python以.py结尾。java以.java结尾。所以tf都是以.tf为后缀的。
就是在当前的目录下,有多少个以.tf为后缀的文件,那么在执行terraform命令的时候就会去加载。
我们看到每个目录下的tf文件,这个目录可以称作为叫做模块,叫做module。
tf支持两种语法格式,一个是hcl,一个是json,这两者之间是有区别的,这两者是有区别的。
hcl我们每个人看起来比较醒目,一个是开发定制工具的时候json这种格式。
这里面我们使用的是hcl语法,我们这些配置文件都是通过hcl来写的。
json和它类似,只不过改为了json的格式。
terraform主要是通过provider来管理基础设施的,provider通过和云供应商提供的api交互来实现资源的发布。
这里模块就是目录,
你可以理解为这个目录就是模块,模块下面有很多terraform的配置文件,最上面一层叫做根模块。
假设要使用阿里云的资源就要使用阿里云的provider,不然terraform也不知道怎么去安装和使用它。
所以在terraform的语句块里面通过关键字required_providers语句块里面定义了所有的provider。
terraform是一个混合云的管理工具,required_providers语句块里面可以定义多个provider。aws,华为云,阿里云都可以在下面写。
里面写好源地址,和版本信息即可。
source = "aliyun/alicloud"
version = "1.189.0"
声明是让terraform知道要使用哪个provider,而接下来就需要配置provider了,调用云资源。
那就需要去控制台,就要去每个产品里面管理,这是控制台日常操作。
provider的名称你可以自定义,里面主要是ak sk rg的信息,这样就定义好了我们的provider。
这里有个问题,定义了provider,里面定义了region,比如我要操作阿里云不同的region,不同区域,它的这些资源,在这里写死了region,那么下次再调用的时候就是默认使用里面配置写死的region。
当你有多个地域的时候就涉及别名了。
也就是在配置文件里面声明了两遍provider, 都是同一个provider,唯一不同的就是配置不同。
后面资源在调用的时候使用就是provider的名称+alias就可以了。
要调用北京,那么就使用alicloud.beijing。
在资源里面有个属性provider。
provider "alicloud" {
access_key = "LTAI5tNcApxzkS5RG9e"
secret_key = "aVXPqQYyJ1u1SusXUgBDJaH"
alias = "hangzhou"
region = "cn-hangzhou"
}
provider "alicloud" {
alias = "beijing"
region = "cn-beijing"
}
这样就在配置文件里面定义了两个区域,一个北京,一个杭州,那么在我的资源里面去调用。
//vpc专有网络
resource "alicloud_vpc" "vpc" {
provider = alicloud.hangzhou
vpc_name = "tf_test_foo"
cidr_block = "172.16.0.0/12"
}
//switch交换机
resource "alicloud_vswitch" "vsw" {
provider = alicloud.hangzhou
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/21"
zone_id = "cn-hangzhou-b"
}
当你存在多个区域的时候就需要使用 provider = alicloud.hangzhou去引用。前面是provider名称,后面是别名。
在定义provider的时候,你得有个默认的provider,不然到时候会报错。
provider "alicloud" {标签:插件,terraform,region,Terraform,key,provider,tf,alicloud From: https://blog.51cto.com/u_14035463/5806200
access_key = "LTAI5tNcApxzkS53FHNHRG9e"
secret_key = "aVXPqQYyJ1u1SusXUgBo9rKfVyDJaH"
region = "cn-hangzhou"
}
provider "alicloud" {
access_key = "LTAI5tNcApxzkS53FHNHRG9e"
secret_key = "aVXPqQYyJ1u1SusXUgBo9rKfVyDJaH"
alias = "shanghai"
region = "cn-shanghai"
}
provider "alicloud" {
access_key = "LTAI5tNcApxzkS53FHNHRG9e"
secret_key = "aVXPqQYyJ1u1SusXUgBo9rKfVyDJaH"
alias = "beijing"
region = "cn-beijing"
}