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