当资源组上有删除锁时,如何使用 Powershell 停止 Azure 数据工厂的存储事件触发器?

How to stop a Storage Event Trigger of Azure Data Factory using Powershell when there is a Delete lock on the Resource group?

我想在使用 ARM deployment/Azure DevOps 修改数据工厂之前停止数据工厂上的存储事件触发器。当我尝试使用 powershell (Stop-AzDataFactoryV2Trigger) 停止触发器时,我的资源组上有一个删除锁导致以下错误:

Error Code: BadRequest
Error Message: The scope '/subscriptions/XXX/resourceGroups/XXX/providers/Microsoft.Storage/storageAccounts/XXX/providers/Microsoft.EventGrid/eventSubscriptions/XXX' 
cannot perform delete operation because following scope(s) are locked: '/subscriptions/XXX/resourceGroups/XXX'. Please remove the lock and try again.

有没有什么方法可以在不删除此删除锁的情况下执行我的 ADF 部署?

以下示例脚本可用于在部署前停止触发器。

if ($predeployment -eq $true) {
    #Stop all triggers
    Write-Host "Stopping deployed triggers`n"
    $triggersToStop | ForEach-Object {
        if ($_.TriggerType -eq "BlobEventsTrigger" -or $_.TriggerType -eq "CustomEventsTrigger") {
            Write-Host "Unsubscribing" $_.Name "from events"
            $status = Remove-AzDataFactoryV2TriggerSubscription -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name
            while ($status.Status -ne "Disabled"){
                Start-Sleep -s 15
                $status = Get-AzDataFactoryV2TriggerSubscriptionStatus -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name
            }
        }
        Write-Host "Stopping trigger" $_.Name
        Stop-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name -Force
    }

有关详细信息,请参阅官方文档中给出的Pre- and Post-deployment script

经过一些研究和挖掘,我发现这个问题的直接答案是当有删除锁时,不可能 Start/Stop 数据工厂上的存储事件触发器整个资源组。 这是因为无论何时启动或停止存储事件触发器,都会在资源组中创建和删除事件订阅(它是一种资源),但是在删除锁定的情况下,这种删除不会发生.

但是,满足此要求的解决方法很少:

  1. 在资源级别而不是在资源级别拥有删除锁 组级。
  2. 将数据工厂和存储帐户移动到不同的资源组 没有删除锁。
  3. 部署ADF前删除“删除锁”,部署后重新创建 部署。为此,用于执行部署的服务主体 应该具有 update/delete 锁所需的权限。

如果有人能直接解决这个问题,我很乐意接受它作为答案。谢谢。