Skip to main content

Configuring Azure Blob Storage (ABFS)

To use Azure Blob Storage (ABFS) in flyte-sdk, you configure credentials via environment variables. When you use a path with the abfs:// or abfss:// protocol in storage operations like get or put, flyte-sdk automatically detects the protocol and initializes the ABFS configuration.

Authenticating with Account Name and Key​

The most direct way to authenticate is by providing your Azure Storage account name and its associated access key.

import os
import asyncio
from flyte import storage

# Set environment variables for authentication
os.environ["AZURE_STORAGE_ACCOUNT_NAME"] = "myaccount"
os.environ["AZURE_STORAGE_ACCOUNT_KEY"] = "my-secret-key"

async def download_data():
# flyte-sdk automatically uses ABFS.auto() to load credentials
# when it sees the abfs:// protocol
local_path = await storage.get("abfs://my-container/data.csv")
print(f"Downloaded to: {local_path}")

asyncio.run(download_data())

Authenticating with a Service Principal​

For production environments, you can authenticate using an Azure Service Principal by providing the tenant ID, client ID, and client secret.

import os
import asyncio
from flyte import storage

# Set environment variables for Service Principal authentication
os.environ["AZURE_STORAGE_ACCOUNT_NAME"] = "myaccount"
os.environ["AZURE_TENANT_ID"] = "your-tenant-id"
os.environ["AZURE_CLIENT_ID"] = "your-client-id"
os.environ["AZURE_CLIENT_SECRET"] = "your-client-secret"

async def upload_data():
# The ABFS configuration is resolved implicitly
remote_path = await storage.put("local_file.txt", to_path="abfs://my-container/remote_file.txt")
print(f"Uploaded to: {remote_path}")

asyncio.run(upload_data())

Configuration Reference​

The ABFS class in storage/_config.py maps the following environment variables to its configuration fields:

Environment VariableABFS FieldDescription
AZURE_STORAGE_ACCOUNT_NAMEaccount_nameThe name of your Azure Storage account.
AZURE_STORAGE_ACCOUNT_KEYaccount_keyThe access key for the storage account.
AZURE_TENANT_IDtenant_idThe Azure AD tenant ID.
AZURE_CLIENT_IDclient_idThe Service Principal client ID.
AZURE_CLIENT_SECRETclient_secretThe Service Principal client secret.

Programmatic Configuration​

While flyte-sdk is designed to load configuration automatically via ABFS.auto(), you can manually instantiate the ABFS class if you need to pass it to specific internal components.

from flyte.storage import ABFS

# Manually create a configuration object
config = ABFS(
account_name="myaccount",
account_key="my-key"
)

# Generate kwargs for fsspec
fsspec_args = config.get_fsspec_kwargs()
# Resulting dict includes 'config' with credentials and 'client_options'

Troubleshooting and Gotchas​

  • Implicit Loading: Configuration is loaded at the moment a storage function (like storage.get or storage.put) is called with an abfs:// path. If environment variables are missing, the operation may fail or attempt an anonymous connection.
  • Credential Priority: The ABFS class does not enforce a specific authentication method if both account keys and service principal details are provided. Ensure you only set the variables required for your chosen method to avoid ambiguous authentication states.
  • Obstore Integration: flyte-sdk uses obstore for high-performance streaming. For abfs paths, put_stream and get_stream use an internal bypass (_put_stream_obstore_bypass) to handle async operations, which relies on specific fsspec filesystem structures.