Skip to content

Azure Storage Access Tiers and Cost Optimization

Lecture 4 Lecture 13 Exam Topic Cost Management

Overview

Access tiers in Azure Storage represent a price/performance balance for data access. The core principle is simple: the less frequently you access data, the cheaper it is to store -- but the more expensive it is to read. Azure allows you to mix tiers within the same storage account, set a default tier at the account level, and override the tier on individual blobs.

Lifecycle management builds on top of access tiers by providing policy-based automation to move data between tiers as it ages, delivering significant cost savings without manual intervention.


Access Tiers (Lecture 4)

Tier Comparison Matrix (LRS, East US 2)

TierStorage $/GB/moRead $/10K opsWrite $/10K opsUse CaseMin Retention
Premium$0.15$0.0014$0.0175Ultra-low latency, frequent accessN/A
Hot$0.0184$0.004$0.05Frequently accessed, everydayN/A
Cool$0.01$0.01$0.10Infrequent, backups, <1x/hr30 days
Cold$0.0036$0.10$0.18Rarely accessed90 days
Archive$0.002$5.00 ($50 high priority)$0.10Long-term compliance180 days

See Exact Pricing Reference below for full breakdowns including data retrieval, volume discounts, and additional features.

Exam Tip

The exam tests your understanding of the inverse relationship between storage cost and access cost. Cheaper storage always means more expensive reads. Know the minimum retention periods: Cool = 30 days, Cold = 90 days, Archive = 180 days.

Breakeven Analysis

Understanding when each tier becomes cost-effective is critical for both the exam and real-world scenarios:

  • Cool pays for itself if data is accessed less than ~1 time per hour
  • Cold saves ~95% vs Hot (roughly 5% of the original storage cost per GB)
  • Archive has multi-hour retrieval times (4+ hours minimum) but the cheapest storage rate

Real-World Cost Calculation -- 1 TB (1,024 GB) Stored for 1 Year (LRS, East US 2)

TierMonthly CostAnnual CostSavings vs Hot
Hot$18.84/month$226.10/year--
Cool$10.24/month$122.88/yearSave $103.22 (46%)
Cold$3.69/month$44.24/yearSave $181.86 (80%)
Archive$2.05/month$24.58/yearSave $201.52 (89%)

These numbers assume storage cost only (1,024 GB x tier rate). Factor in read/write operation costs and data retrieval fees based on your actual access patterns. Archive retrieval alone can be $5.00/10K reads.

Archive Storage -- Special Characteristics

Archive tier is fundamentally different from the other tiers. Think of it as the modern equivalent of offline magnetic tape from the mainframe era. Data is not immediately accessible.

Archive Tier Constraints

  • Data cannot be accessed quickly -- it requires rehydration before reading
  • High priority read costs $6.50 per 10,000 operations vs 0.5-1.3 cents normally
  • Minimum retrieval delay is 4+ hours (standard priority can take up to 15 hours)
  • You are charged for a minimum of 180 days of storage regardless of when you delete or move the blob

Archive rehydration options:

Rehydration MethodTimeCostDetails
Standard priorityUp to 15 hoursLowerDefault option for most workloads
High priorityUnder 1 hour$6.50/10K opsOnly for objects <10 GB
Copy-based rehydrationVariesVariesCopy archived blob to a different tier (original stays archived)

When to Use Archive

  • Government compliance and regulatory archives
  • Legal hold data that must be retained but is rarely accessed
  • Historical backups that may never be needed but must exist
  • Medical records, tax records, audit logs beyond active retention

Premium Tier Economics

WARNING

Premium tier is generally NOT cost-effective unless you are reading the same file essentially 24/7 with ultra-low latency requirements. For most high-frequency access patterns, consider using Azure Redis Cache or Azure CDN as alternatives to Premium blob storage.

Tier Decision Flowchart


Lifecycle Management (Lecture 13)

Lifecycle management lets you automatically move data between tiers as files age. Instead of manually changing tiers on thousands of blobs, you define rules and Azure handles the transitions for you.

Lifecycle Rule Components

