Hex.pm Hex Docs CI Coverage Status License

Azure platform SDK for Elixir and Erlang.

AzureSDK is not a Blob Storage library. It is a long-term, multi-service Azure SDK built on BEAM-native patterns: explicit client structs, OTP-ready design, first-class telemetry, and a reusable Req pipeline.

v0.1.0 ships Blob Storage on top of the foundation. Queue, Table, Management, and BEAM integrations are architected from day one.

Installation

def deps do
  [
    {:azure_sdk, "~> 0.1.0"}
  ]
end

Quick start

credential =
  AzureSDK.Identity.SharedKeyCredential.new(
    "myaccount",
    System.fetch_env!("AZURE_STORAGE_KEY")
  )

client =
  AzureSDK.Storage.Client.new(
    account: "myaccount",
    credential: credential
  )

{:ok, _} = AzureSDK.Storage.Container.create(client, "uploads")
{:ok, blob} = AzureSDK.Storage.Blob.upload(client, "uploads", "hello.txt", "Hello, Azure!")

Local development with Azurite

docker compose up -d
client =
  AzureSDK.Storage.Client.new(
    account: "devstoreaccount1",
    credential:
      AzureSDK.Identity.SharedKeyCredential.new(
        "devstoreaccount1",
        "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
      ),
    endpoint: "http://127.0.0.1:10000/devstoreaccount1"
  )
AZURITE=true mix test

Architecture

AzureSDK
 Identity Plane      (SharedKey, SAS; OAuth planned v0.2)
 Data Plane          (Blob v0.1; Queue, Table, File, Data Lake stubbed)
 Management Plane    (stubbed for v0.5)
 Platform Services   (Pipeline, Telemetry, Retry)

See plans/architecture.md for the full design.

Documentation

ResourceLocation
API reference and guideshexdocs.pm/azure_sdk
Architecture plansplans/
Livebookslivebooks/
ChangelogCHANGELOG.md
Roadmapplans/roadmap.md

Telemetry

Every operation emits :telemetry events:

:telemetry.attach("ex-azure", [:azure_sdk, :request, :stop], fn _, %{duration: d}, meta, _ ->
  IO.inspect({d, meta})
end, nil)

See plans/telemetry-design.md for the full event catalog.

License

MIT