Microsoft Azure: eliminación de servicios no utilizados de Azure

En este artículo, aprenderemos cómo mantener limpia su suscripción de Azure. La mayoría de los equipos que trabajan en una suscripción de Azure olvidan eliminar los recursos no utilizados. Esto hace que sea difícil ver qué recursos se siguen utilizando y le obliga a pagar por los recursos que no utiliza. 

Aquí, por ejemplo, tenemos una cuenta de almacenamiento de Azure que no usamos. Limpiemos eso con un script. A continuación se muestra un script de PowerShell. Limpia los recursos no utilizados. 

$connectionName="AzureRunAsConnection"

try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-Automation Connection -Name $connectionName

    Connect-AzAccount
        -ServicePrincipal
        -Tenant $servicePrincipalConnection. Tenant Id
        -Applicationid Sservice PrincipalConnection. ApplicationId
        -CertificateThumbprint Sservice Principal Connection.CertificateThumbprint
}

catch{
    if (!$servicePrincipalConnection);
    {
        $ErrorMessage = "Connection SconnectionName not found."
        throw $ErrorMessage

    } else{

        Write-Error Message $_.Exception 
        throw $_.Exception
        }
}

$expResources Search-AzGraph -Query 'where todatetime(tags.expireOn)< now()| project id'

foreach ($r in $expResources) {
    Remove-AzResource ResourceId $r-id-Force
}

$rgs Get-AzResourceGroup;

foreach($resourceGroup in $rgs) {
    $names SresourceGroup. ResourceGroupName; 
    $count (Get-AzResource | Where-Object: $_.ResourceGroupName -match $name }). Count;

$rgs = Get-AzResourceGroup;

foreach($resourceGroup in $rgs) {
    $names = $resourceGroup.ResourceGroupName;
    $count = (Get-AzResource | Where-Object( $_.ResourceGroupName -match $name )).Count;
if ($count -eq 0){ 
    Remove-AzResourceGroup -Name $name -Force
    }
}

Lo primero que hace el script es iniciar sesión en Azure mediante un principio de servicio. 

$connectionName="AzureRunAsConnection"

try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-Automation Connection -Name $connectionName

    Connect-AzAccount
        -ServicePrincipal
        -Tenant $servicePrincipalConnection. Tenant Id
        -Applicationid Sservice PrincipalConnection. ApplicationId
        -CertificateThumbprint Sservice Principal Connection.CertificateThumbprint
}

catch{
    if (!$servicePrincipalConnection);
    {
        $ErrorMessage = "Connection SconnectionName not found."
        throw $ErrorMessage

    } else{

        Write-Error Message $_.Exception 
        throw $_.Exception
        }
}

 A continuación, usamos el gráfico de recursos de Azure para obtener los recursos que deben limpiarse. Desafortunadamente, no existe una manera fácil de determinar qué recursos deben eliminarse, por lo que necesitamos que los usuarios creen una etiqueta para esos recursos. Una etiqueta llamada expireOn con un valor de la fecha en que debería caducar. Aquí, obtenemos todos los recursos con una fecha anterior a la actual. 

$expResources Search-AzGraph -Query 'where todatetime(tags.expireOn)< now()| project id'

El script recorre los recursos y los elimina.

foreach ($r in $expResources) {
    Remove-AzResource ResourceId $r-id-Force
}

Finalmente, debido a que el gráfico de recursos de Azure no devuelve grupos de recursos, los obtenemos todos y los iteramos, y cuando un grupo de recursos está vacío, se elimina. 

$rgs Get-AzResourceGroup;

foreach($resourceGroup in $rgs) {
    $names SresourceGroup. ResourceGroupName; 
    $count (Get-AzResource | Where-Object: $_.ResourceGroupName -match $name }). Count;

$rgs = Get-AzResourceGroup;

foreach($resourceGroup in $rgs) {
    $names = $resourceGroup.ResourceGroupName;
    $count = (Get-AzResource | Where-Object( $_.ResourceGroupName -match $name )).Count;
if ($count -eq 0){ 
    Remove-AzResourceGroup -Name $name -Force
    }
}

Etiquetar recursos es fácil. Puede hacerlo en el portal con la CLI de Azure o en una plantilla de Azure Resource Manager. Aquí, podemos agregar una etiqueta a la cuenta de almacenamiento, expireOn y la fecha debe tener el formato de año, mes, día. Eso es todo.

Para automatizar el proceso, ejecutaremos el script con Azure Automation. Primero, le daremos un nombre y, a continuación, seleccionaremos un grupo de recursos. Esto crea el principio de servicio que usa el script para iniciar sesión en Azure. 

Aquí está la cuenta de Azure Automation. Los scripts usan módulos de PowerShell que no están instalados de forma predeterminada. Así que tenemos que instalarlos primero. Para esto, haga clic en «Examinar galería» y podemos elegirlos desde aquí. 

Primero, necesitamos una cuenta AZ y debemos importarlos. 

A continuación, busque el gráfico de recursos AZ que usamos para consultar el gráfico de recursos e impórtelo. 

Y finalmente, busque AZ Resources e impórtelo también. 

Ahora, crearemos un Runbook. Este es el mecanismo que usamos para ejecutar el script de PowerShell en Azure. Primero, asígnele un nombre y seleccione PowerShell para el tipo de runbook y cree.

 Ahora, pegue el script, guarde el runbook y publíquelo para que podamos usarlo.

Para que se ejecute automáticamente, le agregaremos un horario. Necesitamos darle un nombre al horario. Ahora, seleccione una fecha y hora de inicio. 

Esto ejecutará el script todos los días. Ahora, cuando observamos nuestro grupo de recursos, se elimina la cuenta de almacenamiento. El guión funcionó. Es importante eliminar los recursos de Azure no utilizados para mantener sus costos bajo control y su suscripción de Azure limpia. Puedes hacerlo con un script y automatizarlo con Azure Automation.

Publicación traducida automáticamente

Artículo escrito por Akanksha_Rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *