Compartilhar via


Criar um sistema de arquivos do Azure Managed Lustre usando o Terraform

Neste artigo, você usa o Terraform para criar um sistema de arquivos do Azure Managed Lustre .

O Terraform permite a definição, a visualização e a implantação da infraestrutura de nuvem. Usando o Terraform, você cria arquivos de configuração usando sintaxe de HCL. A sintaxe da HCL permite que você especifique o provedor de nuvem, como o Azure, e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações de infraestrutura antes de serem implantadas. Depois de verificar as alterações, aplique o plano de execução para implantar a infraestrutura.

Neste artigo, você aprenderá como:

Observação

Os exemplos de código neste artigo usam os recursos random_pet e random_string para gerar valores exclusivos para o nome do grupo de recursos e o nome do sistema de arquivos do Managed Lustre. Você pode substituir esses valores por seus próprios nomes de recursos nos variables.tf arquivos e main.tf .

Pré-requisitos

Implementar o código do Terraform

Observação

O código de exemplo para este artigo vem do repositório GitHub do Azure Terraform. Você pode exibir o arquivo de log que contém os resultados do teste das versões atuais e anteriores do Terraform.

Para obter mais artigos e código de exemplo que mostram como usar o Terraform para gerenciar recursos do Azure, consulte a página principal da documentação do Terraform no Azure.

  1. Crie um diretório no qual testar o código Terraform de amostra e torne-o o diretório atual.

  2. Crie um arquivo chamado providers.tf e insira o seguinte código:

    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. Crie um arquivo chamado main.tf e insira o seguinte código:

    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. Crie um arquivo chamado variables.tf e insira o seguinte código:

    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. Crie um arquivo chamado outputs.tf e insira o seguinte código:

    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
    }
    

Inicializar Terraform

Execute terraform init para inicializar a implantação do Terraform. Esse comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.

terraform init -upgrade

Pontos principais:

  • O parâmetro -upgrade atualiza os plug-ins do provedor necessários para a versão mais recente que esteja em conformidade com as restrições de versão da configuração.

Criar um plano de execução Terraform

Execute o comando terraform plan para criar um plano de execução.

terraform plan -out main.tfplan

Pontos principais:

  • O comando terraform plan cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer qualquer alteração nos recursos reais.
  • O parâmetro opcional -out permite que você especifique um arquivo de saída para o plano. Usar o parâmetro -out garante que o plano que você examinou seja exatamente o que é aplicado.

Aplicar um plano de execução do Terraform

Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.

terraform apply main.tfplan

Pontos principais:

  • O exemplo de comando do terraform apply pressupõe que você executou o terraform plan -out main.tfplan anteriormente.
  • Se você especificou um nome de arquivo diferente para o parâmetro -out, use esse mesmo nome de arquivo na chamada para terraform apply.
  • Se você não usou o parâmetro -out, chame terraform apply sem nenhum parâmetro.

Verifique os resultados

  1. Obtenha o nome do grupo de recursos do Azure:

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Obtenha o nome do sistema de arquivos Managed Lustre:

    managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
    
  3. Execute az amlfs show para exibir o nome do sistema de arquivos Managed Lustre:

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

Limpar os recursos

Quando você não precisar mais dos recursos criados por meio o Terraform, execute as seguintes etapas:

  1. Execute terraform plan e especifique o sinalizador destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Pontos principais:

    • O comando terraform plan cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer qualquer alteração nos recursos reais.
    • O parâmetro opcional -out permite que você especifique um arquivo de saída para o plano. Usar o parâmetro -out garante que o plano que você examinou seja exatamente o que é aplicado.
  2. Execute a aplicação do Terraform para aplicar o plano de execução.

    terraform apply main.destroy.tfplan
    

Solucionar problemas do Terraform no Azure

Consulte Solucionar problemas comuns ao usar o Terraform no Azure.