TL;DR: Como manter a higiene dos seus recursos Azure
Configurações legadas de Azure Logic Apps Consumption frequentemente resultam em workflows ociosos ou falhando continuamente, gerando alertas desnecessários e poluição no portal. O artigo apresenta o script 'LA-CleanUp', que automatiza a identificação e limpeza desses recursos de forma segura, utilizando uma abordagem baseada em relatórios CSV e confirmação individual, ideal para manter a higiene operacional em ambientes complexos de nuvem. A conclusão é que auditorias periódicas são essenciais para manter a eficiência e a operabilidade da plataforma.
Se você gerencia assinaturas Azure que acumularam workflows de Logic Apps Consumption ao longo dos anos, provavelmente já se deparou com o desafio: dezenas de instâncias com nomes como TestLA, webhook-test-2 ou poc-for-jira-FINAL poluindo o portal. Seja porque estão inativas ou porque continuam falhando ciclicamente contra conexões expiradas, esses recursos geram ruído operacional: triggers disparando em vão, alertas que disparam pagers desnecessários e objetos Microsoft.Web/connections retendo permissões inutilmente. Embora pareçam baratos individualmente, eles degradam a visibilidade e a eficiência do seu ambiente.
Fonte e documentação completa: GitHub - dengyanbo/LA-CleanUp
O que o script entrega na prática?
O LA-CleanUp é um script PowerShell de arquivo único (Invoke-LogicAppCleanup.ps1) projetado para o cenário de Governance e FinOps. Ele oferece:
- Classificação clara: Tabelas codificadas por cor que separam Workflows em Idle (sem execuções no período definido) e AlwaysFailing (execuções realizadas, mas sem sucesso).
- Relatórios para governança: Exportação opcional de CSV com timestamp, ideal para compartilhar em canais do Teams ou abrir um PR para que os responsáveis pelo recurso validem a exclusão.
- Segurança operacional: Implementa um loop de deleção interativo (
y/N/q), garantindo o controle total sobre o que é removido. - Performance: Utiliza filtros OData no servidor, o que permite escanear assinaturas com milhares de execuções com alta performance, sem exceder limites ou causar lentidão.
Um ponto de atenção crítico: isso não afeta Logic Apps Standard (onde o histórico é armazenado em Storage Tables) nem remove conexões de API, que geralmente são compartilhadas. O foco é estrito na limpeza do recurso de computação Consumption.
Como iniciar a limpeza?
Pré-requisitos:
- PowerShell 5.1 ou superior.
- Azure CLI instalado no PATH.
- Autenticação via
az logincom permissões de Contributor ou Logic App Contributor.
git clone https://github.com/dengyanbo/LA-CleanUp.git
cd LA-CleanUp
.\Invoke-LogicAppCleanup.ps1
Como interpretar o fluxo de execução
O script foi desenhado para ser determinístico. Ao rodar o comando, ele informa a assinatura ativa, o usuário logado e os parâmetros de corte (por padrão, 90 dias).
[INFO] Active subscription: Contoso-Integration (1111-2222-...)
[INFO] Idle cutoff : runs older than 2026-02-20T03:08:00Z (>90 days)
[ OK ] Scan complete. Idle: 9, AlwaysFailing: 1, Errors: 0
...
Export the 10 candidate(s) to CSV? (y/N): y
Comandos úteis para o seu dia a dia
- Foco em um Resource Group específico:
.\Invoke-LogicAppCleanup.ps1 -IdleDays 60 -ResourceGroup rg-integration - Validar apenas o que está falhando:
.\Invoke-LogicAppCleanup.ps1 -SkipIdle - Realizar Dry-run (sem deletar): Responda 'N' ou 'q' nos prompts interativos após a geração do CSV.
Considerações técnicas sobre o design do script
O autor optou por não usar az rest para evitar problemas comuns de parse de caracteres especiais (&) em URLs OData no cmd.exe do Windows. Em vez disso, o script utiliza Invoke-RestMethod com tokens de acesso do Azure (az account get-access-token), o que garante uma execução muito mais robusta e rápida ao evitar sub-shells desnecessários para cada chamada API.
Além disso, o uso de $top=1 nas consultas OData garante que a verificação de status seja uma operação O(1) no servidor, mantendo a responsividade do script mesmo em assinaturas com um histórico extenso de runs.
Boas práticas no rollout
Se você não é o dono total da assinatura, não tente deletar tudo de uma vez. O workflow recomendado é:
- Execute com
-SkipAlwaysFailingprimeiro (os Idle são sempre o alvo mais seguro). - Exporte o CSV e compartilhe com os times responsáveis.
- Após a limpeza dos inativos, execute um segundo passe para os AlwaysFailing, que geralmente exigem uma investigação de causa raiz antes da remoção definitiva.
Artigo originalmente publicado em Azure Updates - Latest from Azure Charts.