azurerm_storage_blob cost estimation
Declaring a blob is free; the data it holds is not. A blob drives capacity, transaction, and egress charges on the parent storage account by its size, access tier, and read volume.
An azurerm_storage_blob uploads a single object (a file, image, or backup) into a container in a storage account. Defining the resource costs nothing. Azure bills blob storage on the parent azurerm_storage_account by what the blob consumes, not by the existence of the resource block.
Three meters drive the cost. First, capacity: you pay per GB-month for the bytes stored, at a rate that depends on the access tier. Hot is the most expensive per GB but cheapest to read; Cool and Cold are cheaper to store but add a per-GB retrieval charge and have minimum retention periods; Archive is the cheapest storage but requires a rehydration step to read. Second, transactions: every read, write, and list operation against the blob is billed per 10,000 operations, and cool and cold tiers charge more per transaction than hot. Third, egress: data downloaded out of the region is metered per GB. Redundancy (LRS, ZRS, GRS) multiplies the capacity rate.
The optimization is tier and lifecycle: keep frequently read data in hot, move aging data to cool or archive with a management policy, and pick the redundancy level the data actually needs. c3x prices the storage account capacity, transactions, and egress that a blob drives and treats the resource declaration itself as free.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "azurerm_resource_group" "main" {
name = "storage-rg"
location = "eastus"
}
resource "azurerm_storage_account" "main" {
name = "appstore2026"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_storage_container" "assets" {
name = "assets"
storage_account_name = azurerm_storage_account.main.name
container_access_type = "private"
}
resource "azurerm_storage_blob" "logo" {
name = "logo.png"
storage_account_name = azurerm_storage_account.main.name
storage_container_name = azurerm_storage_container.assets.name
type = "Block"
source = "logo.png"
}Pricing dimensions
What you actually pay for when you provision azurerm_storage_blob.
| Dimension | Unit | What's being charged |
|---|---|---|
| Blob resource declaration | free | The Terraform resource itself has no charge; the data it stores drives cost on the storage account. $0 |
| Capacity | per GB-month | Bytes stored, priced by access tier and redundancy on the parent account. ~$0.018/GB-month for Hot LRS in eastus |
| Transactions | per 10,000 operations | Reads, writes, and lists against the blob, billed at a tier-dependent rate on the account. |
| Egress | per GB | Data downloaded out of the region when the blob is read from elsewhere. |
Optimization tips
Common ways to reduce azurerm_storage_blob cost without changing the workload.
Match the access tier to read frequency
Archive is a fraction of Hot per GBKeep frequently read blobs in Hot, move rarely read data to Cool or Archive. Cool and Cold cut storage cost but add retrieval charges, so tier by actual access pattern.
Automate tiering with a management policy
An azurerm_storage_management_policy moves blobs to cheaper tiers or deletes them by age automatically, so aging data does not sit in the expensive Hot tier.
Pick the right redundancy
GRS costs about 2x LRSGRS roughly doubles the capacity rate for cross-region durability. Use LRS or ZRS for data that does not need geo-redundant copies.
FAQ
Does declaring an azurerm_storage_blob cost money?
The resource block itself is free. You pay on the parent storage account for the bytes the blob stores, the transactions against it, and any egress when it is read from outside the region.
Which access tier is cheapest for blobs?
Archive has the lowest storage rate, then Cold and Cool, with Hot the most expensive to store but cheapest to read. Cool, Cold, and Archive add retrieval charges, so tier by read frequency.
Why does my storage bill grow without new blobs?
Usually transactions and egress. Frequent reads and downloads of existing blobs are metered per operation and per GB even when capacity is flat, so access volume drives the bill.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including azurerm_storage_blob.