我正在尝试在Azure中创建一个存储帐户,并使用他们的python SDK将一个blob上传到该帐户中。我设法创建了一个如下的帐户:
client = get_client_from_auth_file(StorageManagementClient)
storage_account = client.storage_accounts.create(
resourceGroup,
name,
StorageAccountCreateParameters(
sku=Sku(name=SkuName.standard_ragrs),
enable_https_traffic_only=True,
kind=Kind.storage,
location=region)).result()
问题是,稍后我尝试构建一个容器,但我不知道插入什么作为“account\u url”,我已经尝试过这样做:
client = get_client_from_auth_file(BlobServiceClient, account_url=storage_account.primary_endpoints.blob)
return client.create_container(name)
但是我得到了:
azure。果心例外情况。ResourceNotFoundError:指定的资源不存在
我确实使用以下方法创建了一个容器:
client = get_client_from_auth_file(StorageManagementClient)
return client.blob_containers.create(
resourceGroup,
storage_account.name,
name,
BlobContainer(),
public_access=PublicAccess.Container
)
但稍后,当我尝试使用BlobServiceClient或BlobClient上载blob时,我仍然需要“account_url”,因此我仍然会遇到一个错误:
azure。果心例外情况。ResourceNotFoundError:指定的资源不存在
任何人都可以帮助我了解如何获得使用SDK创建的存储帐户的account_url?
编辑:通过从存储密钥创建连接字符串,我设法找到了解决问题的方法。
storage_client = get_client_from_auth_file(StorageManagementClient)
storage_keys = storage_client.storage_accounts.list_keys(resource_group, account_name)
storage_key = next(v.value for v in storage_keys.keys)
return BlobServiceClient.from_connection_string(
'DefaultEndpointsProtocol=https;' +
f'AccountName={account_name};' +
f'AccountKey={storage_key};' +
'EndpointSuffix=core.windows.net')
这很管用,但我觉得乔治·陈的回答更优雅。
我可以重现这个问题,然后我发现get_client_from_auth_file
不能将凭据传递给BobServiceClient
,因为如果只是创建BobServiceClient
与account_url
没有凭据,它也可以打印帐户名称。
因此,如果您想使用凭据来获取BobServiceClient,您可以使用下面的代码,然后执行其他操作。
credentials = ClientSecretCredential(
'tenant_id',
'application_id',
'application_secret'
)
blobserviceclient=BlobServiceClient(account_url=storage_account.primary_endpoints.blob,credential=credentials)
如果您不希望这样,您可以使用帐户密钥创建BobServiceClient
。
client = get_client_from_auth_file(StorageManagementClient,auth_path='auth')
storage_account = client.storage_accounts.create(
'group name',
'account name',
StorageAccountCreateParameters(
sku=Sku(name=SkuName.standard_ragrs),
enable_https_traffic_only=True,
kind=Kind.storage,
location='eastus',)).result()
storage_keys = client.storage_accounts.list_keys(resource_group_name='group name',account_name='account name')
storage_keys = {v.key_name: v.value for v in storage_keys.keys}
blobserviceclient=BlobServiceClient(account_url=storage_account.primary_endpoints.blob,credential=storage_keys['key1'])
blobserviceclient.create_container(name='container name')