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 .
Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Usando Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar 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 na infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.
Neste artigo, vai aprender a:
- Crie um valor aleatório (a ser usado no nome do grupo de recursos) usando random_pet.
- Crie um grupo de recursos do Azure usando azurerm_resource_group.
- Crie uma rede virtual do Azure usando azurerm_virtual_network.
- Crie uma sub-rede do Azure usando azurerm_subnet.
- Crie um valor aleatório (para ser usado como o nome do sistema de arquivos Managed Lustre) usando random_string.
- Crie um sistema de arquivos Managed Lustre usando azurerm_managed_lustre_file_system.
Nota
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 Managed Lustre. Você pode substituir esses valores por seus próprios nomes de variables.tf
recursos nos arquivos e main.tf
.
Pré-requisitos
Implementar o código Terraform
Nota
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 atual e anterior 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.
Crie um diretório no qual testar o código Terraform de exemplo e torne-o o diretório atual.
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 {} }
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 } }
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." }
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 o Terraform
Execute terraform init para inicializar a implantação do Terraform. Este comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.
terraform init -upgrade
Pontos principais:
- O
-upgrade
parâmetro atualiza os plug-ins de provedor necessários para a versão mais recente que está em conformidade com as restrições de versão da configuração.
Criar um plano de execução do Terraform
Execute o plano de terraforma para criar um plano de execução.
terraform plan -out main.tfplan
Pontos principais:
- O
terraform plan
comando 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 quaisquer alterações nos recursos reais. - O parâmetro opcional
-out
permite especificar um arquivo de saída para o plano. O uso do-out
parâmetro garante que o plano revisado seja exatamente o que é aplicado.
Aplicar um plano de execução Terraform
Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.
terraform apply main.tfplan
Pontos principais:
- O comando de exemplo
terraform apply
pressupõe que você executouterraform plan -out main.tfplan
anteriormente o . - Se você especificou um nome de arquivo diferente para o
-out
parâmetro, use esse mesmo nome de arquivo na chamada paraterraform apply
. - Se você não usou o
-out
parâmetro, ligueterraform apply
sem nenhum parâmetro.
Verificar os resultados
Obtenha o nome do grupo de recursos do Azure:
resource_group_name=$(terraform output -raw resource_group_name)
Obtenha o nome do sistema de arquivos Managed Lustre:
managed_lustre_file_system_name=$(terraform output -raw managed_lustre_file_system_name)
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 \
Clean up resources (Limpar recursos)
Quando você não precisar mais dos recursos criados via Terraform, execute as seguintes etapas:
Execute o plano de terraforma e especifique o
destroy
sinalizador.terraform plan -destroy -out main.destroy.tfplan
Pontos principais:
- O
terraform plan
comando 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 quaisquer alterações nos recursos reais. - O parâmetro opcional
-out
permite especificar um arquivo de saída para o plano. O uso do-out
parâmetro garante que o plano revisado seja exatamente o que é aplicado.
- O
Execute terraform apply 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.