Terraform文件类型通常以 .tf 或 .tf.json 结尾,文件中由 provider,resource,data source 和 variable 组成。
每个 Provider 代表一个服务提供商,Terraform 依赖云服务商 Provider 进行云资源管理交互。Provider 通过关键字 provider 进行声明,Provider 的配置参数请参考 这里 。
执行 terraform init 命令时会下载使用的插件,默认将从 Terraform 官方仓库下载最新版本的插件。
对于 Terraform 0.13 之后的版本,可以使用 "required_providers" 指定 Provider的 registry 源和版本。
每个 Terraform 模块必须声明其所需的提供程序,以便 Terraform 能够安装和使用它们。提供程序要求在 required_providers 代码块中声明。
Provider 的声明要求包括 source 和 version 和 local name(下方举例 ctyun):
terraform {
required_version = ">= 0.10"
required_providers {
ctyun = {
source = "ctyun-it/ctyun"
version = "1.2.0"
}
}
}required_version 用于指定哪个版本的Terraform CLI 运行配置,当前支持Terraform 1.0.0 - 1.5.7。
required_providers 声明块中包含一个或多个provider声明。每个声明指定一个 source 和 version。
required_providers 都支持以下参数:
| 关键字 | 描述 | 类型 | 是否必填 |
|---|---|---|---|
| source | provider的全局源地址 | string | 是 |
| version | 可用版本号,版本约束规则可参考 这里 | string | 是 |
多Provider定义
在 required_providers 声明后,可以使用 provider 块进一步声明provider配置。
provider "ctyun" {
region_id = "200000001852"
az_name = "cn-huabei2-tj1A-public-ctcloud"
}上述代码块的主体({和之间})包含天翼云的provider的配置参数。在本例中 region_id 和 az_name 都是由 ctyun 的provider的定义的。除了provider中提供的参数外,还有两个由 Terraform 本身定义且适用于所有 provider 块的“元参数”:
alias :多provider配置字段
version:已弃用,被 required_providers 中 version 取代
利用alias参数可以支持云平台的多个region,用于提供多资源池,多场景高可用的需求。可以通过创建多个provider声明块实现。对于每个额外的非默认配置,请使用alias元参数提供额外的名称段。例如:
# 默认provider配置;以 `ctyun_` 开头的资源将使用
# 它作为默认值,并且可以将其引用为 `ctyun`。
provider "ctyun" {
region_id = "200000002368"
az_name = "cn-xinan1-xn1A-public-ctcloud"
}
# 华北2的provider配置;资源可以将其引用为 `ctyun.huabei2`。
provider "ctyun" {
alias = "huabei2"
region_id = "200000001852"
az_name = "cn-huabei2-tj1A-public-ctcloud"
}上述示例中声明了西南1和华北2资源池的provider,并对华北2资源池增加了别名,在资源中使用元参数 provider 来选择非默认的 provider块,其格式为:<ctyun>.<alias>
# 创建vpc,指定vpc创建在华北2资源池
resource "ctyun_vpc" "vpc_test" {
provider = ctyun.huabei2
name = "tf-vpc"
cidr = "192.168.0.0/16"
description = "terraform测试使用"
enable_ipv6 = true
}当然,天翼云支持在某个资源声明中直接指定region和可用区(az)信息,相比 alias + provider 的方式,这种方式更加灵活简单。
provider "ctyun" {
region_id = "200000002368"
az_name = "cn-xinan1-xn1A-public-ctcloud"
}
# 创建vpc,指定vpc创建在华北2资源池
resource "ctyun_vpc" "vpc_test" {
region_id = "200000001852"
name = "tf-vpc"
cidr = "192.168.0.0/16"
description = "terraform测试使用"
enable_ipv6 = true
}