Tworzenie zarządzanego systemu plików Lustre platformy Azure przy użyciu narzędzia Terraform

W tym artykule użyjesz narzędzia Terraform do utworzenia systemu plików Azure Managed Lustre .

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform można tworzyć pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — i elementów, które tworzą infrastrukturę chmury. Po utworzeniu plików konfiguracji należy utworzyć plan wykonania , który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian zastosujesz plan wykonania w celu wdrożenia infrastruktury.

W tym artykule omówiono sposób wykonywania następujących zadań:

Uwaga

W przykładzie kodu w tym artykule użyto random_pet i random_string zasobów w celu wygenerowania unikatowych wartości nazwy grupy zasobów i nazwy zarządzanego systemu plików Lustre. Te wartości można zastąpić własnymi nazwami zasobów w plikach variables.tf i main.tf .

Wymagania wstępne

Implementowanie kodu narzędzia Terraform

  1. Utwórz katalog, w którym chcesz przetestować przykładowy kod narzędzia Terraform i ustawić go jako bieżący katalog.

  2. Utwórz plik o nazwie providers.tf i wstaw następujący kod:

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Utwórz plik o nazwie main.tf i wstaw następujący kod:

    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
      }
    }
    
  4. Utwórz plik o nazwie variables.tf i wstaw następujący kod:

    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."
    }
    
  5. Utwórz plik o nazwie outputs.tf i wstaw następujący kod:

    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
    }
    

Inicjowanie narzędzia Terraform

Uruchom narzędzie terraform init, aby zainicjować wdrożenie narzędzia Terraform. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure.

terraform init -upgrade

Kluczowe kwestie:

  • Parametr -upgrade uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.

Tworzenie planu wykonania programu Terraform

Uruchom plan terraform , aby utworzyć plan wykonania.

terraform plan -out main.tfplan

Kluczowe kwestie:

  • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
  • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out zapewnia, że przeglądany plan jest dokładnie tym, co jest stosowane.

Stosowanie planu wykonania programu Terraform

Uruchom narzędzie terraform apply , aby zastosować plan wykonywania do infrastruktury chmury.

terraform apply main.tfplan

Kluczowe kwestie:

  • W przykładowym terraform apply poleceniu założono, że wcześniej uruchomiono polecenie terraform plan -out main.tfplan.
  • Jeśli określono inną nazwę pliku dla parametru -out , użyj tej samej nazwy pliku w wywołaniu metody terraform apply.
  • Jeśli nie użyto parametru , wywołaj metodę -outterraform apply bez żadnych parametrów.

Weryfikowanie wyników

  1. Pobierz nazwę grupy zasobów platformy Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Pobierz nazwę zarządzanego systemu plików Lustre.

    managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
    
  3. Uruchom polecenie az amlfs show , aby wyświetlić nazwę zarządzanego systemu plików Lustre.

    az amlfs show --resource-group $resource_group_name \
                  --name $managed_lustre_file_system_name \
    
    

Czyszczenie zasobów

Jeśli zasoby utworzone za pomocą programu Terraform nie są już potrzebne, wykonaj następujące czynności:

  1. Uruchom plan terraform i określ flagę destroy .

    terraform plan -destroy -out main.destroy.tfplan
    

    Kluczowe kwestie:

    • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
    • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out zapewnia, że przeglądany plan jest dokładnie tym, co jest stosowane.
  2. Uruchom narzędzie terraform apply , aby zastosować plan wykonania.

    terraform apply main.destroy.tfplan
    

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z programu Terraform na platformie Azure

Następne kroki

Następnie możesz dowiedzieć się więcej o usłudze Azure Managed Lustre.