Freigeben über


Erstellen eines Azure Managed Lustre-Dateisystems mithilfe von Terraform

In diesem Artikel verwenden Sie Terraform, um ein Azure Managed Lustre-Dateisystem zu erstellen.

Mit Terraform können Sie eine Cloudinfrastruktur definieren, eine Vorschau der Cloudinfrastruktur anzeigen und die Cloudinfrastruktur bereitstellen. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

Hinweis

In den Codebeispielen in diesem Artikel werden die ressourcen random_pet und random_string verwendet, um eindeutige Werte für den Ressourcengruppennamen und den Dateinamen des verwalteten Lustre-Dateisystems zu generieren. Sie können diese Werte durch Ihre eigenen Ressourcennamen in den variables.tf und main.tf dateien ersetzen.

Voraussetzungen

Implementieren des Terraform-Codes

Hinweis

Der Beispielcode für diesen Artikel stammt aus dem Azure Terraform GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse von aktuellen und früheren Terraform-Versionen enthält.

Weitere Artikel und Beispielcode zur Verwendung von Terraform zum Verwalten von Azure-Ressourcen finden Sie auf der Hauptseite für Terraform in der Azure-Dokumentation.

  1. Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und zum aktuellen Verzeichnis wird.

  2. Erstellen Sie eine Datei namens providers.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens outputs.tf, und fügen Sie den folgenden Code ein:

    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
    }
    

Initialisieren von Terraform

Führen Sie zum Initialisieren der Terraform-Bereitstellung terraform init aus. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.

terraform init -upgrade

Die wichtigsten Punkte:

  • Der Parameter -upgrade aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.

Erstellen eines Terraform-Ausführungsplans

Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.

terraform plan -out main.tfplan

Die wichtigsten Punkte:

  • Durch den Befehl terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
  • Der optionale Parameter -out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.

Anwenden eines Terraform-Ausführungsplans

Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.

terraform apply main.tfplan

Die wichtigsten Punkte:

  • Der Beispielbefehl terraform apply setzt voraus, dass Sie zuvor terraform plan -out main.tfplan ausgeführt haben.
  • Wenn Sie einen anderen Dateinamen für den Parameter -out angegeben haben, verwenden Sie denselben Dateinamen im Aufruf von terraform apply.
  • Wenn Sie den Parameter -out nicht verwendet haben, rufen Sie terraform apply ohne Parameter auf.

Überprüfen der Ergebnisse

  1. Rufen Sie den Namen der Azure-Ressourcengruppe ab:

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Rufen Sie den Namen des Managed Lustre-Dateisystems ab:

    managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
    
  3. Führen Sie az amlfs show to display the name of the Managed Lustre file system:

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

Bereinigen von Ressourcen

Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:

  1. Führen Sie terraform plan aus, und geben Sie das Flag destroy an.

    terraform plan -destroy -out main.destroy.tfplan
    

    Die wichtigsten Punkte:

    • Durch den Befehl terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
    • Der optionale Parameter -out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
  2. Führen Sie zum Anwenden des Ausführungsplans den Befehl terraform apply aus.

    terraform apply main.destroy.tfplan
    

Problembehandlung für Terraform in Azure

Informationen zur Problembehandlung bei der Verwendung von Terraform in Azure finden Sie unter "Behandeln häufiger Probleme".