You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Python SDK锁定存储账户遇资源未找到错误求助

解决Azure Python SDK锁定存储账户的两个问题

一、排查ResourceNotFoundError异常

出现该错误的常见原因及解决方式:

  • 确认资源ID正确性:不要手动拼接存储账户的资源ID,建议通过ResourceManagementClient查询获取,或直接从Azure Portal存储账户的「属性」页复制完整资源ID。示例代码获取单个存储账户ID:
    from azure.mgmt.resource import ResourceManagementClient
    
    # 假设已初始化resource_client
    storage_account = resource_client.resources.get(
        resource_group_name="your-rg-name",
        resource_type="Microsoft.Storage/storageAccounts",
        resource_name="your-storage-account-name"
    )
    correct_resource_id = storage_account.id
    
  • 核对客户端订阅ID:确保ManagementLockClient初始化时使用的订阅ID和存储账户所在订阅一致,避免跨订阅操作导致找不到资源。
  • 验证权限配置:确认执行操作的身份(服务主体/用户账户)拥有Microsoft.Authorization/locks/write(创建锁定)和Microsoft.Storage/storageAccounts/read(读取存储账户信息)权限,权限不足可能会伪装成「资源未找到」的错误返回。

二、批量锁定资源组内所有存储账户

无需锁定整个资源组,可通过以下步骤逐个锁定资源组内的存储账户:

  1. 列出目标资源组中所有类型为Microsoft.Storage/storageAccounts的资源
  2. 遍历每个存储账户,调用锁定接口创建资源级锁定

完整示例代码

from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.locks import ManagementLockClient
from azure.mgmt.resource.locks.models import ManagementLockObject

# 假设已完成客户端初始化(包含 credential、subscription_id)
resource_client = ResourceManagementClient(credential, subscription_id)
lock_client = ManagementLockClient(credential, subscription_id)

resource_group_name = "your-target-rg"
lock_level = "CanNotDelete"  # 可选值:CanNotDelete / ReadOnly
lock_name_prefix = "storage-account-lock-"

# 1. 获取资源组内所有存储账户
storage_accounts = resource_client.resources.list_by_resource_group(
    resource_group_name=resource_group_name,
    filter="resourceType eq 'Microsoft.Storage/storageAccounts'"
)

# 2. 遍历创建锁定
for sa in storage_accounts:
    lock_name = f"{lock_name_prefix}{sa.name}"
    try:
        lock_client.management_locks.create_or_update_at_resource_level(
            resource_group_name=resource_group_name,
            resource_type=sa.type,
            resource_name=sa.name,
            lock_name=lock_name,
            parameters=ManagementLockObject(level=lock_level)
        )
        print(f"成功为存储账户 {sa.name} 创建锁定")
    except Exception as e:
        print(f"为存储账户 {sa.name} 创建锁定失败: {str(e)}")

注意事项

  • 锁定名称需在资源级别唯一,建议用前缀+存储账户名的方式避免重复
  • 可根据需求调整lock_level,CanNotDelete禁止删除资源,ReadOnly禁止修改资源
  • Azure SDK暂不支持批量创建锁定,需逐个执行操作

内容的提问来源于stack exchange,提问作者sai siddhartha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:10:39