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 自动化将其自动化。