什麼是資源
在 Terraform 領域,資源是基礎設施元素,例如 ECS 執行個體和 OSS Bucket,這些元素可以通過 Terraform 代碼進行配置。現實世界中的基礎設施包含多種資源和資源類型,Terraform 使用每個阿里雲服務的 API 來部署你的資源,包括ECS 執行個體、ECS 執行個體部署模板、安全性群組、VPC 網路、防火牆規則、VPN、路由表、資料庫和負載平衡器等。
資源聲明的文法
資源在 .tf 檔案中定義,建議將相似類型的資源放在一個目錄中,並在 main.tf 檔案中定義資源。
在這個樣本中,main.tf 是根設定檔:
resource
resource 塊用於聲明單個基礎設施對象
resource_type
resource_type 標識要建立的資源類型,每個資源類型取決於在 Terraform provider 塊中聲明的供應商,供應商是提供一組資源類型的外掛程式
resource_name
resource_name 是對資源類型在當前配置目錄下的標識,並不是實際基礎設施的名稱,同一個資源類型在目前的目錄下的所有配置中,resource_name 不能重複
資源參數
資源參數使用運算式來聲明資源的屬性。一些資源參數是資源建立時的必填參數,其他的為選擇性參數。屬性可以用於定義與資源相關的任何進階功能。
在同一個 Terraform 設定檔中包含多個相同或不同類型的資源,這些資源甚至可以跨多個供應商。
這裡,第一個 resource 塊聲明了 VPC 網路,另一個聲明了交換器。兩個資源都在同一個 main.tf 檔案中。這個例子展示了一個名為 main-vpc 的 VPC 資源,其類型是 alicloud_vpc;一個名為 main-vswitch 的交換器資源,其類型時 alicloud_vswitch。
alicloud_vpc 塊所有參數是可選的,其中 cidr_block 可選的原因是其存在一個預設值,即當在設定檔中不顯示定義時,供應商或者 VPC 服務後端將會預設產生一個值作為這個參數的值。
對於 alicloud_vswitch 塊,vpc_id,cidr_block,zone_id 都是必填參數,其他的都是選擇性參數。
需要注意的是,資源參數取決於資源類型,即不同的資源類型對應的資源參數相差很大。alicloud_vpc 包括如 vpc_name,cidr_blcok 等參數,而 alicloud_vswitch 包括 vswitch_name,cidr_block,zone_id,vpc_id 等參數。
屬性參數引用
當從一個資源塊訪問另一個資源屬性時,使用格式:<resource_type>.<resource_name>.<attribute>。
在上述例子中,當建立交換器時,vswitch 需要所屬 VPC 網路的網路識別碼。網路識別碼 是 alicloud_vpc 塊的計算資源屬性,即在 VPC 建立時由服務端產生。alicloud_vswitch 資源塊使用從 alicloud_vpc 塊建立的網路識別碼,對應的使用格式是:alicloud_vpc.main_vpc.id。
需要注意的是,這種方法只有當相關的資源定義在同一根配置目錄的檔案中時才能使用。
資源定義考慮事項
在定義資源塊時,有一些重要的因素需要考慮:
resource_name 必須唯一
聲明的資源通過其類型和名稱在當前配置目錄中進行標識,因此,資源名稱(resource_name)在所屬的配置目錄中必須是唯一的。
resource_type 不能自訂
資源類型是與供應商關聯的關鍵字,不能由使用者自訂。一個 OSS Bucket 與阿里雲 Provider 相關聯,並由關鍵字 alicloud_oss_bucket 進行定義,任何其他 OSS Bucket 的定義在運行 terraform plan 或 terraform apply 時都會導致錯誤。
所有配置參數必須包含在資源塊體內,即大括弧之間
基礎設施元素及其相關屬性在資源塊中定義。
執行Terraform命令時會出現如下提示:

所有必填參數必須設定
如果配置中未定義所有必需參數,Terraform 配置將無法成功執行 plan 和 apply。
執行Terraform命令時,會出現如下提示:
