Azure Bicep 不会删除存储容器

问题描述 投票:0回答:1

我有一个部署存储帐户和容器的 Azure Bicep 模板。但是,当我重命名容器或注释掉模板中的容器资源时,不会触发删除操作。相反,它会创建一个新容器并且不会删除旧容器。有什么想法为什么会发生这种情况吗?

注意:我使用Mode Complete 来部署

我有一个 main.bicep 文件,其中包含

param location string = resourceGroup().location

param storageAccountName string = 'test${uniqueString('newstring')}'
param storageContainerName string = 'testcontainer'

module storagAccounts '../resources/storage/storageAccounts.bicep' = {
  name: 'storageAccounts'
  params: {
     location: location
     storageAccountName: storageAccountName
  } 
}

module blobServices '../resources/storage/blobServices.bicep' = {
name: 'blobServices'
params: {
  storageAccountName: storagAccounts.outputs.storageAccountName
 }
}

module blobContainer '../resources/storage/containers.bicep' = {
 name: 'blobContainer'
 params: {
   containerName: storageContainerName
   blobServicesName: blobServices.outputs.blobServicesName
   storageAccountName: storagAccounts.outputs.storageAccountName
 }
}

我有一个 storageAccounts.bicep 包含

targetScope = 'resourceGroup'

@minLength(3)
@maxLength(24)
param storageAccountName string

param location string

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }

  tags: {
    environment: 'test'
  }

 
}

output storageAccountId string = storageAccount.id
output storageAccountName string = storageAccountName

一个 blobServices.bicep

param storageAccountName string 
param blobServicesName string = 'default'

resource blobServices 'Microsoft.Storage/storageAccounts/blobServices@2023-01-01' = {
  name: '${storageAccountName}/${blobServicesName}'
}

output blobServicesName string = blobServicesName

和一个包含

的container.bicep
param storageAccountName string
param blobServicesName string
param containerName string

resource storageContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2023-01-01' = {
  name: '${storageAccountName}/${blobServicesName}/${containerName}'
  properties: {
    publicAccess: 'None'
  }
}

output storageContainerName string = storageContainer.name

为了部署,我使用 PowerShell 脚本

Get-AzResourceGroupDeploymentWhatIfResult -Mode Complete -Location westeurope -TemplateFile modules/main.bicep -ResourceGroup testResourceGroup


New-AzResourceGroupDeployment -Name deployment1 -Mode Complete -Location westeurope -TemplateFile modules/main.bicep -ResourceGroup testResourceGroup -Force
azure azure-resource-manager azure-bicep infrastructure-as-code
1个回答
0
投票

根据文档,这是存储帐户的预期行为:

资源类型可能会以不同的方式处理完整模式删除。如果父资源未在以完整模式部署的模板中定义,则会自动删除。此外,当父资源未包含在模板中时,子资源会自动删除。但是,某些子资源在模板中未定义时会被删除,但其他子资源不会被删除。有关资源类型如何处理删除的列表,请参阅删除完整模式部署的 Azure 资源

例如,如果您的资源组包含存储帐户(Microsoft.Storage/storageAccounts 资源类型)和 Blob 服务(Microsoft.Storage/storageAccounts/blobServices 资源类型),则存储帐户是 Blob 服务的父资源。如果使用完整模式进行部署并且不在模板中包含存储帐户,则存储帐户和 Blob 服务都会被删除。如果您在模板中包含存储帐户但不包含 Blob 服务,则不会删除 Blob 服务。

更多信息可以在这里找到:

© www.soinside.com 2019 - 2024. All rights reserved.