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

Posted

技术标签:

【中文标题】当资源组上有删除锁时,如何使用 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? 【发布时间】:2022-01-23 00:47:56 【问题描述】:

我想在使用 ARM 部署/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 部署无需移除此删除锁?

【问题讨论】:

【参考方案1】:

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

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。

【讨论】:

对我的情况没有帮助,因为资源组级别有一个删除锁。停止存储事件触发器本质上是删除事件订阅,而删除锁不允许这种情况发生。感谢您提出的答案,但也感谢任何其他解决方案。【参考方案2】:

经过一番研究和挖掘,我发现这个问题的直接答案是当整个资源组上存在删除锁时,无法在数据工厂上启动/停止存储事件触发器. 这是因为每当启动或停止存储事件触发器时,都会在资源组中创建和删除事件订阅(它是一种资源),但如果设置了删除锁,则不会发生这种删除

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

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

如果有人对此问题有直接的解决方案,我很乐意接受它作为答案。谢谢。

【讨论】:

以上是关于当资源组上有删除锁时,如何使用 Powershell 停止 Azure 数据工厂的存储事件触发器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不卸载powershell的情况下,有效禁用/启用powershel

当作者试图进入写锁时如何避免阻塞 ReaderWriterLockSlim 读者

如何在整个 Azure 管理组上运行 powershell 脚本以跨越多个订阅?

使用 Terraform 导入 Azure 上的现有资源

sh 更新Azure资源组上的标记

释放文件锁时如何通知另一个进程?