Every lifecycle rule consists of four parts:

  1. Rule name -- A descriptive identifier (e.g., "Saving Money Rule")
  2. Scope -- Apply to all blobs in the account OR filter by specific container/prefix
  3. Blob type -- Target base blobs, snapshots, versions, or any combination
  4. Condition -- Trigger based on "last modified more than X days ago"

Available Actions

ActionDescriptionExample
Move to CoolTransition from Hot to Cool tierAfter 30 days of no modification
Move to ColdTransition from Hot/Cool to Cold tierAfter 90 days of no modification
Move to ArchiveTransition from any tier to ArchiveAfter 180 days of no modification
DeletePermanently remove the blobDaily logs after 30 days

Tier Transition Flow

Example Chain

A typical lifecycle policy moves data through tiers as it ages:

  • Days 0-30: Hot tier (active use)
  • Days 30-90: Cool tier (occasional reference)
  • Days 90-180: Cold tier (rare access)
  • Days 180+: Archive tier (compliance retention)

Minimum Retention Charges

Critical -- You Cannot Avoid Minimum Charges

When a blob is placed in a tier with a minimum retention period, you are billed for the full minimum duration even if you move or delete the blob earlier:

  • Cool: 30-day minimum charge
  • Cold: 90-day minimum charge
  • Archive: 180-day minimum charge

You cannot avoid these charges by early deletion. However, even with the minimum charge penalty, it is still cheaper than keeping the data in Hot tier for the equivalent period.

Versioning and Snapshots

Lifecycle management can target base blobs, snapshots, and versions separately. This is powerful for cost optimization:

  • Move old versions to cooler tiers while keeping the current version in Hot
  • Automatically delete old snapshots after a retention period
  • Apply different policies to base blobs vs their historical versions

Exam Tip

When an exam question asks about automatically moving blobs to save money, the answer is Lifecycle Management. It is the most efficient and easiest way to implement tiered storage cost optimization in Azure. No custom code, no Azure Functions -- just a policy.

Portal Walkthrough

Step 1: Create the lifecycle rule

Define the rule name and scope. You can apply to all blobs or filter by container and prefix.

Lifecycle rule creation

Step 2: Configure blob types

Select which blob types the rule applies to: base blobs, snapshots, versions, or append blobs.

Base blobs configuration

Step 3: Define actions

Set the conditions and actions -- move to Cool after X days, move to Archive after Y days, delete after Z days.

Lifecycle actions

Cost Optimization Pipeline

txt
direction: right

hot: Hot Tier {
  style.fill: "#22c55e"
  style.font-color: "#fff"
  label: "Hot Tier\n1.80 cents/GB/mo\nFrequent Access"
}

cool: Cool Tier {
  style.fill: "#3b82f6"
  style.font-color: "#fff"
  label: "Cool Tier\n1.00 cents/GB/mo\n30-day minimum"
}

cold: Cold Tier {
  style.fill: "#a855f7"
  style.font-color: "#fff"
  label: "Cold Tier\n0.33 cents/GB/mo\n90-day minimum"
}

archive: Archive Tier {
  style.fill: "#ef4444"
  style.font-color: "#fff"
  label: "Archive Tier\n0.20 cents/GB/mo\n180-day minimum"
}

delete: Delete {
  style.fill: "#1f2937"
  style.font-color: "#fff"
  label: "Delete\nEnd of Lifecycle"
}

lifecycle: Lifecycle Policy Engine {
  style.fill: "#f59e0b"
  style.font-color: "#000"
  label: "Lifecycle Policy Engine\nAutomatic Rule Evaluation"
}

lifecycle -> hot: "Day 0"
lifecycle -> cool: "After 30 days"
lifecycle -> cold: "After 90 days"
lifecycle -> archive: "After 180 days"
lifecycle -> delete: "After retention"

hot -> cool: "Automatic transition"
cool -> cold: "Automatic transition"
cold -> archive: "Automatic transition"
archive -> delete: "Optional cleanup"

Azure Storage Actions

John Savill

Azure Storage Actions is a next-generation lifecycle management service that provides centralized task management across multiple storage accounts within the same tenant.

