《Terraform 101 從入門到實踐》這本小冊在南瓜慢說官方網站和GitHub兩個地方同步更新,書中的示例代碼也是放在GitHub上,方便大家參考查看,
不怕出身低,行行出狀元,
插件
Terraform可以對多種平臺的多種資源進行管理,這個是通過插件來實作的,
這里的插件,在Terraform的世界也叫Providers,也是一個個可執行檔案,不同的插件完成不同的功能,對接AWS,就要使用AWS的插件;對接GCP,就要用GCP的插件,
當我們通過terraform init初始化一個專案時,Terraform就會根據配置幫我們下載插件,在我們執行apply的時候,就會呼叫這些插件實作對應的資源管理,
我們可以到官方倉庫( https://registry.terraform.io/browse/providers )去搜有什么插件可用,這里有極其豐富的插件,也有詳細的使用說明:

接下來,我們就插件探討幾個問題:
- 怎么指定下載哪些插件和版本號?
- 從哪里下載?
- 下載到什么地方?
- 沒有對插件庫有訪問權限的環境下怎么處理?
- 是否每個專案都要下載相同的插件?
指定下載哪些插件和版本
Terraform是通過決議required_providers知道需要哪些插件,一般習慣是定義一個verion.tf檔案,把相關配置都放在這個檔案里,比如:
terraform {
required_version = "= v1.0.11"
required_providers {
local = {
source = "hashicorp/local"
version = "= 2.1.0"
}
random = {
source = "hashicorp/random"
version = "3.1.0"
}
}
}
這個檔案定義了Terraform核心組件的版本,還定義了local和random插件及其版本號,上面指定Terraform版本為1.0.11,local版本為2.1.0,random版本為3.1.0,
我們看這里的版本號有兩個等于=號,會不會覺得奇怪?其實這是HCL語言的一個特性,除了=號,還可以是>、<=等,這樣可以指定版本范圍,而不只是某個特定版本,
從哪里下載
可以通過命令terraform providers查看當前專案配置的插件是從哪里下載的,如下:
$ terraform providers
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.terraform.io/hashicorp/local] 2.1.0
默認是從官方的公共倉庫registry.terraform.io下載的,
如果需要指定其它倉庫,代碼如下:
terraform {
required_version = "= v1.0.11"
required_providers {
local = {
source = "hashicorp/local"
version = "= 2.1.0"
}
random = {
source = "hashicorp/random"
version = "3.1.0"
}
pkslowcloud = {
source = "registry.pkslow.com/examplecorp/pkslowcloud"
version = "0.1.0"
}
}
}
這里pkslowcloud就是使用自定義的倉庫地址,執行providers命令如下:
$ terraform providers
Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/local] 2.1.0
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.pkslow.com/examplecorp/pkslowcloud] 0.1.0
注意:pkslowcloud實際不存在,大家不必嘗試下載使用,
下載到什么地方
執行terraform init進行初始化,就會下載插件:
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/random versions matching "3.1.0"...
- Finding hashicorp/local versions matching "2.1.0"...
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
- Installing hashicorp/local v2.1.0...
- Installed hashicorp/local v2.1.0 (signed by HashiCorp)
執行完init命令后,當前作業目錄就會有一個.terraform檔案夾,這里就放了插件的程式,目錄結構如下:
$ tree -a
.
├── .terraform
│ └── providers
│ └── registry.terraform.io
│ └── hashicorp
│ ├── local
│ │ └── 2.1.0
│ │ └── darwin_amd64
│ │ └── terraform-provider-local_v2.1.0_x5
│ └── random
│ └── 3.1.0
│ └── darwin_amd64
│ └── terraform-provider-random_v3.1.0_x5
沒有網路環境怎么辦
在有些情況下,并不能直接訪問Terraform的公共倉庫去下載插件,如果可以從其它地方復制一份插件,并可以使用,那豈不是美哉?Terraform已經考慮了這種需求,
首先它支持有網路環境的機器把當前目錄的插件復制到特定目錄,命令如下:
$ terraform providers mirror /Users/larry/Software/terraform/plugins
- Mirroring hashicorp/local...
- Selected v2.1.0 to meet constraints 2.1.0
- Downloading package for darwin_amd64...
- Package authenticated: signed by HashiCorp
- Mirroring hashicorp/random...
- Selected v3.1.0 to meet constraints 3.1.0
- Downloading package for darwin_amd64...
- Package authenticated: signed by HashiCorp
查看一下目錄結構,Terraform會打包好插件為zip檔案:
$ tree -a /Users/larry/Software/terraform/plugins
/Users/larry/Software/terraform/plugins-localdisk
└── registry.terraform.io
└── hashicorp
├── local
│ ├── 2.1.0.json
│ ├── index.json
│ └── terraform-provider-local_2.1.0_darwin_amd64.zip
└── random
├── 3.1.0.json
├── index.json
└── terraform-provider-random_3.1.0_darwin_amd64.zip
下次我們可以指定插件目錄實作復用:
$ terraform init -plugin-dir=/Users/larry/Software/terraform/plugins
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/random from the dependency lock file
- Reusing previous version of hashicorp/local from the dependency lock file
- Using previously-installed hashicorp/random v3.1.0
- Using previously-installed hashicorp/local v2.1.0
看日志可以看到,Terraform不再下載,而是重用插件,
執行完命令init后,再查看terraform version,則會顯示插件的版本:
$ terraform version
Terraform v1.0.11
on darwin_amd64
+ provider registry.terraform.io/hashicorp/local v2.1.0
+ provider registry.terraform.io/hashicorp/random v3.1.0
Terraform對于這種插件目錄重用的支持,不只是zip包,二進制也是支持的,但對應的目錄結果有點不一樣,這里不展開介紹了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543400.html
標籤:其他
