I want to move (or copy then delete) files/blobs between two storage accounts using python (in an azure function). I've used methods like this. However this works for older SDKs, does anyone know a way for new SDK?
Something like this but between two storage accounts rather than containers.
If you want to copy blob across Azure storage account, please refer to the following code
from azure.storage.blob import ResourceTypes, AccountSasPermissions, generate_account_sas, BlobServiceClient
from datetime import datetime, timedelta
source_key = ''
des_key = ''
source_account_name = ''
des_account_name = '23storage23'
# genearte account sas token for source account
sas_token = generate_account_sas(account_name=source_account_name, account_key=source_key,
resource_types=ResourceTypes(
service=True, container=True, object=True),
permission=AccountSasPermissions(read=True),
expiry=datetime.utcnow() + timedelta(hours=1))
source_blob_service_client = BlobServiceClient(
account_url=f'https://{source_account_name}.blob.core.windows.net/', credential=source_key)
des_blob_service_client = BlobServiceClient(
account_url=f'https://{des_account_name}.blob.core.windows.net/', credential=des_key)
source_container_client = source_blob_service_client.get_container_client(
'copy')
source_blob = source_container_client.get_blob_client('Capture.PNG')
source_url = source_blob.url+'?'+sas_token
# copy
des_blob_service_client.get_blob_client(
'test', source_blob.blob_name).start_copy_from_url(source_url)
Besides, if the access level of the source container is public, we can simplify the code as below
from azure.storage.blob import BlobServiceClient
source_key = ''
des_key = ''
source_account_name = ''
des_account_name = '23storage23'
source_blob_service_client = BlobServiceClient(
account_url=f'https://{source_account_name}.blob.core.windows.net/', credential=source_key)
des_blob_service_client = BlobServiceClient(
account_url=f'https://{des_account_name}.blob.core.windows.net/', credential=des_key)
source_container_client = source_blob_service_client.get_container_client(
'input')
source_blob = source_container_client.get_blob_client('file.json')
source_url = source_blob.url
# copy
des_blob_service_client.get_blob_client(
'test', source_blob.blob_name).start_copy_from_url(source_url)
For more details, please refer to here