FeatureLifecycle ManagementAzure Storage Actions
ScopeSingle storage accountMultiple storage accounts (same tenant)
Blob typesBlock blobs (tiering); all types (delete)Block, page, append blobs
NamespaceFlat namespace only for tieringBoth flat and hierarchical (HNS)
ConditionsAge-based (days since modified/created/accessed)Wildcards, group clauses, complex conditions
ActionsTier change, deleteTier change, delete, set immutability, set blob tags, undelete, legal holds
IdentityBuilt-in (storage account level)Managed identity with data plane RBAC
CostFree (built into storage account)Per-task execution charges

INFO

Storage Actions uses a managed identity that must be granted data plane RBAC roles (e.g., Storage Blob Data Owner) on each target storage account. Unlike lifecycle management which operates implicitly within a single account.

Exam Tip

If an exam question asks about managing lifecycle across MULTIPLE storage accounts or performing actions beyond tier changes (like setting immutability policies or undeleting blobs at scale), the answer is Azure Storage Actions, not lifecycle management.

Learn more: Azure Storage Actions overview


CLI Reference

bash
# Set a blob's access tier
az storage blob set-tier \
  --account-name myaccount \
  --container-name mycontainer \
  --name myblob \
  --tier Cool

# Create a lifecycle management policy from JSON file
az storage account management-policy create \
  --account-name myaccount \
  --resource-group myRG \
  --policy @policy.json

# View current lifecycle management policy
az storage account management-policy show \
  --account-name myaccount \
  --resource-group myRG

# Delete lifecycle management policy
az storage account management-policy delete \
  --account-name myaccount \
  --resource-group myRG

# List blobs with their access tiers
az storage blob list \
  --account-name myaccount \
  --container-name mycontainer \
  --query "[].{Name:name, Tier:properties.blobTier}" \
  --output table

# Rehydrate an archived blob (copy-based)
az storage blob copy start \
  --account-name myaccount \
  --destination-container mycontainer \
  --destination-blob myblob-rehydrated \
  --source-uri "https://myaccount.blob.core.windows.net/mycontainer/myblob" \
  --tier Hot
powershell
# Set a blob's access tier
$ctx = New-AzStorageContext -StorageAccountName "myaccount" -StorageAccountKey "mykey"
$blob = Get-AzStorageBlob -Container "mycontainer" -Blob "myblob" -Context $ctx
$blob.BlobClient.SetAccessTier("Cool")

# Create a lifecycle management policy
$action = Add-AzStorageAccountManagementPolicyAction `
  -BaseBlobAction TierToCool -DaysAfterModificationGreaterThan 30

Add-AzStorageAccountManagementPolicyAction `
  -InputObject $action `
  -BaseBlobAction TierToArchive `
  -DaysAfterModificationGreaterThan 180

$filter = New-AzStorageAccountManagementPolicyFilter -BlobType blockBlob
$rule = New-AzStorageAccountManagementPolicyRule `
  -Name "SavingMoneyRule" `
  -Action $action `
  -Filter $filter

Set-AzStorageAccountManagementPolicy `
  -ResourceGroupName "myRG" `
  -AccountName "myaccount" `
  -Rule $rule

# View current lifecycle management policy
Get-AzStorageAccountManagementPolicy `
  -ResourceGroupName "myRG" `
  -AccountName "myaccount"
Example Lifecycle Policy JSON (policy.json)
json
{
  "rules": [
    {
      "enabled": true,
      "name": "SavingMoneyRule",
      "type": "Lifecycle",
      "definition": {
        "actions": {
          "baseBlob": {
            "tierToCool": {
              "daysAfterModificationGreaterThan": 30
            },
            "tierToCold": {
              "daysAfterModificationGreaterThan": 90
            },
            "tierToArchive": {
              "daysAfterModificationGreaterThan": 180
            },
            "delete": {
              "daysAfterModificationGreaterThan": 365
            }
          },
          "snapshot": {
            "tierToCool": {
              "daysAfterCreationGreaterThan": 30
            },
            "delete": {
              "daysAfterCreationGreaterThan": 90
            }
          },
          "version": {
            "tierToCool": {
              "daysAfterCreationGreaterThan": 30
            },
            "delete": {
              "daysAfterCreationGreaterThan": 90
            }
          }
        },
        "filters": {
          "blobTypes": [
            "blockBlob"
          ],
          "prefixMatch": [
            "logs/",
            "backups/"
          ]
        }
      }
    }
  ]
}

