quarta-feira, 10 de julho de 2024

Zona de disponibilidade do Terraform na implementação do Azure. Falta documentação e bons exemplos.

 Zona de disponibilidade do Terraform na implementação do Azure. Falta documentação e bons exemplos.




Enquanto aprendia o Terraform há algum tempo, queria aproveitar as zonas de disponibilidade no Azure. Eu estava a olhar especificamente para conjuntos de escala de máquinas virtuais.   https://www.terraform.io/docs/providers/azurerm/r/virtual_machine_scale_set.html 

Olhando para a documentação do Terraform, percebi que não existe um bom exemplo de utilização de zonas. Assim, experimentei algumas coisas para ver o que era realmente necessário para aquela zona. Ao fazer algumas pesquisas, percebi que há muitas pessoas na mesma situação. Não há bons exemplos. Decidi criar este post para ajudar mais alguém. E, claro, é também um bom lembrete para mim, caso me esqueça da sintaxe de como o fiz.

Aqui está um ficheiro Terraform muito simples. Acabei de criar uma nova pasta e depois um novo ficheiro chamado zones.tf. Eis o conteúdo:

variável "location" {
description = "O local onde os recursos serão criados"
default = "centralus"
type = string
}

locais {
regions_with_availability_zones = ["centralus","eastus2","eastus","westus" ]
zonas = contém (local.regions_with_availability_zones, var.location) ? list("1","2","3") : null
}

output "zones" {
value = local.zones
}


A variável 'location' pode ser alterada fora do script. Mas usei ‘locais’ para variáveis ​​que não queria que fossem alteradas externamente. Codifiquei uma lista de regiões do Azure que têm zonas de disponibilidade. Neste momento, é apenas uma lista de regiões dos Estados Unidos. Claro que isto é facilmente modificável para adicionar outras regiões.

A variável local 'zones' utiliza a função contains para ver se a região especificada está nesse array. Neste caso, o valor é uma lista de strings. Caso contrário, é nulo. Isso é importante. O campo zonas nos recursos do Azure exigia uma lista de cadeias de caracteres ou nulo. Uma lista vazia não funcionou para mim.

Tal como está agora, pode executar o comando Aplicar do Terraform e deverá ver alguma saída. Altere o valor da variável location para algo que não está na lista e poderá não ver a saída simplesmente porque o valor é nulo.

Ora, observando um exemplo parcial da documentação do Terraform:

resource " azurerm_virtual_machine_scale_set " " exemplo" { name = "mytestscaleset-1" location = var.location resource_group_name = "${azurerm_resource_group.example.name} " upgrade_policy_mode = "Manual" zones = local.zones

Agora o campo zones pode ser utilizado em segurança quando o valor é uma lista de strings ou nulo. Depois de executar o script Terraform completo para o VM Scale Set, fui ao Portal Azure para verificar se funcionava.

Também alterei a região especificada para uma que sei que não utiliza zonas de disponibilidade, Centro-Sul dos EUA.

Provou-me que posso usar uma região com e sem zonas de disponibilidade no mesmo script Terraform.

Para obter uma lista das regiões do Azure com zonas de disponibilidade, consulte:
https://docs.microsoft.com/en-us/azure/availability-zones/az-overview

Sem comentários:

Enviar um comentário