簡體   English   中英

Azure:使用容器創建存儲帳戶並將 Blob 上傳到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM