使用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(读取存储账户信息)权限,权限不足可能会伪装成「资源未找到」的错误返回。
二、批量锁定资源组内所有存储账户
无需锁定整个资源组,可通过以下步骤逐个锁定资源组内的存储账户:
- 列出目标资源组中所有类型为
Microsoft.Storage/storageAccounts的资源 - 遍历每个存储账户,调用锁定接口创建资源级锁定
完整示例代码
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
相关产品推荐
相关产品推荐

