Implante VMs do Azure com Terraform para economizar dinheiro

Conteúdo

logo azul

A maioria de nós tem: nós implantamos máquinas virtuais temporárias no Azure. Algo que muitos de nós também temos feito é esquecer de excluir os recursos anexados a essas máquinas virtuais ao excluí-los. Isso pode levar a custos indesejados de centenas de dólares se você não tomar cuidado..

Neste post, aprenderemos como implementar máquinas virtuais no Azure e apagar todos os rastros delas quando terminarmos de usar o Terraform.

Pré-requisitos

Você deve atender a alguns requisitos anteriores para poder seguir esta postagem:

  • Tenha o CLI do Azure instalado.
  • Seja um administrador de assinatura do Azure (ou similar), permitindo que você o use para criar recursos e grupos de recursos.

Com isso fora do caminho, vamos começar baixando e instalando o Terraform.

Instalação do Terraform

O Terraform pode ser instalado de diferentes maneiras. No Windows, a maneira mais fácil é usar choco:

choco install terraform

Instalação do Terraform usando choco.

No Macintosh, está habilitado através do Brew:

brew install terraform

Mais informações sobre a instalação do Terraform estão habilitadas no Documentação do Terraform.

Supondo que tudo tenha corrido bem com a instalação, você pode confirmar se funciona executando o comando terraform version.

Confirme se o Terraform funciona executando o comando "versão terraform".

Agora que você confirmou que o terraform funciona em sua máquina, hora de se autenticar na assinatura do Azure por meio da CLI do Azure.

Autenticando

Para autenticar e determinar a assinatura na CLI do Azure, deve entrar. Abra um terminal e digite:

az login

E depois, depois de autenticar, liste todas as suas assinaturas inserindo:

az account list

Se você tiver várias assinaturas disponíveis, copie o ID de assinatura do correto e digite:

az account set --subscription="COPIED_SUBSCRIPTION_ID"

Agora você configurou a CLI do Azure para usar sua assinatura. (Esta é a assinatura que o Terraform usará posteriormente). Agora é a hora de criar o modelo de terreno que usaremos para implementar nossa VM.

Crie o modelo Terraform

O modelo Terraform é um arquivo de texto simples com o final do arquivo .tf. Ele tem uma sintaxe semelhante a JSON e pode ser facilmente lido e gerado. O modelo consiste principalmente em duas partes: Provedores (que lidam com a comunicação com o serviço no qual você deseja implementar) e os recursos que o provedor cria.

Começamos criando um arquivo chamado vm.tf em um diretório vazio. O Terraform precisará de um diretório vazio para escrever o status de configuração mais tarde.

Agora, abra esse arquivo com seu editor de texto favorito e adicione o provedor:

provider "azurerm" {
  version   = "=2.11.0"
	features {}  
}

Isso dirá ao Terraform que você deseja usar o provedor AzureRM (para criar recursos azuis) e qual deve ser a versão 2.11. É essencial especificar o número da versão, pois a funcionalidade entre as diferentes versões pode variar muito..

Depois de ter escrito isso no arquivo de texto, é hora de adicionar nosso grupo de recursos do Azure. Terraform também vê isso como um recurso:

resource "azurerm_resource_group" "resourcegroup" {
        name = "test-vm"
        location = "westus"
        tags = {
            project = "some_test_project"
        }
}

O código acima cria um grupo de recursos chamado “test-vm” localizado na região oeste dos EUA. UU. Adicione também uma etiqueta com o nome do projeto.

Para executar uma máquina virtual com sucesso, nós também precisamos de uma rede. E porque o Terraform é feito para infraestrutura como código (IaC), também está habilitado como um recurso:

resource "azurerm_virtual_network" "network" {
    name                = "${azurerm_resource_group.resourcegroup.name}-network"
    address_space       = ["10.0.0.0/16"]
    location            = azurerm_resource_group.resourcegroup.location
    resource_group_name = azurerm_resource_group.resourcegroup.name

    tags = azurerm_resource_group.resourcegroup.tags
}

Isso cria uma rede virtual. Ele também usa uma variável no Nome parâmetro. Se você olhar de perto, você verá que se refere ao grupo de recursos que definimos anteriormente:

"${azurerm_resource_group.resourcegroup.name}-network"

