Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,你可以用 HCL 語法建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立組態檔之後,您會建立一個 執行計劃 ,讓您在部署基礎結構變更之前先預覽這些變更。 驗證變更之後,您可以套用執行計畫來部署基礎結構。
使用 azapi_data_plane_resource 來管理 Terraform 中的Azure資料平面資源。 在這個範例中,你設定 Azure Key Vault 的憑證聯絡人。
關於資料平面框架 parent_id 運作與模式的基礎概念,請參見 「了解 AzAPI 資料平面框架」。
- 使用 AzureRM 提供程式建立 金鑰保存庫
- 使用
azapi_data_plane_resource來設定憑證聯絡人
先決條件
- Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
設定 Terraform:如果您尚未這麼做,請使用下列其中一個選項來設定 Terraform:
當您使用Microsoft帳戶登入 Azure 入口網站時,會使用該帳戶的預設 Azure 訂用帳戶。
Terraform 會自動使用預設 Azure 訂用帳戶中的資訊進行驗證。
執行 az account show 以確認目前的Microsoft帳戶和 Azure 訂用帳戶。
az account show
您透過 Terraform 所做的任何變更都會顯示在顯示的 Azure 訂用帳戶上。 如果是您想要的,請略過本文的其餘部分。
實作 Terraform 程式碼
建立目錄,然後在目錄中測試範例 Terraform 程式碼,並將其設為目前的目錄。
建立名為
providers.tf的檔案,並插入下列程式碼:terraform { required_providers { azapi = { source = "Azure/azapi" version = "~> 2.0" } azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features { key_vault { purge_soft_delete_on_destroy = true recover_soft_deleted_key_vaults = true } } } provider "azapi" {}建立名為
variables.tf的檔案,並插入下列程式碼:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random value to create a unique name." }建立名為
main.tf的檔案,並插入下列程式碼:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "random_string" "kv_suffix" { length = 6 upper = false special = false } resource "azurerm_resource_group" "example" { location = var.resource_group_location name = random_pet.rg_name.id } data "azurerm_client_config" "current" {} resource "azurerm_key_vault" "example" { name = "kv-${random_string.kv_suffix.result}" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "standard" access_policy { tenant_id = data.azurerm_client_config.current.tenant_id object_id = data.azurerm_client_config.current.object_id certificate_permissions = [ "ManageContacts", ] } } resource "azapi_data_plane_resource" "certificate_contacts" { type = "Microsoft.KeyVault/vaults/certificates/contacts@7.3" parent_id = trimsuffix(trimprefix(azurerm_key_vault.example.vault_uri, "https://"), "/") name = "default" body = { contacts = [ { emailAddress = "admin@contoso.com" name = "Admin Contact" phone = "555-555-0100" }, { emailAddress = "ops@contoso.com" name = "Operations" } ] } }關於
azapi_data_plane_resource的重點如下:- 欄位
type使用資料平面 API 的格式<resource-type>@<api-version>。 - 是
parent_id資料平面端點的主機名稱(不含https://前綴),而非 ARM 資源 ID。 - 欄位
name用來識別父資源中的特定資源。 對於「金鑰保存庫」憑證聯絡人,值總是default。
- 欄位
建立名為
outputs.tf的檔案,並插入下列程式碼:output "resource_group_name" { value = azurerm_resource_group.example.name } output "key_vault_name" { value = azurerm_key_vault.example.name } output "certificate_contacts" { value = azapi_data_plane_resource.certificate_contacts.output }
執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。
terraform init -upgrade
關鍵點:
- 參數
-upgrade會將必要的提供者插件升級到符合配置版本限制的最新版本。
執行 terraform plan 以建立執行計畫。
terraform plan -out main.tfplan
關鍵點:
-
terraform plan命令會建立執行計劃,但不會執行它。 相反地,系統會決定需要執行哪些動作,來創建您在設定檔中指定的設定。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。 - 選用的
-out參數可讓您指定計畫的輸出檔。 使用該-out參數可確保您檢視的計畫與實際應用的方案完全相同。
執行terraform apply指令將執行計劃套用至您的雲端基礎設施。
terraform apply main.tfplan
關鍵點:
- 範例
terraform apply命令假設您之前已執行過terraform plan -out main.tfplan。 - 如果您為
-out參數指定了不同的檔案名,請在呼叫terraform apply時使用相同的檔案名。 - 如果你沒有使用
-out參數,則呼叫terraform apply時請不要使用任何參數。
驗證結果
執行 az keyvault 憑證聯絡人清單 以取得憑證聯絡人。
az keyvault certificate contact list --vault-name <key_vault_name>
清理資源
當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:
執行 terraform plan 並指定
destroy旗標。terraform plan -destroy -out main.destroy.tfplan關鍵點:
-
terraform plan命令會建立執行計劃,但不會執行它。 相反地,系統會決定需要執行哪些動作,來創建您在設定檔中指定的設定。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。 - 選用的
-out參數可讓您指定計畫的輸出檔。 使用該-out參數可確保您檢視的計畫與實際應用的方案完全相同。
-
執行 terraform apply 來應用執行計劃。
terraform apply main.destroy.tfplan
針對 Azure 上的 Terraform 進行故障排除
針對在 Azure 上使用 Terraform 時的常見問題進行疑難解答