Lab Exercises

Hands-On Practice

Complete these exercises to reinforce your understanding of access tiers and lifecycle management.

Lab 1: Upload Blobs and Set Access Tiers via Portal

  1. Navigate to your Storage Account in the Azure Portal
  2. Create a container named tier-testing
  3. Upload three different files (e.g., text files of varying sizes)
  4. For each blob, click on the blob name and change the access tier:
    • File 1: Keep as Hot
    • File 2: Set to Cool
    • File 3: Set to Archive
  5. Observe the tier displayed in the blob list view

Lab 2: Create a Lifecycle Management Policy

  1. In your Storage Account, navigate to Data management > Lifecycle management
  2. Click Add a rule
  3. Name the rule "CostOptimizationRule"
  4. Set scope to Limit blobs with filters and target the tier-testing container
  5. Configure actions:
    • Move to Cool storage after 30 days since last modification
    • Move to Archive storage after 180 days since last modification
  6. Review and create the policy

Lab 3: Change a Blob Tier via Azure CLI

bash
# Ensure you are logged in
az login

# Set the blob tier to Cool
az storage blob set-tier \
  --account-name <your-account> \
  --container-name tier-testing \
  --name <your-blob-name> \
  --tier Cool

# Verify the change
az storage blob show \
  --account-name <your-account> \
  --container-name tier-testing \
  --name <your-blob-name> \
  --query "properties.blobTier"

Lab 4: Observe Archive Rehydration

  1. Set a blob's tier to Archive using CLI or Portal
  2. Attempt to download the blob -- observe the error indicating the blob must be rehydrated
  3. Initiate rehydration by changing the tier back to Hot or Cool
  4. Note the time it takes for the blob to become accessible (check x-ms-archive-status header)

Lab 5: Calculate Cost Savings for Your Data

Using the pricing matrix above, calculate the annual cost for your own data pattern:

  1. Determine your total data volume in GB
  2. Estimate access frequency for each data category
  3. Map each category to the appropriate tier
  4. Calculate the total cost vs keeping everything in Hot
  5. Document your projected savings

Exact Azure Blob Storage Pricing Reference

Pricing Configuration Baseline

The tables below reference LRS (Locally-Redundant Storage), East US 2 region, Flat Namespace, USD. Prices change -- always verify against the official pricing page. Different redundancy options (ZRS, GRS, RA-GRS, GZRS) will have higher prices.

Official pricing page (select your own config): Azure Blob Storage Pricing

Azure Pricing Calculator (build estimates): Azure Pricing Calculator

Block Blob Data Storage (Pay-As-You-Go, LRS, East US 2)

Data storage pricing -- LRS, East US 2, Flat Namespace

TierFirst 50 TB/monthNext 450 TB/monthOver 500 TB/month
Premium$0.15 per GB$0.15 per GB$0.15 per GB
Hot$0.0184 per GB$0.0177 per GB$0.0170 per GB
Cool$0.01 per GB$0.01 per GB$0.01 per GB
Cold$0.0036 per GB$0.0036 per GB$0.0036 per GB
Archive$0.002 per GB$0.002 per GB$0.002 per GB

Azure Storage Reserved Capacity

Reserved capacity pricing -- 1-year and 3-year commitments

Reserved capacity offers discounted rates for committed storage volumes:

Reserved CapacityHot (1yr)Cool (1yr)Archive (1yr)Hot (3yr)Cool (3yr)Archive (3yr)
100 TB/month$1,545$840$183$1,244$676$168
1 PB/month$15,050$8,179$1,783$11,963$6,502$1,636

Operations and Data Transfer (LRS, East US 2)

Operations, data transfer, and early deletion pricing

