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 release mais recente, gosto de usar a API do github para listar a URl da release mais nova com o seguinte comando:
(Invoke-RestMethod -Uri 'https://api.github.com/repos/Azure/arm-ttk/releases/latest').assets.browser_download_url
Ele irá retornar diretamente a URL do pacote mais recente da release, 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/latest').assets.browser_download_url
OutFile = (Join-Path -Path . -ChildPath 'arm-ttk.zip')
}
Invoke-WebRequest @ARMTTK
Em seguida podemos usar o comando Expand-Archive
para descompactar o arquivo zip que conseguimos no passo anterior:
Expand-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 -Name .\arm-ttk\
Agora podemos usar o comando Test-AzTemplate
para efetuar os testes:
Test-AzTemplate -TemplatePath '.\guidoVMDeployment.json'
O resultado final 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/latest').assets.browser_download_url
OutFile = (Join-Path -Path . -ChildPath 'arm-ttk.zip')
}
Invoke-WebRequest @ARMTTK
#Descompactar o aquivo zip
Expand-Archive -Path .\arm-ttk.zip -DestinationPath .
#Desbloquear os arquivos
Get-ChildItem -Path .\arm-ttk\ -Recurse | Unblock-File
#Importar o modulo
Import-Module -Name .\arm-ttk\
#Testar o Template ARM
Test-AzTemplate -TemplatePath '.\guidoVMDeployment.json'
Dúvidas? Sugestões? Comente!
Até a próxima!
1 Comments
[…] qualquer ferramenta de Integração e Deployment contínuos (CI/CD). Eu expliquei recentemente como testar seus templates ARM com powershell e ARM-TTK e essa dica de hoje anda de mãos dadas com esse post para criar o fluxo de testes […]