Isso significa que a rede virtual receberá o nome test-vm-network. Também fazemos o mesmo com a localização, o nome do grupo de recursos e tags.

A seguir, é hora de estabelecer a sub-rede na qual colocaremos a VM, usando os mesmos métodos usando variáveis ​​de antes:

resource "azurerm_subnet" "subnet" {
    name                 = "${azurerm_resource_group.resourcegroup.name}-subnet"
    resource_group_name  = azurerm_resource_group.resourcegroup.name
    virtual_network_name = azurerm_virtual_network.network.name
    address_prefix       = "10.0.2.0/24"
}

Isso cria uma sub-rede chamada test-vm-subnet.

Agora, vamos definir o NIC que a VM também usará:

resource "azurerm_network_interface" "vm1-nic" {
    name                        = "vm1-NIC"
    location                    = azurerm_resource_group.resourcegroup.location
    resource_group_name         = azurerm_resource_group.resourcegroup.name

    ip_configuration {
        name                          = "vm1-NicConfiguration"
        subnet_id                     = "${azurerm_subnet.subnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address            = "10.0.2.4"
    }

    tags = azurerm_resource_group.resourcegroup.tags
}

Para este caso, vamos usar um endereço IP estático, referindo-se à sub-rede usando uma variável.

E, por último, mas não menos importante, a definição da própria máquina virtual:

resource "azurerm_virtual_machine" "vm-1" {
  name                  = "vm1"
  location              = "${azurerm_resource_group.resourcegroup.location}"
  resource_group_name   = "${azurerm_resource_group.resourcegroup.name}"
  network_interface_ids = ["${azurerm_network_interface.vm1-nic.id}"]
  vm_size               = "Standard_B1ms"

  delete_os_disk_on_termination = true

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2019-Datacenter"
    version   = "latest"
  }
  storage_os_disk {
    name              = "vm1-osdisk"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Standard_LRS"
  }
  os_profile {
    computer_name  = "vm-1"
    admin_username = "demoadmin"
    admin_password = "$om3s3cretPassWord"
  }

  os_profile_windows_config {
      enable_automatic_upgrades = "true"
      provision_vm_agent = "true"
  }

  tags = azurerm_resource_group.resourcegroup.tags
}

O código acima fornecerá uma máquina virtual Azure executando o Windows Server 2019, usando os recursos que definimos anteriormente. Você terá um administrador com o nome de usuário “demoadmin” quem tem a senha “$ Om3s3cretPassWord”. O resto dos parâmetros são autoexplicativos, e você pode encontrar muitos mais no Documentação do Terraform AzureRM.

Agora, tudo o que resta é salvar o .tf-arquivo implementando este modelo no Azure usando TerraForm!

Iniciar e implementar com TerraForm

Agora que temos o modelo em ordem, abra um terminal e vá para o diretório onde você salvou o .tf-arquivo para:

cd c:tempterraform

Agora devemos iniciar o TerraForm. Isso baixará o módulo de recursos para AzureRM e procurará erros no .tf-procedimentos:

Inicie Terraform, que baixa o módulo de recursos e verifica se há erros no arquivo .tf.

Depois que a inicialização for concluída, você está pronto para aplicar o modelo executando terraform apply.

terraform apply

TerraForm agora criará um novo grupo de recursos no Azure, redes, sub-redes e, em resumo, a própria máquina virtual. O estado e todos os recursos que você criou são armazenados no .terraforma pasta do seu diretório atual. Por isso, Não exclua essa pasta se quiser limpar os recursos de forma limpa mais tarde!!

Quando terminar de usar sua máquina virtual de teste e quiser destruí-la, apenas corra:

terraform destroy

Isso irá deletar todos os discos, nics, sub-redes, grupos de recursos e assim por diante que você criou quando executou terraform apply, e você não precisa se preocupar em esquecer de excluir os fragmentos que sobraram em termos de recursos do Azure.

conclusão

Usar TerraForm apenas para tarefas menores como esta é incrivelmente legal. Mostra que não é necessário ter uma Infraestrutura como código (IaC) totalmente implementado para uso produtivo. Também reduz o custo limpando recursos não utilizados no Azure. Com sorte, isto provou ser útil para você, E ele até começou sua jornada para IaC!!

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.