Sunday, May 12, 2024
HomePowershellTestando seus templates ARM com powershell e ARM-TTK

Testando seus templates ARM com powershell e ARM-TTK


Olá Pessoal,

Eu trabalho muito com infraestrutura como código, e uso primariamente Templates ARM, terraform e bicep para criação dos templates e tenho o habito de testar até o codigo da infraestrutura para garantir que não estou violando nenhuma boa pratica com o codigo que preparei. Existem diversas ferramentas no mercado para analise estatica de codigo para terraform, porém muitas delas não suportam templates ARM. Tendo isso em mente o time da Microsoft criou um modulo de powershell chamado ARM-TTK. A intenção modulo nao é fazer uma validação completa de sintaxe, mas sim verificar se o código do template foi escrito usando um conjunto de melhores práticas.

Acabo sempre implementando um stage apenas para testes quando crio pipelines para fazer deployment desses templates, e o ARM-TTK é uma ferramenta que uso com bastante frequencia. Infelizmente esse modulo nao esta publicado na galeria, então é necessário baixa-lo do repositorio Github. O time publica releases com uma certa frequencia, então ele esta sendo bem mantido, porém para sempre baixar a launch mais recente, gosto de usar a API do github para listar a URl da launch mais nova com o seguinte comando:

(Invoke-RestMethod -Uri 'https://api.github.com/repos/Azure/arm-ttk/releases/newest').property.browser_download_url

Ele irá retornar diretamente a URL do pacote mais recente da launch, com isso podemos usar o comando Invoke-WebRequest para baixar o pacote:

$ARMTTK = @{
    Uri = (Invoke-RestMethod -Uri 'https://api.github.com/repos/Azure/arm-ttk/releases/newest').property.browser_download_url 
    OutFile = (Be part of-Path -Path . -ChildPath 'arm-ttk.zip')
}
Invoke-WebRequest @ARMTTK

Em seguida podemos usar o comando Broaden-Archive para descompactar o arquivo zip que conseguimos no passo anterior:

Broaden-Archive -Path .arm-ttk.zip -DestinationPath .

Um passo importante é desbloquear os arquivos para evitar problemas durante a execução, podemos fazer isso usando o comando Unblock-File:

Get-ChildItem -Path .arm-ttk -Recurse | Unblock-File

Agora podemos importar o modulo com o comando Import-Module:

Import-Module -Title .arm-ttk

Agora podemos usar o comando Check-AzTemplate para efetuar os testes:

Check-AzTemplate -TemplatePath '.guidoVMDeployment.json'

 

O resultado closing dos testes fica conforme a imagem abaixo:

Testando seus templates ARM com powershell e ARM-TTK

 

Script completo:

#Baixar o modulo
$ARMTTK = @{
    Uri = (Invoke-RestMethod -Uri 'https://api.github.com/repos/Azure/arm-ttk/releases/newest').property.browser_download_url 
    OutFile = (Be part of-Path -Path . -ChildPath 'arm-ttk.zip')
}
Invoke-WebRequest @ARMTTK

#Descompactar o aquivo zip
Broaden-Archive -Path .arm-ttk.zip -DestinationPath .

#Desbloquear os arquivos
Get-ChildItem -Path .arm-ttk -Recurse | Unblock-File

#Importar o modulo
Import-Module -Title .arm-ttk

#Testar o Template ARM
Check-AzTemplate -TemplatePath '.guidoVMDeployment.json'

 

Dúvidas? Sugestões? Comente!

Até a próxima!

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments