πŸ’Ύ Azure Storage

Azure Storage Account
Complete Guide

Blob, Queue, Table, File Share, Data Lake Gen2 β€” tiers, redundancy, security, lifecycle policies, SAS, encryption, and every integration pattern from beginner to architect.

Beginner β†’ Architecture26 Sections5 Storage ServicesSDK ExamplesCLI Commands

01What Is Azure Storage Account?

Azure Storage Account is Microsoft Azure's foundational, massively scalable cloud storage service. It's the backbone of almost every Azure solution β€” storing files, database backups, IoT telemetry, web assets, message queues, and structured data. A single account is a top-level container for multiple services: Blob, Queue, Table, and File.

πŸ–ΌοΈ
Blob Storage
Files, images, videos, backups, logs, unstructured data up to 5 PiB
πŸ“¬
Queue Storage
Simple FIFO message queue for task decoupling, 64KB messages
πŸ—ƒοΈ
Table Storage
Serverless NoSQL key-value store for entity data and config
πŸ“
File Share
Fully managed SMB/NFS cloud file shares for lift-and-shift
πŸ”οΈ
Data Lake Gen2
Hierarchical namespace on Blob for big data analytics with Spark

02Storage Account Types

Azure offers several storage account kinds, each optimized for different workloads and performance requirements. Choosing the right type impacts cost, available services, and throughput guarantees. Use this comparison when provisioning new accounts or evaluating whether a Premium tier is justified for your latency-sensitive workloads.

KindServicesUse Case
General Purpose v2 (GPv2)Blob, Queue, Table, Fileβœ… Default β€” use for everything
Premium Block BlobsBlob onlyLow-latency blob ops (< 1ms)
Premium File SharesFile onlySMB/NFS with SSD performance
Premium Page BlobsPage Blobs onlyAzure VM Managed Disks
βœ…
RecommendationAlways create General Purpose v2 unless you have a specific Premium performance requirement. GPv2 supports all services, all access tiers, and all redundancy options.

03Storage Services Overview

A single storage account bundles multiple services, each designed for a distinct data shape and access pattern. Understanding the capacity limits and ideal use cases helps you pick the right service without over-engineering. Refer to this table when designing new features or migrating existing data stores to Azure.

ServiceShapeMax SizeUse Case
BlobObjects in containers5 PiB account, 190.7 TiB per blobImages, videos, backups, logs
QueueFIFO messages500 TB account, 64 KB per messageTask queues, decoupling
TableNoSQL key-value rows500 TBEntity data, device state, config
FileSMB/NFS share100 TiB per share, 4 TiB per fileLift-and-shift file shares
Data Lake Gen2Hierarchical namespaceSame as BlobBig data, Spark, Synapse

04Blob Storage β€” Deep Dive

Blob Storage is the most widely used Azure storage service, handling everything from static assets to multi-terabyte backups. It supports three blob types optimized for different I/O patterns, and offers rich SDK operations for upload, download, and access control. Master these fundamentals for any production workload that stores unstructured data.

Blob Types

TypeDescriptionUse Case
Block BlobMade of blocks (up to 50,000 Γ— 4000 MB)Files, images, videos, backups β€” most common
Append BlobBlocks can only be appended, not modifiedLog files, audit trails
Page BlobRandom read/write, 512-byte pagesVM disks, databases needing random I/O

SDK Operations β€” .NET

csharp
var serviceClient = new BlobServiceClient("connection-string");
var containerClient = serviceClient.GetBlobContainerClient("my-container");
await containerClient.CreateIfNotExistsAsync(PublicAccessType.None);

// Upload with metadata
var blobClient = containerClient.GetBlobClient("folder/file.json");
await blobClient.UploadAsync(
    BinaryData.FromString("{\"id\": 1}"),
    new BlobUploadOptions
    {
        Metadata = new Dictionary<string, string> { ["env"] = "prod" },
        Tags = new Dictionary<string, string> { ["project"] = "myapp" },
        HttpHeaders = new BlobHttpHeaders { ContentType = "application/json" }
    });

// Download
BlobDownloadResult result = await blobClient.DownloadContentAsync();
string content = result.Content.ToString();

// Generate SAS URL (1 hour read-only)
Uri sasUri = blobClient.GenerateSasUri(
    BlobSasPermissions.Read,
    DateTimeOffset.UtcNow.AddHours(1));

// List blobs
await foreach (BlobItem blob in containerClient.GetBlobsAsync())
    Console.WriteLine($"{blob.Name} β€” {blob.Properties.ContentLength} bytes");

Container Access Levels

LevelDescription
Private (default)No anonymous access β€” authentication always required
BlobAnonymous read for individual blobs only β€” no listing
ContainerAnonymous read + list all blobs in container
⚠️
Production RuleAlways use Private containers in production. Grant access via SAS tokens or Managed Identity.

Blob Versioning & Soft Delete

bash
# Enable soft delete (30-day retention)
az storage blob service-properties delete-policy update \
  --account-name mystorageaccount \
  --enable true --days-retained 30

# Enable versioning
az storage account blob-service-properties update \
  --account-name mystorageaccount \
  --enable-versioning true

05Queue Storage β€” Deep Dive

Azure Queue Storage is a simple, cost-effective message queue for asynchronous communication. Messages are up to 64KB, retained up to 7 days, and use a visibility timeout model.

csharp
var queueClient = new QueueClient("connection-string", "my-queue");
await queueClient.CreateIfNotExistsAsync();

// Enqueue
await queueClient.SendMessageAsync("Hello, World!");

// Enqueue with 30s visibility delay
await queueClient.SendMessageAsync(
    "Delayed task",
    visibilityTimeout: TimeSpan.FromSeconds(30),
    timeToLive: TimeSpan.FromHours(1));

// Dequeue (peek-lock)
QueueMessage[] messages = await queueClient.ReceiveMessagesAsync(maxMessages: 10);
foreach (var msg in messages)
{
    Console.WriteLine($"Message: {msg.MessageText}");
    // Process...
    await queueClient.DeleteMessageAsync(msg.MessageId, msg.PopReceipt);
}

// Get queue depth
QueueProperties props = await queueClient.GetPropertiesAsync();
Console.WriteLine($"Approx count: {props.ApproximateMessagesCount}");

06Table Storage β€” Deep Dive

Azure Table Storage is a serverless NoSQL key-value store. Entities have aPartitionKey + RowKey as primary key, plus up to 255 custom properties per entity.

csharp
var tableClient = new TableClient("connection-string", "Employees");
await tableClient.CreateIfNotExistsAsync();

// Insert entity
var emp = new TableEntity("Engineering", "emp001")
{
    ["Name"] = "Alice",
    ["Role"] = "Developer",
    ["Age"] = 30
};
await tableClient.AddEntityAsync(emp);

// Query (OData filter)
var results = tableClient.QueryAsync<TableEntity>(
    filter: TableClient.CreateQueryFilter(
        $"PartitionKey eq 'Engineering' and Age gt {25}"));

await foreach (var entity in results)
    Console.WriteLine($"{entity["Name"]} β€” {entity["Role"]}");

// Upsert (insert or replace)
await tableClient.UpsertEntityAsync(emp);

// Delete
await tableClient.DeleteEntityAsync("Engineering", "emp001");

PartitionKey Design

StrategyExampleNotes
By entity typeCustomer, OrderSimple, risk of hot partitions
By date2025-01, 2025-02Good for time-series range queries
By regionEU, US, APGeographic distribution
By tenanttenantId valueIdeal for multi-tenant SaaS apps
By hash prefixa3f-customerIdDistributes load across partitions evenly
⚠️
Hot Partition RiskAvoid putting all data in one partition β€” max 10,000 ops/sec per partition. Distribute with compound or hash-based partition keys for high-throughput workloads.

07Azure File Share

Fully managed cloud file shares accessible via SMB 3.x, NFS 4.1, and the FileREST API. Mount as a network drive on Windows or Linux, or in Docker/AKS as a PersistentVolume.

Mount on Linux

bash
sudo apt install cifs-utils

sudo mount -t cifs //mystorageaccount.file.core.windows.net/myshare /mnt/myshare \
  -o vers=3.0,username=mystorageaccount,\
     password=<storageAccountKey>,dir_mode=0777,file_mode=0777

Mount on Windows

powershell
net use Z: \\mystorageaccount.file.core.windows.net\myshare \
  /user:Azure\mystorageaccount <storageAccountKey>

08Data Lake Storage Gen2

ADLS Gen2 = Blob Storage + Hierarchical Namespace. It enables atomic directory rename, POSIX ACLs, and the ABFS protocol used by Spark, Databricks, and Synapse Analytics.

FeatureStandard BlobADLS Gen2
NamespaceFlatHierarchical (true directories)
RenameCopy + Delete (slow)Atomic rename (fast)
POSIX ACLsβœ— Noβœ“ Yes
ProtocolREST, HTTPSREST + HDFS/ABFS
AnalyticsBasicOptimized β€” Spark, Databricks, Synapse
bash
# Enable at creation (cannot change later)
az storage account create \
  --name mydatalake \
  --resource-group myRG \
  --kind StorageV2 \
  --enable-hierarchical-namespace true

ABFS URI Format

text
# Azure Blob File System URI
abfs://<container>@<account>.dfs.core.windows.net/<path>

# Example
abfs://raw-data@mydatalake.dfs.core.windows.net/2025/01/sales.parquet

09Access Tiers

Access tiers let you balance storage cost against retrieval cost based on how frequently data is accessed. Choosing the right tier can reduce storage bills by up to 80% for infrequently accessed data. Use lifecycle policies to automate tier transitions as data ages in production.

TierStorage CostAccess CostMin DurationRetrieval
πŸ”₯ HotHighestLowestNoneInstant
❄️ CoolLowerHigher30 daysInstant
🧊 ColdLower stillHigher90 daysInstant
πŸ“¦ ArchiveLowestHighest180 days1–15 hours (rehydrate)

Rehydrate from Archive

csharp
// Start rehydration (High priority = ~1 hour)
await blobClient.SetAccessTierAsync(
    AccessTier.Hot,
    rehydratePriority: RehydratePriority.High);

// Check status
BlobProperties props = await blobClient.GetPropertiesAsync();
Console.WriteLine(props.ArchiveStatus); // "rehydrate-pending-to-hot"

10Redundancy & Replication

Redundancy determines how many copies of your data exist and where they are stored, directly impacting durability and availability SLAs. The right choice depends on your disaster recovery requirements and budget constraints. Select geo-redundant options for mission-critical data that must survive a full regional outage.

OptionCopiesZonesRegionsRead SecondaryDurability
LRS311βœ— No11 nines
ZRS331βœ— No12 nines
GRS612After failover only16 nines
GZRS63+12After failover only16 nines
RA-GRS612βœ“ Yes16 nines
RA-GZRS63+12βœ“ Yes16 nines
🌍
Choosing RedundancyUse ZRS for AZ resilience in one region. Use RA-GRS or RA-GZRSfor disaster recovery with read access to secondary even before failover.

11Security & Authentication

Azure Storage supports multiple authentication methods ranging from shared keys to Entra ID RBAC. Choosing the right method is critical for production security β€” leaked account keys grant full access to all data. Prefer Managed Identity and RBAC for service-to-service communication, and use SAS tokens only for time-limited external access.

MethodTypeRecommended?
Account KeyFull access shared key⚠️ Only for admin/migration
SAS TokenScoped, time-limited keyβœ“ For external client access
Managed IdentityEntra ID token, no secretsβœ… Recommended for services
RBAC (Entra ID)Role-based tokenβœ… Recommended for users

RBAC Roles

RolePermissions
Storage Blob Data OwnerFull blob + ACL management
Storage Blob Data ContributorRead, write, delete blobs
Storage Blob Data ReaderRead blobs only
Storage Queue Data ContributorRead, write, delete messages
Storage Table Data ContributorRead, write, delete entities

Disable Shared Key Access

bash
# Force Entra ID only β€” disables all account key + SAS key auth
az storage account update \
  --name mystorageaccount \
  --resource-group myRG \
  --allow-shared-key-access false

12Network Security

Network-level controls restrict which clients can reach your storage account, adding defense-in-depth beyond authentication. In production, always deny public access by default and whitelist only trusted IPs, VNets, or private endpoints. This prevents data exfiltration even if credentials are compromised.

Firewall & IP Rules

bash
# Deny all public access by default
az storage account update \
  --name mystorageaccount --resource-group myRG \
  --default-action Deny

# Allow specific IP CIDR
az storage account network-rule add \
  --account-name mystorageaccount \
  --ip-address 203.0.113.0/24

# Allow VNet subnet
az storage account network-rule add \
  --account-name mystorageaccount \
  --vnet-name myVNet --subnet mySubnet

# Allow trusted Azure services to bypass
az storage account update \
  --name mystorageaccount --bypass AzureServices
πŸ”’
Private EndpointsEach storage service (Blob, File, Queue, Table, DFS) gets its own separate private endpoint and private IP address within your VNet.

13Lifecycle Management Policies

Automatically transition blobs between tiers or delete them based on age, last-access time, or blob index tags β€” saving significant cost on cold/archive data.

json
{
  "rules": [{
    "name": "tiering-rule",
    "enabled": true,
    "type": "Lifecycle",
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob"],
        "prefixMatch": ["logs/", "backups/"]
      },
      "actions": {
        "baseBlob": {
          "tierToCool":    { "daysAfterModificationGreaterThan": 30 },
          "tierToCold":    { "daysAfterModificationGreaterThan": 90 },
          "tierToArchive": { "daysAfterModificationGreaterThan": 180 },
          "delete":        { "daysAfterModificationGreaterThan": 365 }
        },
        "snapshot": { "delete": { "daysAfterCreationGreaterThan": 90 } },
        "version":  { "delete": { "daysAfterCreationGreaterThan": 90 } }
      }
    }
  }]
}

14Shared Access Signatures (SAS)

SAS tokens provide fine-grained, time-limited access to storage resources without exposing account keys. They are essential for granting external clients or partner systems temporary access to specific blobs or containers. Always prefer User Delegation SAS backed by Entra ID for the highest security, as they can be revoked by rotating the delegation key.

TypeBacked ByScopeSecurity Level
Account SASAccount KeyMultiple servicesMedium
Service SASAccount KeySingle service/container/blobMedium
User Delegation SASEntra ID tokenBlob/ADLS onlyβœ… Highest

Generate SAS β€” .NET

csharp
// Service SAS β€” read-only blob for 1 hour
BlobSasBuilder sasBuilder = new BlobSasBuilder
{
    BlobContainerName = "images",
    BlobName = "profile.jpg",
    Resource = "b",  // b=blob, c=container
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
Uri sasUri = blobClient.GenerateSasUri(sasBuilder);

// User Delegation SAS (Entra ID backed β€” most secure)
UserDelegationKey delegationKey = await blobServiceClient
    .GetUserDelegationKeyAsync(
        DateTimeOffset.UtcNow,
        DateTimeOffset.UtcNow.AddHours(4));

SAS URL Anatomy

text
https://account.blob.core.windows.net/images/photo.jpg
?sv=2023-01-03     ← Storage version
&st=2025-01-01T10:00Z  ← Start time
&se=2025-01-01T11:00Z  ← Expiry time
&sr=b              ← Resource (b=blob, c=container)
&sp=r              ← Permissions (r=read, w=write, d=delete, l=list)
&sip=203.0.113.0/24    ← Allowed IP range (optional)
&spr=https         ← HTTPS only
&sig=<signature>   ← HMAC-SHA256

15Encryption

Azure Storage encrypts all data at rest and in transit by default, requiring zero configuration for baseline protection. For regulated industries, Customer Managed Keys and infrastructure encryption provide additional control and auditability over key rotation. Use CMK when compliance mandates that your organization retains sole control of encryption keys.

TypeDescriptionDefault?
Encryption at restAES-256 for all data on diskβœ… Always on
Encryption in transitHTTPS / TLS 1.2+βœ… Enforced
Microsoft Managed Keys (MMK)Azure manages the encryption keysβœ… Default
Customer Managed Keys (CMK)Your keys in Key Vault or HSMOptional β€” compliance
Infrastructure EncryptionDouble-encrypt at hardware layerOptional β€” max security
bash
# Enable CMK with Key Vault
az storage account update \
  --name mystorageaccount \
  --encryption-key-source Microsoft.Keyvault \
  --encryption-key-vault https://myKeyVault.vault.azure.net \
  --encryption-key-name storage-encryption-key

# Enforce HTTPS-only + TLS 1.2
az storage account update \
  --name mystorageaccount \
  --https-only true \
  --min-tls-version TLS1_2

16Function Apps Integration

Azure Functions integrates natively with Storage through triggers and bindings, enabling event-driven architectures with minimal boilerplate. Blob triggers react to file uploads, queue triggers process messages, and output bindings write results β€” all without managing connections manually. Use these patterns to build scalable, serverless data pipelines in production.

Blob Trigger

csharp
[FunctionName("ProcessUpload")]
public static async Task Run(
    [BlobTrigger("uploads/{name}", Connection = "AzureWebJobsStorage")]
    Stream blobStream,
    string name,
    BlobClient blobClient,
    ILogger log)
{
    log.LogInformation($"Blob {name} uploaded. Size: {blobStream.Length}");
    BlobProperties props = await blobClient.GetPropertiesAsync();
    // Process...
}

Queue Trigger

csharp
[FunctionName("ProcessQueueMessage")]
public static void Run(
    [QueueTrigger("task-queue", Connection = "AzureWebJobsStorage")]
    string message, ILogger log)
{
    log.LogInformation($"Queue message: {message}");
}

Blob Output Binding

csharp
[FunctionName("GenerateReport")]
[return: Blob("reports/{DateTime}.json", Connection = "AzureWebJobsStorage")]
public static string Run([TimerTrigger("0 0 * * * *")] TimerInfo timer)
{
    return JsonSerializer.Serialize(new { GeneratedAt = DateTime.UtcNow });
}

Table Output Binding

csharp
[FunctionName("LogEvent")]
public static async Task Run(
    [HttpTrigger] HttpRequest req,
    [Table("AuditLog", Connection = "AzureWebJobsStorage")]
    IAsyncCollector<TableEntity> table)
{
    await table.AddAsync(new TableEntity("2025-01", Guid.NewGuid().ToString())
    {
        ["EventType"] = "UserLogin",
        ["IpAddress"] = req.HttpContext.Connection.RemoteIpAddress?.ToString()
    });
}

17Logic Apps Integration

Logic Apps provides low-code connectors for Azure Storage, enabling workflow automation without writing custom code. These connectors support polling triggers for blob changes and actions for CRUD operations on blobs, queues, and tables. Use Logic Apps integration when you need rapid workflow prototyping or when non-developers manage the integration logic.

Action / TriggerDescription
When a blob is added or modifiedTrigger Logic App on blob change (polling)
Create blobUpload a blob from workflow
Get blob contentDownload blob body as workflow variable
Get blob metadataRead properties, tags, content type
List blobsEnumerate container contents
Delete blobRemove a blob from container
Copy blobServer-side copy between containers
Extract archive to folderUnzip archive blob to Blob Storage
πŸ”—
Connection OptionsStandard Logic Apps support Managed Identity for Blob authentication β€” assignStorage Blob Data Contributor to the Logic App's system identity. Consumption Logic Apps use Connection String.

18APIM Integration

Azure API Management can proxy storage operations, adding rate limiting, authentication, and request transformation in front of Blob Storage. This pattern exposes storage as a managed API without giving clients direct access to storage credentials. Use it when external consumers need controlled upload/download capabilities through your API gateway.

APIM β†’ Upload Blob (Managed Identity)

xml
<inbound>
  <base />
  <authentication-managed-identity
      resource="https://storage.azure.com/"
      output-token-variable-name="storageToken" />

  <send-request mode="new"
      response-variable-name="uploadResult" timeout="60">
    <set-url>@($"https://{{account}}.blob.core.windows.net/uploads/{context.Request.MatchedParameters["filename"]}")</set-url>
    <set-method>PUT</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>@("Bearer " + (string)context.Variables["storageToken"])</value>
    </set-header>
    <set-header name="x-ms-blob-type" exists-action="override">
      <value>BlockBlob</value>
    </set-header>
    <set-header name="x-ms-version" exists-action="override">
      <value>2023-01-03</value>
    </set-header>
    <set-body>@(context.Request.Body.As<string>())</set-body>
  </send-request>

  <return-response response-variable-name="uploadResult" />
</inbound>

19Other Azure Services

πŸ•ΈοΈ
Event Grid
BlobCreated/BlobDeleted events trigger Functions, Logic Apps, or webhooks for real-time processing.
🏭
Azure Data Factory
Copy activity from CSV blobs to SQL, or land data from on-prem to ADLS Gen2 for analytics.
⚑
Databricks / Synapse
Mount ADLS Gen2 with ABFS, read Parquet/Delta files with Spark for big data transformations.
🌐
Azure CDN / Front Door
Cache static Blob assets at edge nodes globally with custom domain + HTTPS.
🧠
Azure AI / Document Intelligence
BlobTrigger β†’ Function β†’ Document Intelligence β†’ store structured extraction in Cosmos DB.
πŸ’Ύ
Azure Backup
Protect VM disks, SQL, and file shares using Recovery Services Vault backed by storage.

20Monitoring & Alerts

Proactive monitoring of storage metrics helps detect capacity issues, latency degradation, and unauthorized access before they impact users. Azure Monitor provides built-in metrics and diagnostic logs for all storage services. Configure alerts on key thresholds to enable rapid incident response in production environments.

MetricDescriptionAlert Condition
UsedCapacityTotal storage used> 80% of quota
Ingress / EgressData transfer bytesUnusual egress spike
AvailabilitySuccess rate %< 99.9%
SuccessE2ELatencyEnd-to-end latency> 1000ms
TransactionsAPI requests per intervalSpike detection
BlobCountNumber of blobsLifecycle policy check

KQL β€” Unauthorized Access Attempts

kql
StorageBlobLogs
| where StatusCode == 403
| summarize count() by CallerIpAddress, OperationName
| order by count_ desc

21Static Website Hosting

Azure Storage can serve static websites directly from the $web container, eliminating the need for a separate web server. This is ideal for SPAs, documentation sites, and marketing pages with minimal operational overhead. Pair with Azure CDN for custom domains, HTTPS, and global edge caching in production.

bash
# Enable static website hosting
az storage blob service-properties update \
  --account-name mystorageaccount \
  --static-website \
  --index-document index.html \
  --404-document 404.html

# Upload build output to $web container
az storage blob upload-batch \
  --account-name mystorageaccount \
  --source ./dist \
  --destination '$web'

# URL: https://mystorageaccount.z6.web.core.windows.net/
🌐
Custom Domain + CDNPair with Azure CDN or Front Door for custom domain, HTTPS certificates, global caching, and HTTP/3 support on your static site.

22vs Service Bus / Event Hubs

Azure offers multiple messaging and storage services that overlap in certain scenarios, making it important to understand their strengths. This comparison helps you decide whether Storage Queue suffices or whether you need Service Bus's advanced features like sessions and dead-lettering. Use this table when architecting event-driven systems to pick the right service for each communication pattern.

CapabilityBlobQueueTableFileService BusEvent Hubs
Store large filesβœ“ Yesβœ— Noβœ— Noβœ“ Yesβœ— Noβœ— No
Key-value storeβœ— Noβœ— Noβœ“ Yesβœ— Noβœ— Noβœ— No
Task queuingβœ— Noβœ“ Yesβœ— Noβœ— Noβœ“ YesPlusβœ— No
Pub-Subβœ— Noβœ— Noβœ— Noβœ— Noβœ“ Yesβœ“ Yes
Event streamingβœ— Noβœ— Noβœ— Noβœ— Noβœ— Noβœ“ Yes
FIFO orderingβœ— Noβœ— Noβœ— Noβœ— NoSessionsPartition-level
SMB mountβœ— Noβœ— Noβœ— Noβœ“ Yesβœ— Noβœ— No
Priceβœ… Cheapestβœ… Cheapestβœ… CheapestMediumHigherMedium

23Architecture Patterns

🎬
Media Processing Pipeline
Upload β†’ BlobTrigger β†’ Validate β†’ Queue β†’ Encode β†’ Process β†’ Notify. Full event-driven media workflow.
πŸ…
Medallion Architecture
ADLS Gen2: Bronze (raw) β†’ Silver (clean) β†’ Gold (curated). Spark transforms at each layer.
πŸ“Ž
Claim-Check Pattern
Large payloads β†’ Blob. Only the URL travels via Service Bus. Consumer fetches directly from Blob.
🌍
Static + Dynamic Web
Static assets from $web + CDN. API calls to APIM β†’ Functions β†’ Blob + SQL.
πŸ’Ύ
Backup & Archive
Hot β†’ Cool (30d) β†’ Cold (90d) β†’ Archive (180d) β†’ Delete (365d) via lifecycle policy.

24Quick Reference Cheat Sheet

Endpoints
text
Blob:   https://<account>.blob.core.windows.net
Queue:  https://<account>.queue.core.windows.net
Table:  https://<account>.table.core.windows.net
File:   https://<account>.file.core.windows.net
DFS:    https://<account>.dfs.core.windows.net
Web:    https://<account>.z<N>.web.core.windows.net
Common CLI Commands
bash
# Create storage account
az storage account create \
  --name mystorageaccount --resource-group myRG \
  --location eastus --sku Standard_GRS --kind StorageV2

# Upload blob
az storage blob upload \
  --file ./data.json --container-name mycontainer \
  --name data.json --account-name mystorageaccount

# Generate SAS URL
az storage blob generate-sas \
  --account-name mystorageaccount \
  --container-name mycontainer --name data.json \
  --permissions r --expiry 2025-12-31T00:00Z --https-only --output tsv

# Queue message
az storage message put \
  --queue-name myqueue --content "Hello" --account-name mystorageaccount
LimitValue
Storage accounts per subscription per region250
Max storage account capacity5 PiB
Max block blob size~4.77 TiB
Max blob name length1,024 chars
Max queue message size64 KB
Max queue message TTL7 days
Max table entity size1 MB
Max table entity properties255
Max file share size100 TiB