【问题标题】:How do you delete everything in a resource group except for specific resources programmatically?您如何以编程方式删除资源组中除特定资源之外的所有内容?
【发布时间】:2021-05-25 18:02:51
【问题描述】:

假设我有一个资源组 MyAppRG。它有一个存储帐户、一个 SQL 服务器、一个密钥库和一个 VM。如何以编程方式删除资源组中除了存储帐户和密钥库之外的所有内容?

我知道有一种方法可以通过部署一个空的 arm 模板部署来删除资源组中的所有内容。我尝试在资源上使用 Get-AzResource 并将其添加到 ARM 模板的资源参数中,但它不起作用。像这样的:

$storageAccounts = Get-AzStorageAccount -ResourceGroupName "MyAppRG" | Get-AzResource
$emptyArmTemplate = @{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  contentVersion: "1.0.0.0",
  "resources": @(storageAccounts),
}

New-AzResourceGroupDeployment -Name "test" -ResourceGroupName "MyAppRG" -TemplateObject $emptyArmTemplate -Force

但这不起作用,因为请求无效。

【问题讨论】:

    标签: azure azure-resource-manager azure-resource-group azure-stack


    【解决方案1】:

    您可以使用标签“过滤掉”您希望保留的资源,但这种方法的缺点是您需要知道删除资源的顺序。例如,您需要在删除应用托管计划之前删除 Web 应用。在下面的示例中,我有一个名为“DELETE”的标签,其值为“TRUE”。

    get-AZresource -tagname delete -tagvalue true | Remove-AzResource
    

    老实说,更好的方法是将您不想删除的所有项目保留在单独的资源组中,并认为 RG 具有生命周期边界。这样,当您准备好删除不需要的项目时,您可以在一个命令中吹走整个 RG。

    此外,如果您担心有人不小心删除了某些资源,您应该使用resource locks 在删除前添加另一个检查点。

    【讨论】:

    • 我想做后者,但是以我们的环境设置方式,这将是困难的。这适用于我们的开发沙箱,并且在我们的每个资源组中,我们都有 RBAC 依赖项,我们必须调用我们的管理员进行设置,例如数据工厂需要对存储帐户的读/写权限。我认为我们毕竟必须使用 Remove-AzResource,这是我试图避免的,因为存在您在回答中所述的依赖项。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多