[英]Create and upload csv file to azure blob storage using python
[英]Azure: create storage account with container and upload blob to it in Python
我正在嘗試在 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_url”我嘗試過這樣做:
client = get_client_from_auth_file(BlobServiceClient, account_url=storage_account.primary_endpoints.blob)
return client.create_container(name)
但我得到:
azure.core.exceptions.ResourceNotFoundError: The specified resource does not exist
我確實設法使用以下方法創建了一個容器:
client = get_client_from_auth_file(StorageManagementClient)
return client.blob_containers.create(
resourceGroup,
storage_account.name,
name,
BlobContainer(),
public_access=PublicAccess.Container
)
但后來當我嘗試使用 BlobServiceClient 或 BlobClien 上傳 blob 時,我仍然需要“account_url”,所以我仍然收到錯誤消息:
azure.core.exceptions.ResourceNotFoundError: The specified resource does not exist
任何人都可以幫助我了解如何獲取我使用 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
無法將憑據傳遞給BlobServiceClient
,因為如果只是使用沒有憑據的account_url
創建BlobServiceClient
它也可以打印帳戶名稱。
因此,如果您想使用憑證來獲取 BlobServiceClient,您可以使用以下代碼,然后執行其他操作。
credentials = ClientSecretCredential(
'tenant_id',
'application_id',
'application_secret'
)
blobserviceclient=BlobServiceClient(account_url=storage_account.primary_endpoints.blob,credential=credentials)
如果您不想要這種方式,您可以使用帳戶密鑰創建BlobServiceClient
。
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.