使用 Terraform 建立 Azure 受控 Lustre 文件系統
在本文中,您會使用 Terraform 建立 Azure 受控 Lustre 文件系統。
Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,您可以使用 HCL 語法來建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立設定檔之後,您可以建立執行計畫,讓您先預覽基礎結構變更,之後再部署。 驗證變更之後,您可以套用執行計畫來部署基礎結構。
在本文中,您將學會如何:
- 使用 random_pet建立隨機值(要用於資源組名中)。
- 使用 azurerm_resource_group 建立 Azure 資源群組。
- 使用 azurerm_virtual_network 建立 Azure 虛擬網路。
- 使用 azurerm_subnet 建立 Azure 子網。
- 使用 random_string 建立隨機值(以做為 Managed Lustre 檔案系統名稱)。
- 使用 azurerm_managed_lustre_file_system 建立受控 Lustre 文件系統。
注意
本文中的程式代碼範例會使用 random_pet 和 random_string 資源來產生資源組名和 Managed Lustre 檔案系統名稱的唯一值。 您可以將這些值取代為和 main.tf
檔案中的variables.tf
您自己的資源名稱。
必要條件
實作 Terraform 程式碼
注意
本文的範例程式代碼來自 Azure Terraform GitHub 存放庫。 您可以檢視記錄檔,其中包含 目前和舊版 Terraform 的測試結果。
如需示範如何使用 Terraform 來管理 Azure 資源的詳細資訊文章和範例程式代碼,請參閱 Azure 上的 Terraform 檔的主頁面。
建立用來測試範例 Terraform 程式代碼的目錄,並將其設為目前目錄。
建立名為
providers.tf
的檔案,並插入下列程式碼:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
建立名為
main.tf
的檔案,並插入下列程式碼:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_string" "azurerm_virtual_network_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_virtual_network" "example" { name = coalesce(var.virtual_network_name, "vnet-${random_string.azurerm_virtual_network_name.result}") resource_group_name = azurerm_resource_group.rg.name address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location } resource "random_string" "azurerm_subnet_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_subnet" "example" { name = coalesce(var.subnet_name, "subnet-${random_string.azurerm_subnet_name.result}") resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.2.0/24"] } resource "random_string" "azurerm_amlfs_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_managed_lustre_file_system" "example" { name = coalesce(var.amlfs_name, "amlfs-${random_string.azurerm_amlfs_name.result}") resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location sku_name = var.amlfs_sku_name subnet_id = azurerm_subnet.example.id storage_capacity_in_tb = var.amlfs_storage_capacity_in_tb zones = ["1"] maintenance_window { day_of_week = var.amlfs_maintenance_day_of_week time_of_day_in_utc = var.amlfs_maintenance_time_of_day } }
建立名為
variables.tf
的檔案,並插入下列程式碼:variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "virtual_network_name" { type = string description = "The name of the virtual network resource. The value will be randomly generated if blank." default = "" } variable "subnet_name" { type = string description = "The name of the virtual network subnet. The value will be randomly generated if blank." default = "" } variable "amlfs_name" { type = string description = "The name of the Manage Lustre file system resource. The value will be randomly generated if blank." default = "" } variable "amlfs_sku_name" { type = string default = "AMLFS-Durable-Premium-40" validation { condition = contains(["AMLFS-Durable-Premium-40", "AMLFS-Durable-Premium-125", "AMLFS-Durable-Premium-250", "AMLFS-Durable-Premium-500"], var.amlfs_sku_name) error_message = "The SKU value must be one of the following: AMLFS-Durable-Premium-40, AMLFS-Durable-Premium-125, AMLFS-Durable-Premium-250, AMLFS-Durable-Premium-500." } description = "SKU name for the Azure Managed Lustre file system." } variable "amlfs_storage_capacity_in_tb" { type = number default = 48 description = "The size of the Managed Lustre file system, in TiB. This might be rounded up." } variable "amlfs_maintenance_day_of_week" { type = string default = "Saturday" validation { condition = contains(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], var.amlfs_maintenance_day_of_week) error_message = "The maintenance day of week value must be one of the following: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday." } description = "Day of the week on which the maintenance window will occur." } variable "amlfs_maintenance_time_of_day" { type = string default = "02:00" description = "The time of day (in UTC) to start the maintenance window." }
建立名為
outputs.tf
的檔案,並插入下列程式碼:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "virtual_network_name" { value = azurerm_virtual_network.example.name } output "subnet_name" { value = azurerm_subnet.example.name } output "managed_lustre_file_system_name" { value = azurerm_managed_lustre_file_system.example.name } output "amlfs_sku_name" { value = azurerm_managed_lustre_file_system.example.sku_name } output "amlfs_storage_capacity_in_tb" { value = azurerm_managed_lustre_file_system.example.storage_capacity_in_tb }
初始化 Terraform
執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。
terraform init -upgrade
重點︰
-upgrade
參數會將必要的提供者外掛程式升級至符合設定版本條件約束的最新版本。
建立 Terraform 執行計畫
執行 terraform plan 以建立執行計畫。
terraform plan -out main.tfplan
重點︰
terraform plan
命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。- 選用的
-out
參數可讓您指定計畫的輸出檔。 使用-out
參數可確保您所檢閱的方案就是所套用的方案。
套用 Terraform 執行計畫
執行 terraform apply 將執行計畫套用至您的雲端基礎結構。
terraform apply main.tfplan
重點︰
- 範例
terraform apply
命令假設您之前已執行過terraform plan -out main.tfplan
。 - 如果您為
-out
參數指定了不同的檔案名稱,請在呼叫terraform apply
時使用該檔案名稱。 - 若您未使用
-out
參數,請呼叫terraform apply
,不需要使用參數。
驗證結果
取得 Azure 資源群組的名稱:
resource_group_name=$(terraform output -raw resource_group_name)
取得 Managed Lustre 檔案系統的名稱:
managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
執行 az amlfs show 以顯示 Managed Lustre 檔案系統的名稱:
az amlfs show --resource-group $resource_group_name \ --name $managed_lustre_file_system_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 時的常見問題進行疑難解答。