天天看點

Terraform 文法 provider插件

Terraform 文法 provider插件

文法是terraform最重要的一點,有兩個部分來講解,第一部分是基礎,第二部分是更加進階的擴充。

後面各種實踐其實就是對terraform文法編寫。

第一部分是provider插件,provider提供了資源和資料源,插件,資源,資料源都是三個比較重要的内容。

其次是變量和輸出。

Terraform 配置文法

Terraform 文法 provider插件

terraform配置檔案都是以.tf為字尾的,python以.py結尾。java以.java結尾。是以tf都是以.tf為字尾的。

就是在目前的目錄下,有多少個以.tf為字尾的檔案,那麼在執行terraform指令的時候就會去加載。

我們看到每個目錄下的tf檔案,這個目錄可以稱作為叫做子產品,叫做module。

tf支援兩種文法格式,一個是hcl,一個是json,這兩者之間是有差別的,這兩者是有差別的。

hcl我們每個人看起來比較醒目,一個是開發定制工具的時候json這種格式。

這裡面我們使用的是hcl文法,我們這些配置檔案都是通過hcl來寫的。

json和它類似,隻不過改為了json的格式。

Terraform 文法 provider插件
Terraform 文法 provider插件

terraform主要是通過provider來管理基礎設施的,provider通過和雲供應商提供的api互動來實作資源的釋出。

Terraform 文法 provider插件

這裡子產品就是目錄,

Terraform 文法 provider插件

你可以了解為這個目錄就是子產品,子產品下面有很多terraform的配置檔案,最上面一層叫做根子產品。

假設要使用阿裡雲的資源就要使用阿裡雲的provider,不然terraform也不知道怎麼去安裝和使用它。

是以在terraform的語句塊裡面通過關鍵字required_providers語句塊裡面定義了所有的provider。

terraform是一個混合雲的管理工具,required_providers語句塊裡面可以定義多個provider。aws,華為雲,阿裡雲都可以在下面寫。

裡面寫好源位址,和版本資訊即可。

source = "aliyun/alicloud"
      version = "1.189.0"      

聲明是讓terraform知道要使用哪個provider,而接下來就需要配置provider了,調用雲資源。 

那就需要去控制台,就要去每個産品裡面管理,這是控制台日常操作。

Terraform 文法 provider插件

provider的名稱你可以自定義,裡面主要是ak sk rg的資訊,這樣就定義好了我們的provider。

這裡有個問題,定義了provider,裡面定義了region,比如我要操作阿裡雲不同的region,不同區域,它的這些資源,在這裡寫死了region,那麼下次再調用的時候就是預設使用裡面配置寫死的region。

當你有多個地域的時候就涉及别名了。

Terraform 文法 provider插件

也就是在配置檔案裡面聲明了兩遍provider, 都是同一個provider,唯一不同的就是配置不同。

後面資源在調用的時候使用就是provider的名稱+alias就可以了。

要調用北京,那麼就使用alicloud.beijing。

Terraform 文法 provider插件

在資源裡面有個屬性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" {
  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"
}