Resumen
Gestionar los recursos sin usar o huérfanos en Azure puede afectar significativamente al gasto en la nube y a la eficiencia operativa. La herramienta Azure Resource Cleanup es un script completo de PowerShell diseñado para ayudar a los administradores de la nube a identificar y eliminar recursos de Azure sin usar o huérfanos, garantizando la optimización de costes y una mejor gestión de recursos.
Este script funciona por defecto en un modo de informe seguro y no destructivo, lo que permite a los administradores revisar los recursos huérfanos antes de iniciar las operaciones de limpieza.
Puedes acceder al proyecto en GitHub: AzureOpsScripts – Resource Cleanup.
Tabla de contenido
Características clave
El script de Azure Resource Cleanup ofrece las siguientes funciones:
- NIC huérfanas: identifica interfaces de red no conectadas a ninguna máquina virtual ni punto de conexión.
- Instantáneas de disco de Azure antiguas: detecta instantáneas que superan el período de retención.
- Instantáneas de blobs de cuentas de almacenamiento: marca las instantáneas de blobs más antiguas que el período de retención definido.
- Instantáneas de recursos compartidos de archivos: identifica instantáneas de recursos compartidos de archivos que superan los límites de retención.
- Discos administrados huérfanos: encuentra discos no conectados a ninguna máquina virtual.
- IP públicas huérfanas: localiza direcciones IP públicas sin usar.
- Grupos de seguridad de red sin usar: identifica NSG no asociados a ningún recurso.
- Conjuntos de disponibilidad sin usar: detecta conjuntos de disponibilidad que ya no se usan.
- Grupos de recursos vacíos: marca grupos de recursos sin recursos activos.
- Redes virtuales sin usar: resalta redes virtuales potencialmente sin usar (solo se resaltan; el script no las eliminará).
- Direcciones IP reservadas pero sin usar: identifica direcciones IP reservadas pero no asignadas activamente.
Requisitos
Para usar el script de Azure Resource Cleanup, asegúrate de que se cumplen los siguientes requisitos previos:
- Versión de PowerShell: 5.1 o superior
- Módulo Az de PowerShell: instálalo con el comando:
Install-Module -Name Az - Permisos de la cuenta de Azure: asegúrate de tener los permisos adecuados para ver y eliminar recursos.
Uso
Modo de informe
Ejecuta el script en modo de informe para generar un informe detallado de los recursos huérfanos:
.\Azure-Resource-Cleanup.ps1

Modo de limpieza
Para eliminar los recursos identificados, usa el modo de limpieza:
.\Azure-Resource-Cleanup.ps1 -DeleteResources
Personalizar la retención de instantáneas
Especifica los días de retención de instantáneas para identificar instantáneas más antiguas que deban limpiarse:
.\Azure-Resource-Cleanup.ps1 -SnapshotRetentionDays 7 -DeleteResources

Excluir las comprobaciones de instantáneas de almacenamiento
Omite las comprobaciones de instantáneas de blobs y de recursos compartidos de archivos de cuentas de almacenamiento en entornos grandes:
.\Azure-Resource-Cleanup.ps1 -IncludeStorageSnapshots:$false
Notas importantes
Ejecutar en redes virtuales permitidas
Asegúrate de que el script se ejecuta dentro de una red virtual permitida. Debido a restricciones de red, algunas cuentas de almacenamiento pueden prohibir el acceso a contenedores o instantáneas de archivos. Si la cuenta de almacenamiento no admite operaciones de eliminación, es posible que encuentres errores al intentar limpiar estos recursos.
Probar en entornos de desarrollo/pruebas
Se recomienda encarecidamente probar el script en entornos de desarrollo o de pruebas antes de usarlo en producción. Así podrás revisar el comportamiento del script, identificar posibles problemas y verificar los recursos marcados para la limpieza.
Usar el modo de solo informe
En entornos de producción, empieza siempre ejecutando el script en modo de solo informe (sin el parámetro -DeleteResources). Esto proporciona un informe detallado de los recursos huérfanos, lo que permite revisar y validar los elementos marcados antes de iniciar las operaciones de limpieza.
Parámetros
El script admite varios parámetros personalizables:
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
SnapshotRetentionDays | Integer | 3 | Período de retención de instantáneas (en días). Las instantáneas más antiguas se marcarán para su limpieza. |
DeleteResources | Switch | $false | Habilita la eliminación de los recursos identificados. Por defecto, el script solo genera informes. |
IncludeStorageSnapshots | Switch | $true | Incluye comprobaciones de instantáneas de blobs y de recursos compartidos de archivos. Establécelo en $false para excluir estas comprobaciones. |
Salida del informe
El script genera informes detallados en una carpeta con marca de tiempo, que incluyen:
orphaned_nics.csvold_managed_snapshots.csvold_blob_snapshots.csvold_fileshare_snapshots.csvorphaned_disks.csvorphaned_public_ips.csvorphaned_nsgs.csvunused_availability_sets.csvempty_resource_groups.csvunused_vnets.csvsubnet_ip_usage.csvcleanup_log.txt(registro completo de las acciones realizadas)
Prácticas recomendadas
- Empieza con el modo de informe: ejecuta siempre el script sin el parámetro
-DeleteResourcespara revisar los recursos marcados. - Revisa los informes: analiza detenidamente los archivos CSV generados antes de iniciar las operaciones de limpieza.
- Establece períodos de retención: personaliza los períodos de retención de instantáneas según las políticas de la organización.
- Prueba en entornos que no sean de producción: ejecuta el script en entornos de desarrollo/pruebas para validar su comportamiento antes de usarlo en producción.
- Ejecuta en redes virtuales permitidas: asegúrate de que el script se ejecuta en vNets permitidas para evitar errores relacionados con la red en la limpieza de cuentas de almacenamiento.
Flujo de trabajo de ejemplo
Sigue este flujo de trabajo para limpiar los recursos de Azure de forma segura:
- Ejecuta el script en modo de informe:
.\Azure-Resource-Cleanup.ps1 - Revisa los informes generados para ver los recursos marcados.
- Continúa con confianza con el modo de limpieza:
.\Azure-Resource-Cleanup.ps1 -DeleteResources