建立 Terraform 範本
瞭解如何建立結構良好、可重複使用的綜合性 Terraform 範本。
Terraform 範本由一個以上 Terraform 配置檔組成,用於宣告要為 IBM Cloud® 資源達到的狀態。 若要成功使用資源,您 必須將 IBM 設定為雲端提供者,並將資源新增至 Terraform 配置檔案。 (選用)可以使用輸入變數來自訂資源。
您可以使用 HashiCorp Configuration Language (HCL) 或 JSON 格式寫入 Terraform 設定檔。
在開始建立 Terraform 模版之前,請務必檢閱 IBM Cloud Schematics 的限制。
配置 provider
區塊
在 Terraform 配置檔的 provider
區塊中指定要使用的雲端提供者。 provider
區塊包含 IBM Cloud® Provider for Terraform 外掛程式佈建資源所需的所有輸入變數。
IBM Cloud API 金鑰
IBM Cloud API 金鑰對於向 IBM Cloud 平台進行鑑別至關重要。 此外,Schematics 還需要 IAM 記號及 IAM 重新整理記號,才能使用資源的 API,以及判定已授與您的許可權。 當您使用原生 Terraform 時,一律必須提供 IBM Cloud API 金鑰。 在 Schematics中,會針對所有已啟用 IAM 的資源 (包括 IBM Cloud Kubernetes Service 叢集及 VPC 基礎架構資源) 擷取 IAM 記號。 不過,不會擷取標準基礎架構資源的
IAM 記號,且必須在 provider
區塊中提供 API 金鑰。
不同的 IBM Cloud provider
區塊中的 API 金鑰
如果您要使用的 API 金鑰不同於與 IBM Cloud 帳戶相關聯的 API 金鑰,則您可以在 provider
區塊中提供此 API 金鑰。 如果在 provider
區塊中配置 API 金鑰,則此金鑰的優先順序高於 IBM Cloud 中所儲存的 API 金鑰。
IBM Cloud 服務 ID 的 API 金鑰
您可以針對所有已啟用 IAM 的服務(包括 VPC 基礎架構資源)提供服務 ID 的 API 金鑰。 您無法對傳統基礎結構資源使用服務 ID。
遵循指示來配置 provider
區塊。
-
選擇要如何配置
provider
區塊。- 選項 1 建立獨立的
provider.tf
檔案。 Terraform 和 IBM Cloud Schematics 會載入此檔中的資訊,並應用於存在於同一 GitHub 目錄或磁帶存檔文件.tar
中的所有 Terraform 配置文件。 如果將基礎架構程式碼分割成多個檔案,則此方法很有用。 - 選項 2 在您的 Terraform 配置檔案中加入
provider
區塊。 如果您希望在一個 Terraform 配置檔中指定提供者以及變量和資源,可以選擇此選項。
- 選項 1 建立獨立的
-
檢閱 您必須在
provider
區塊中提供才能使用資源的認證及資訊。Schematics 會自動擷取您的 IBM Cloud API 金鑰,以便您不需要在provider
區塊中指定此資訊。 -
建立
provider.tf
檔案或將下列程式碼新增到 Terraform 配置檔。 如需您可以在provider
區塊中設定之受支援參數的完整清單,請參閱 IBM Cloud 提供者參照。VPC 基礎結構資源範例
provider "ibm" { generation = 1 region = "<region_name>" }
經典基礎結構資源範例
variable "iaas_classic_username" { type = "string" } variable "iaas_classic_api_key" { type = "string" } provider "ibm" { region = "<region_name>" iaas_classic_username = var.iaas_classic_username iaas_classic_api_key = var.iaas_classic_api_key }
所有 IBM Cloud Kubernetes Service 資源的範例
provider "ibm" { }
所有其他資源的範例
provider "ibm" { region = "<region_name>" }
將雲端資源加入 resource
區塊
使用 resource
區塊定義要使用 IBM Cloud Schematics 管理的雲端資源。
為了支援多雲端方法,Terraform 與多個雲端提供者合作。 雲端提供者負責瞭解您可以佈建的資源、其 API,以及在雲端公開這些資源的方法。 為了向使用者提供這些知識,每個受支援的雲供應商都必須提供 Terraform 的命令列外掛程式,讓使用者可以使用這些外掛程式來處理資源。 若要尋找您可以在 IBM Cloud中佈建的資源概觀,請參閱 IBM Cloud Provider Plug-in for Terraform 參照。
配置 VPC 的基礎架構程式碼範例
resource ibm_is_vpc "vpc" {
name = "myvpc"
}
在其他資源區塊中參照資源
檢閱在 Terraform 配置檔的其他資源區塊中參照現有資源時可使用的選項。
IBM Cloud Provider 外掛程式參照包含兩種類型的物件:資料來源和資源。 可以使用這兩種物件來參照其他資源區塊中的資源。
-
資源:若要建立資源,請使用 IBM Cloud Provider 外掛程式參照中的資源定義。 資源定義包括配置雲端資源的語法和屬性引用,其中顯示您可以在其他資源區塊中引用為輸入參數的屬性。 例如,建立 VPC 後,VPC 的 ID 將可用。 為 VPC 建立子網路時,可以將此 ID 用作輸入參數。 如果在一個 Terraform 配置檔中結合使用多個資源,請使用此選項。
基礎架構程式碼範例
resource ibm_is_vpc "vpc" { name = "myvpc" } resource ibm_is_security_group "sg1" { name = "mysecuritygroup" vpc = ibm_is_vpc.vpc.id }
-
資料來源:您也可以使用 IBM Cloud Provider 外掛程式參考中的資料來源,擷取現有雲端資源的相關資訊。 請檢閱 IBM Cloud Provider 外掛程式參照中的引數參照區段,以瞭解必須提供哪些輸入參數來擷取現有資源。 然後,檢閱屬性參照區段,以尋找可用參數以及可以在
resource
區塊中參照的參數的概觀。 如果要存取在其他 Terraform 配置檔中配置的資源的詳細資料,請使用此選項。基礎架構程式碼範例
data ibm_is_image "ubuntu" { name = "ubuntu-18.04-amd64" } resource ibm_is_instance "vsi1" { name = "$mysi" vpc = ibm_is_vpc.vpc.id zone = "us-south1" keys = [data.ibm_is_ssh_key.ssh_key_id.id] image = data.ibm_is_image.ubuntu.id profile = "cc1-2x4" primary_network_interface { subnet = ibm_is_subnet.subnet1.id security_groups = [ibm_is_security_group.sg1.id] } }
管理其他帳戶中的資源
您可以使用 IBM Cloud 來源帳戶中的工作區來執行 Terraform 工作,以在目標帳戶中建立資源。 若要在目標帳戶中佈建資源,必須提供目標帳戶的身分及存取權。 這可能是使用具有目標帳戶許可權之使用者的身分。 或使用 API 金鑰對目標帳戶進行鑑別及適當的跨帳戶授權的服務 ID。
透過使用者介面執行工作而不傳遞 API 金鑰時,會採用已登入使用者的身分來執行作業。
使用 variable
區塊來自訂資源
您可以使用 variable
區塊為您的基礎架構程式碼建立範本。 例如,不要為您要在多個資料中心部署的資源建立多個 Terraform 配置檔。 您只需搭配輸入變數來重複使用相同的配置,即可定義資料中心。
儲存變數
您可以決定是在指定要佈建的資源的同一個 Terraform 配置檔中宣告變數,還是建立包含所有變數宣告的個別 variables.tf
檔案。 建立工作區時,IBM Cloud Schematics 會自動剖析整個 Terraform 配置檔以尋找變數宣告。
宣告變數
當您宣告輸入變數時,必須根據 Terraform 版本提供變數及資料類型的名稱。 您可以選擇性地提供變數的預設值。 當輸入變數匯入至 Schematics 並指定預設值時,您可以選擇改寫預設值。 \n IBM Cloud Schematics 接受值作為初始類型的字串,例如複式變數的 bool
、 number
、 string
及 HCL
格式。
Terraform v1.5
支援 字串、清單、對映、bool
、數字及複式資料類型,例如清單 (類型)、對映 (類型)、物件 ({attribute name=type,.})、集 (類型)、值組 ([type])。
限制輸入變數
是。 如果您在 Terraform 配置檔中定義輸入變數,則請注意為這些變數所輸入的值最多可以為 2049 個字元。 如果輸入變數所需的值超出此限制,則會在 2049 個字元之後截斷值。
沒有預設值的變數宣告範例
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
}
具有預設值的變數宣告範例
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
default = "dal10"
}
參照變數
您可以使用 "${var.<variable_name>}"
句法,在 Terraform 配置文件的其他區塊中引用變量值。
引用 datacenter
變數的範例
resource ibm_container_cluster "test_cluster" {
name = "test"
datacenter = var.datacenter
}
針對宣告的變數提供值給 IBM Cloud Schematics
您可以在建立工作區之後提供值,以供 IBM Cloud Schematics 在 Terraform 動作上使用,以用於範本中宣告的變數。
-
對於
UI
,您可以在 IBM Cloud > Schematics > 工作區> 設定頁面上提供值。value
欄位是.tfvars
檔案中提供的HCL
格式值。 -
對於
CLI
,您可以查看 複式資料類型 的建立或更新值。 然後,value
欄位必須包含變數儲存庫的跳出字串,如範例所示。 -
對於
API
,您可以在template_data
>variablestore
欄位中看到 建立或更新值。value
欄位是.tfvars
檔案中提供的HCL
格式值。 對於任何類型的變數,它一律是 JSON 字串。範例
"variablestore": [ { "value": "[\n {\n internal = 800\n external = 83009\n protocol = \"tcp\"\n }\n ]", "description": "", "name": "docker_ports", "type": "list(object({\n internal = number\n external = number\n protocol = string\n }))" }, { "name": "worker_pool_labels", "type": "map(string)", "value": "{\n \"label-name1\": \"label-value1\",\n \"label-name2\": \"label-value2\"\n}" }, { "name": "docker_ports", "type": "list(object({\n internal = number\n external = number\n protocol = string\n }))", "value": "[\n {\n internal = 800\n external = 83009\n protocol = \"tcp\"\n }\n ]", "description": "" } ]
我可以查看如何在檔案中宣告複式變數嗎?
是,當您宣告並指派值給變數時,您可以在使用者介面中檢視工具提示。 此表格提供一些可在變數儲存庫中宣告的複式資料類型範例。
類型 | 範例 |
---|---|
number |
4.56 |
string |
範例值 |
bool |
False |
map(string) |
{key1 = "value1", key2 = "value2"} |
set(string) |
["hello"、"hello"] |
map(number) |
{internal = 8080, external = 2020} |
list(string) |
["us-south","eu-gb"] |
list |
["value",30] |
list(list(string)) |
請參閱 字串範例清單。 |
list(object({internal = number external = number protocol = string})) |
請參閱 物件範例清單。 |
字串清單的範例
[
"test", "env:prod", "env:agent:test"
]
物件清單範例
[
{
internal = 8300
external = 8300
protocol = "tcp"
},
{
internal = 8301
external = 8301
protocol = "ldp"
}
]
儲存 Terraform 範本
Terraform 配置檔包含必須將其視為正規程式碼的基礎架構程式碼。 為了支援協作、原始碼和版本控制,請將檔案儲存於 GitHub 或 GitLab 儲存庫。 使用版本控制,可以回復為先前的版本,對變更進行審核以及與多個團隊共用程式碼。 如果您不想將文件儲存在GitHub,透過上傳提供您的模板 磁帶存檔檔案或 .tar
從您的本機電腦改為。 如果您想要複製,請參閱 容許及封鎖的副檔名,以進行複製。
GitHub 儲存庫中 Terraform 範本的目錄結構列在具有最新更新時間的表格中。
檔案 | 說明 |
---|---|
README.md | 建立 README.md |
main.tf |
建立 main.tf |
output.tf |
建立 output.tf |
provider.tf |
建立 provider.tf |
variables.tf |
建立 variables.tf |
Terraform 解決方案範例
各種解決方案展示了IBM Cloud® Schematics和IBM Cloud®服務一起使用時的強度。 這些解決方案使用簡單的 Terraform 範本或模組來設定基礎架構。 儘管每個解決方案都是透過特定使用個案的角度來呈現,但這些基礎架構在各行各業都很典型。
透過IBM Cloud Schematics使用已發佈的 Terraform 解決方案範本 來建立您的基礎架構、管理資源並使用強大的工具來保護、管理和監控您的工作區和操作。