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
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