我有一个部署存储帐户和容器的 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.bicepparam 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 资源。
例如,如果您的资源组包含存储帐户(Microsoft.Storage/storageAccounts 资源类型)和 Blob 服务(Microsoft.Storage/storageAccounts/blobServices 资源类型),则存储帐户是 Blob 服务的父资源。如果使用完整模式进行部署并且不在模板中包含存储帐户,则存储帐户和 Blob 服务都会被删除。如果您在模板中包含存储帐户但不包含 Blob 服务,则不会删除 Blob 服务。
更多信息可以在这里找到: