Post

Como utilizar outputs no Terraform [Azure]

Fala galera! Seis tão baum?

Este é mais um post da série de artigos que estamos escrevendo sobre o Terraform, uma ferramenta de código aberto que permite criar, modificar e gerenciar infraestrutura de nuvem de forma declarativa.

Neste artigo, vamos falar sobre outputs no Terraform, uma funcionalidade que permite que você obtenha e imprima valores de recursos criados em sua infraestrutura de nuvem. Vamos ver como declarar outputs no Terraform, quais são os benefícios de usá-los e como usá-los na mensagem de impressão no terminal.

1. O que são outputs no Terraform?

Outputs no Terraform são valores que você pode obter de recursos criados em sua infraestrutura de nuvem e usá-los em outros recursos ou em mensagens de impressão no terminal. Eles são definidos na seção output do arquivo de configuração do Terraform e podem ser acessados após a criação dos recursos.

Por exemplo, suponha que você criou uma instância do Microsoft Azure usando o Terraform e agora deseja acessar o endereço IP público dessa instância em um recurso de segurança. Você pode definir um output para o endereço IP público e usá-lo em outro recurso.

2. Como declarar outputs no Terraform?

Para declarar um output no Terraform, você precisa definir o nome do output e o valor que ele deve conter. Aqui está um exemplo de declaração de output para um endereço IP público de uma instância do Microsoft Azure:

1
2
3
output "public_ip_address" {
  value = azurerm_public_ip.example.ip_address
}

Neste exemplo, definimos um output chamado public_ip_address que obtém o endereço IP público de uma instância do Microsoft Azure chamada azurerm_public_ip.example.

Você também pode definir outputs compostos, que contêm vários valores. Aqui está um exemplo de declaração de output composto:

1
2
3
4
5
6
output "vm" {
  value = {
    name = azurerm_virtual_machine.example.name
    id   = azurerm_virtual_machine.example.id
  }
}

Neste exemplo, definimos um output chamado vm que contém o nome e o ID de uma instância do Microsoft Azure chamada azurerm_virtual_machine.example.

3. Quais são os benefícios dos outputs do Terraform?

Usar outputs no Terraform tem vários benefícios. Aqui estão alguns dos principais:

  • Organização: Usando outputs, você pode separar a definição dos recursos da obtenção dos valores desses recursos, tornando sua configuração mais organizada e fácil de entender.
  • Reutilização: Ao definir um output para um valor, você pode reutilizá-lo em outros recursos, evitando a repetição de valores e economizando tempo. Comunicação: Outputs também podem ser usados para imprimir mensagens no terminal, permitindo que você comunique informações importantes sobre a infraestrutura criada.

4. Como utilizar outputs no terminal?

Você pode usar a mensagem de impressão no terminal para exibir informações sobre a infraestrutura criada, como o endereço IP público de uma instância ou o nome de um recurso. Para fazer isso, basta usar a interpolação de string do Terraform e o valor do output que você deseja imprimir.

Aqui está um exemplo de como imprimir o endereço IP público de uma instância do Microsoft Azure:

1
2
3
4
5
6
7
8
output "public_ip_address" {
  value = azurerm_public_ip.example.ip_address
}

# Imprime o endereço IP público da instância
output "print_public_ip_address" {
  value = "O endereço IP público da instância é ${azurerm_public_ip.example.ip_address}"
}

Neste exemplo, definimos um output chamado public_ip_address que obtém o endereço IP público de uma instância do Microsoft Azure. Em seguida, definimos um segundo output chamado print_public_ip_address que usa a interpolação de string para imprimir o endereço IP público no terminal.

Para ver o valor do output no terminal, basta executar o seguinte comando:

1
2
terraform output print_public_ip_address
}

Isso exibirá a seguinte mensagem:

1
O endereço IP público da instância é xxx.xxx.xxx.xxx.

5. Usando um output em outro recurso

Neste exemplo, vamos criar uma instância do Microsoft Azure e um NSG que usa o endereço IP público da instância. Vamos usar um output para obter o endereço IP público da instância e usá-lo no NSG.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Cria uma instância do Microsoft Azure
resource "azurerm_virtual_machine" "example" {
  name                  = "example-vm"
  location              = "eastus"
  resource_group_name   = "example-resource-group"
  network_interface_ids = [azurerm_network_interface.example.id]
  vm_size               = "Standard_DS1_v2"

  storage_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04-LTS"
    version   = "latest"
  }

  os_profile {
    computer_name  = "example-vm"
    admin_username = "exampleuser"
    admin_password = "examplepassword"
  }

  os_disk {
    name              = "example-os-disk"
    caching           = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }
}

# Define um output para o endereço IP público da instância
output "public_ip_address" {
  value = azurerm_public_ip.example.ip_address
}

# Cria um recurso de segurança que usa o endereço IP público da instância
resource "example_security_group" "example" {
  name                  = "example-security-group"
  location              = "eastus"
  resource_group_name   = "example-resource-group"
  security_rules {
    name                       = "allow_ssh"
    priority                   = 100
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "22"
    source_address_prefix      = "Internet"
    destination_address_prefix = azurerm_public_ip.example.ip_address
  }
}

Neste exemplo, criamos uma instância do Microsoft Azure e definimos um output chamado public_ip_address que obtém o endereço IP público da instância. Em seguida, criamos um NSG chamado example_security_group que usa o endereço IP público da instância em sua configuração. Observe que usamos a interpolação de string para inserir o valor do output no NSG.

6. Conclusão

Os outputs no Terraform são uma ferramenta útil para extrair informações de recursos criados e reutilizá-las em outros recursos ou para exibi-las no terminal. Eles são fáceis de declarar e podem ser usados em vários cenários diferentes.

Esperamos que este artigo tenha sido útil para ajudá-lo a entender como usar outputs no Terraform e como eles podem beneficiar seus projetos de infraestrutura como código.

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

É isso galera, espero que gostem!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.