Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste início rápido, você cria uma conta de Lote do Azure, uma conta de Armazenamento do Azure e dois pools de Lotes usando o Terraform. O Batch é um serviço de agendamento de tarefas baseado em nuvem que paraleliza e distribui o processamento de grandes volumes de dados em muitos computadores. É normalmente usado para varreduras paramétricas, simulações de Monte Carlo, modelagem de risco financeiro e outras aplicações de computação de alto desempenho. Uma conta de lote é o recurso de nível superior no serviço de lote que fornece acesso a pools, trabalhos e tarefas. A conta de armazenamento é usada para armazenar e gerenciar todos os arquivos usados e gerados pelo serviço de lote, enquanto os dois pools de lotes são coleções de nós de computação que executam as tarefas.
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.
- Especifique a versão necessária do Terraform e os provedores necessários.
- Defina o provedor do Azure sem recursos adicionais.
- Defina variáveis para o local do grupo de recursos e o prefixo do nome do grupo de recursos.
- Gere um nome aleatório para o grupo de recursos usando o prefixo fornecido.
- Crie um grupo de recursos do Azure com o nome gerado no local especificado.
- Gere uma cadeia de caracteres aleatória para ser usada como o nome da conta de armazenamento.
- Crie uma conta de armazenamento com o nome gerado no grupo de recursos criado, no mesmo local e com uma camada de conta padrão e um tipo de replicação de armazenamento com redundância local.
- Gere outra cadeia de caracteres aleatória para ser usada como o nome da conta Batch.
- Crie uma conta de lote com o nome gerado no grupo de recursos criado, no mesmo local, e vincule-a à conta de armazenamento criada com o modo de autenticação de chaves de armazenamento.
- Gere um nome aleatório para o pool de lotes com um prefixo "pool".
- Crie um pool de lotes com uma escala fixa usando o nome gerado no grupo de recursos criado, vinculado à conta de lote criada, com um tamanho de máquina virtual (VM) A1 padrão, SKU do agente de nó do Ubuntu 22.04 e uma tarefa inicial que ecoa 'Hello World from $env' com um máximo de uma tentativa e espera pelo sucesso.
- Crie outro pool de lotes com escala automática, usando o mesmo nome gerado, no grupo de recursos criado, vinculado à conta de lote criada, com um tamanho de VM A1 padrão, SKU do agente de nó do Ubuntu 22.04 e uma fórmula de dimensionamento automático.
- Exiba os nomes do grupo de recursos criado, da conta de armazenamento, da conta de Batch e de ambos os pools de Batch.
Pré-requisitos
- Crie uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.
- Instale e configure o Terraform.
Implementar o código Terraform
Observação
O código de exemplo para este artigo está localizado no repositório GitHub do Azure Terraform. Você pode visualizar o arquivo de log que contém os resultados do teste das versões atual e anterior do Terraform.
Veja mais artigos e código de exemplo mostrando como usar o Terraform para gerenciar recursos do Azure.
Crie um diretório no qual testar e executar o código Terraform de exemplo e torne-o o diretório atual.
Crie um arquivo chamado
main.tfe 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" "storage_account_name" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_storage_account" "example" { name = random_string.storage_account_name.result resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location account_tier = "Standard" account_replication_type = "LRS" } resource "random_string" "batch_account_name" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_batch_account" "example" { name = random_string.batch_account_name.result resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location storage_account_id = azurerm_storage_account.example.id storage_account_authentication_mode = "StorageKeys" } resource "random_pet" "azurerm_batch_pool_name" { prefix = "pool" } resource "azurerm_batch_pool" "fixed" { name = "${random_pet.azurerm_batch_pool_name.id}-fixed-pool" resource_group_name = azurerm_resource_group.rg.name account_name = azurerm_batch_account.example.name display_name = "Fixed Scale Pool" vm_size = "Standard_A1" node_agent_sku_id = "batch.node.ubuntu 22.04" fixed_scale { target_dedicated_nodes = 2 resize_timeout = "PT15M" } storage_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts" version = "latest" } start_task { command_line = "echo 'Hello World from $env'" task_retry_maximum = 1 wait_for_success = true common_environment_properties = { env = "TEST" } user_identity { auto_user { elevation_level = "NonAdmin" scope = "Task" } } } metadata = { "tagName" = "Example tag" } } resource "azurerm_batch_pool" "autopool" { name = "${random_pet.azurerm_batch_pool_name.id}-autoscale-pool" resource_group_name = azurerm_resource_group.rg.name account_name = azurerm_batch_account.example.name display_name = "Auto Scale Pool" vm_size = "Standard_A1" node_agent_sku_id = "batch.node.ubuntu 22.04" auto_scale { evaluation_interval = "PT15M" formula = <<EOF startingNumberOfVMs = 1; maxNumberofVMs = 25; pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second); pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second)); $TargetDedicatedNodes=min(maxNumberofVMs, pendingTaskSamples); EOF } storage_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts" version = "latest" } }Crie um arquivo chamado
outputs.tfe insira o seguinte código:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "storage_account_name" { value = azurerm_storage_account.example.name } output "batch_account_name" { value = azurerm_batch_account.example.name } output "batch_pool_fixed_name" { value = azurerm_batch_pool.fixed.name } output "batch_pool_autopool_name" { value = azurerm_batch_pool.autopool.name }Crie um arquivo chamado
providers.tfe 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
variables.tfe insira o seguinte código:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } 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." }
Inicializar 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 parâmetro
-upgradeatualiza 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 comando terraform plan para criar um plano de execução.
terraform plan -out main.tfplan
Pontos principais:
- O comando
terraform plancria 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
-outpermite especificar um arquivo de saída para o plano. O uso do-outparâmetro garante que o plano revisado 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 comando de exemplo
terraform applypressupõe que já executasteterraform plan -out main.tfplananteriormente. - Se você especificou um nome de arquivo diferente para o parâmetro
-out, use esse mesmo nome de arquivo na chamada paraterraform apply. - Se você não usou o parâmetro
-out, chameterraform applysem nenhum parâmetro.
Verificar os resultados
Execute az batch account show para exibir a conta do Batch.
az batch account show --name <batch_account_name> --resource-group <resource_group_name>
Substitua <batch_account_name> pelo nome da sua conta Batch e <resource_group_name> pelo nome do seu grupo de recursos.
Limpeza de recursos
Quando você não precisar mais dos recursos criados via Terraform, execute as seguintes etapas:
Execute terraform plan e especifique o parâmetro
destroy.terraform plan -destroy -out main.destroy.tfplanPontos principais:
- O comando
terraform plancria 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
-outpermite especificar um arquivo de saída para o plano. O uso do-outparâmetro garante que o plano revisado seja exatamente o que é aplicado.
- O comando
Execute terraform apply para aplicar o plano de execução.
terraform apply main.destroy.tfplan
Solucionar problemas do Terraform no Azure
Solucione problemas comuns ao usar o Terraform no Azure.