OperationPremiumHotCoolColdArchive
Write ops (per 10K)$0.0175$0.05$0.10$0.18$0.10
List/Create Container (per 10K)$0.05$0.05$0.05$0.18$0.05
Read ops (per 10K)$0.0014$0.004$0.01$0.10$5.00
Archive High Priority Read (per 10K)--------$50.00
All other ops (per 10K)$0.0014$0.004$0.004$0.004N/A
Data retrieval (per GB)FreeFree$0.01$0.03$0.02
Archive High Priority Retrieval (per GB)--------$0.10

Exam Tip -- Early Deletion Charges

If you delete or move a blob before its minimum retention period, you are charged for the remaining days as if the blob stayed for the full period:

  • Cool: Prorated for remaining days of 30
  • Cold: Prorated for remaining days of 90
  • Archive: Prorated for remaining days of 180

Point-in-Time Restore (LRS, East US 2)

OperationPrice
Data processed (per MB)$0.15

Additional Blob Features and Pricing

Smart Tier and Blob Index pricing

Smart Tier (Preview)

Smart Tier automatically moves your data between Hot, Cool, and Cold tiers based on usage patterns, optimizing costs without manual lifecycle rules. Objects are billed at the capacity and operation prices of the underlying tier they are placed in.

FeaturePrice
Monitoring operations (per 10K objects/month)$0.04

Smart Tier vs Lifecycle Management

  • Smart Tier: Automatic, usage-pattern-based, per-object monitoring cost, no rules to configure
  • Lifecycle Management: Rule-based, age-driven, no monitoring cost, requires explicit policy setup

Smart Tier is best when access patterns are unpredictable. Lifecycle Management is best when you know the age-based access curve of your data.

Blob Index

Blob Index provides key-value tag attributes on blobs that are automatically indexed for querying. This enables multi-dimensional classification and discovery of blobs beyond just prefix-based filtering.

FeaturePrice
Index tags (per 10K tags)$0.03

Use cases: Tag blobs with metadata like department=finance, classification=confidential, project=alpha and query across containers.

Learn more: Blob Index documentation

SFTP (SSH File Transfer Protocol)

FeaturePrice
SFTP-enabled storage account (per hour)$0.30

SFTP is billed whenever the feature is enabled on the storage account, regardless of usage. Disable SFTP when not in use to avoid charges.

Blob Inventory

Blob Inventory generates scheduled reports about the state of your blobs, providing insights into blob properties, metadata, tags, access tier, size, and last modified time across containers.

SettingOptions
ScheduleDaily or weekly
ScopeAll containers or filter by prefix
Blob typesBlock, page, append (select which to include)
Include versionsOptionally include blob versions in report
Output formatCSV or Apache Parquet
Output locationDedicated container ($inventory-policy) in same storage account
FeaturePrice
Blob inventory reports (per million objects scanned)$0.003

TIP

Blob Inventory reports are stored as blobs themselves. Set up a lifecycle management rule to automatically delete old inventory reports (e.g., delete after 30 days) to avoid accumulating storage costs from the reports.

Change Feed

FeaturePrice
Changes logged (per 10K changes)Included in write operation costs

No separate charge -- change feed events are counted as part of the write operations that triggered them.

Encryption Scopes

FeaturePrice
Per encryption scope per month$2.50

Encryption scopes allow per-container or per-blob encryption keys (CMK). Each scope incurs a monthly charge.

Geo-Replication Data Transfer

FeaturePrice
Geo-replication data transfer (per GB)$0.02

Applies to GRS, RA-GRS, GZRS, RA-GZRS when data is replicated to the secondary region.


MS Learn References


Key Takeaways

Exam Tip -- Summary

  1. Access tiers trade storage cost for access cost -- cheaper storage means more expensive reads
  2. Minimum retention periods are enforced via billing: Cool (30 days), Cold (90 days), Archive (180 days)
  3. Archive tier requires rehydration (hours to access) -- it is NOT immediately readable
  4. Lifecycle management is the answer when asked about automating tier transitions for cost savings
  5. Premium tier is rarely cost-effective -- consider Redis or CDN for high-frequency access patterns
  6. You CAN mix tiers within the same storage account -- set a default and override per blob
  7. Lifecycle rules can target base blobs, snapshots, and versions independently

Released under the MIT License.