📌  相关文章
📜  Microsoft Azure – 从 Azure 中删除未使用的服务

📅  最后修改于: 2022-05-13 01:57:09.919000             🧑  作者: Mango

Microsoft Azure – 从 Azure 中删除未使用的服务

在本文中,我们将学习如何保持 Azure 订阅干净。大多数在 Azure 订阅中工作的团队忘记删除未使用的资源。这使您很难查看哪些资源仍在使用,并且您需要为不使用的资源付费。

例如,我们有一个不使用的 Azure 存储帐户。让我们用一个脚本来清理它。下面给出的是一个 PowerShell 脚本。它清理未使用的资源。

$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
    }
}

该脚本所做的第一件事是使用服务原则登录到 Azure。

$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
        }
}

接下来,我们使用 Azure 资源图来获取应该清理的资源。不幸的是,没有简单的方法来确定应该删除哪些资源,因此我们需要用户为这些资源创建标签。一个名为expireOn的标签,其值为到期日期。在这里,我们获取日期早于今天的所有资源。

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

该脚本循环遍历资源并删除它们。

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

最后,由于 Azure 资源图不返回资源组,我们获取所有资源组并对其进行迭代,当资源组为空时,它会被删除。

$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
    }
}

标记资源很容易。您可以在门户中使用 Azure CLI 或在 Azure 资源管理器模板中执行此操作。在这里,我们可以为存储帐户添加一个标签, expireOn ,并且日期必须格式化为年、月、日。就是这样。

为了自动化该过程,我们将使用Azure 自动化运行脚本。首先,我们将为其命名,然后,我们将选择一个资源组。这将创建脚本用于登录 Azure 的服务原则。

这是 Azure 自动化帐户。这些脚本使用默认情况下未安装的 PowerShell 模块。所以我们必须先安装它们。为此,请单击“浏览图库” ,我们可以从此处选择它们。

首先,我们需要AZ Account ,我们需要导入它们。

接下来,搜索我们用来查询资源图并导入的AZ Resource 图

最后,搜索AZ Resources并将其导入。

现在,我们将创建一个 Runbook。这是我们用来在 Azure 中运行 PowerShell 脚本的机制。首先,为其命名并为 Runbook 类型选择 PowerShell 并创建。

现在,粘贴脚本并保存 Runbook 并将其发布,以便我们可以使用它。

为了让它自动运行,我们将为其添加一个时间表。我们需要为时间表命名。现在,选择开始日期和时间。

这将每天运行脚本。所以现在,当我们查看资源组时,存储帐户已被删除。该脚本有效。删除未使用的 Azure 资源以控制成本和明确 Azure 订阅非常重要。您可以使用脚本执行此操作,并使用 Azure 自动化将其自动化。