Ola Pessoal,
Neste post vou mostrar como usar Azapi no terraform para verificar de forma dinâmica, se um recurso esta realmente disponível para ser utilizados, pois o terraform indica que o deploy do recurso foi concluído, mas o recurso ainda não está totalmente disponível para uso.
Versões utilizadas
AzApi: 2.2.0
Terraform: 1.10.5
Antes de começar o test, temos que explicar o cenario: como vocês podem ver no código abaixo, iremos adicionar uma tag num recurso group chamada rg_test_tags,
Porem, esse resource group ainda não existe no Azure, estamos simulando uma situação de que o recurso ainda não esta pronto.
Agora vamos explicar o que essa comando abaixo esta fazendo:
– No bloco Retry, o terraform ira olhar o retorno do error da tentativa de deploy e vai comparar com o valor do parâmetro “error_message_regex”, neste nosso exemplo estamos usando o valor .* , que significa que qualquer codigo que estiver no output to error_message_regex sera considerado como error e com isso o terraform vai tentar fazer o deploy deste recurso ate nao existir nenhuma mensagem de error.
Para evitar que o terraform fique para sempre tentando fazer o deploy sem sucesso, nos temos que introduzir o bloco timeout, neste nosso caso iremos esperar 3 minutos ate o terraform considerar esse deploy como falha e parar o processo.
A magica acontece, que se o resource que nos estamos tentando atualizar ficar disponível antes do 3 minutos, o deploy ira ser executado com sucesso e nao temos mais a necessidade de usar o bloco wait para esperar um tempo fixo por isso.
variable "rg_name" {
type = string
default = "rg_test_tags"
description = "Name of the resource group"
}
data "azapi_client_config" "current" {
}
resource "azapi_resource" "create_rg" {
type = "Microsoft.Resources/tags@2021-04-01"
name = "default"
parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${var.rg_name}"
body = {
properties = {
tags = {
Environment = "Test"
}
}
}
retry = {
error_message_regex = [".*"] # Check for any error messages generated with regex .*
}
timeouts {
create = "3m" # Wait 3 minutes before declaring it a failure.
}
}
Muito obrigado pela atenção e ate a próxima
Referencias:
– https://registry.terraform.io/providers/Azure/azapi/latest/docs/guides/feature_customized_retry
– https://techcommunity.microsoft.com/blog/azuretoolsblog/announcing-azapi-2-0/4275733