当资源组上有删除锁时,如何使用 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 数据工厂上的存储事件触发器整个资源组。 这是因为无论何时启动或停止存储事件触发器,都会在资源组中创建和删除事件订阅(它是一种资源),但是在删除锁定的情况下,这种删除不会发生.
但是,满足此要求的解决方法很少:
- 在资源级别而不是在资源级别拥有删除锁
组级。
- 将数据工厂和存储帐户移动到不同的资源组
没有删除锁。
- 部署ADF前删除“删除锁”,部署后重新创建
部署。为此,用于执行部署的服务主体
应该具有 update/delete 锁所需的权限。
如果有人能直接解决这个问题,我很乐意接受它作为答案。谢谢。
我想在使用 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 数据工厂上的存储事件触发器整个资源组。 这是因为无论何时启动或停止存储事件触发器,都会在资源组中创建和删除事件订阅(它是一种资源),但是在删除锁定的情况下,这种删除不会发生.
但是,满足此要求的解决方法很少:
- 在资源级别而不是在资源级别拥有删除锁 组级。
- 将数据工厂和存储帐户移动到不同的资源组 没有删除锁。
- 部署ADF前删除“删除锁”,部署后重新创建 部署。为此,用于执行部署的服务主体 应该具有 update/delete 锁所需的权限。
如果有人能直接解决这个问题,我很乐意接受它作为答案。谢谢。