How-to guide

Choose the right object storage tiers on Google Cloud

Learn how to map Google Cloud Storage objects to Standard, Nearline, Coldline, Archive, and Autoclass without surprise retrieval or early deletion fees.

By the Cloudverg engineering team · · 6 min read

Why this matters

Object storage looks simple until the bill arrives. Cloud Storage charges for bytes, operations, retrieval, and in some cases early deletion. A bucket full of Standard objects that nobody reads still costs more than it should. A bucket moved to Archive that a job reads every night costs more than Standard, because you pay retrieval and wait for restores.

Google Cloud Storage has four main classes: Standard, Nearline, Coldline, and Archive. Standard has no minimum storage duration and no retrieval fee. Nearline has a 30 day minimum, Coldline 90 days, and Archive 365 days. The colder classes have lower storage rates but add retrieval fees, operation charges, and longer access times. Archive access can take hours, so it is a poor fit for anything a user or job waits on.

The class on an object is not fixed. The bucket default class only sets what new objects get. Object Lifecycle Management can move objects by age, creation date, name prefix, or version state. Autoclass can move objects by access pattern. Those are different tools. Lifecycle rules do not know when an object was last read. A file created two years ago but read every morning will still move if your rule says so.

Before you start

Inventory first. List buckets by owner, workload, and data type: user uploads, backups, logs, analytics exports, media, model checkpoints. For each, note who reads it, how often, from where, and the restore time target. A backup that takes four hours to restore may be fine. A product image that takes four hours is not.

Check the bucket features that keep bytes alive. Object Versioning keeps noncurrent versions. Soft delete keeps deleted objects for a retention window. A Bucket Lock retention policy can stop deletion entirely. All of those bytes are billed, and they can sit in a colder class than you expect. Turn on version cleanup rules before you celebrate a storage drop.

Get evidence before you move anything. Storage Insights gives you a daily view of object age, size, and class. Cloud Monitoring has storage metrics by class. For high value buckets, enable Cloud Audit Logs data access logs for a short window and sample real reads. Data access logs can be large, so do not leave them on everywhere by default.

Set a guardrail. Decide which buckets may use Autoclass, which must stay on lifecycle rules, and who can edit lifecycle policy. Note any retention or deletion constraints from your own policy. Keep the mapping in a table so the next person can see why a prefix is in Coldline.

How to do it

Start where the pattern is obvious. Logs, backup exports, and old analytics snapshots usually have a known age and restore time. Set the bucket default to the class most new objects should land in, then use lifecycle rules to move existing objects. Work one prefix at a time so a bad rule cannot touch the whole bucket.

For buckets with mixed or unknown access, Autoclass is usually safer than a guess. It moves objects between classes as access changes. If you need a floor, set the terminal storage class. Do not use Autoclass as an excuse to skip the retention check: it still cannot make Archive instant, and it will not fix a job that reads cold data on a schedule.

Write rules with conditions you can explain. MatchesPrefix, Age, CreatedBefore, MatchesStorageClass, IsLive, and NumNewerVersions cover most cases. Use SetStorageClass for transitions and Delete for cleanup. Test on a copy or a small prefix, then roll out per bucket. The steps below are the order to use.

  1. Inventory buckets and prefixes. List each bucket, its owner, and the workload that reads it. Mark the prefixes with known retention and known read patterns first.
  2. Capture access evidence. Enable Storage Insights and review storage bytes by class in Cloud Monitoring. For critical buckets turn on Cloud Audit Logs data access logs for a sample period.
  3. Set the bucket default class. Choose the class most new objects should use and set it as the bucket default. Existing objects keep their class until a lifecycle rule, rewrite, or Autoclass changes them.
  4. Write prefix scoped lifecycle rules. Use MatchesPrefix and Age, and add IsLive or NumNewerVersions for versioned buckets. Send only the prefixes you have evidence for and keep a copy of the rule in your runbook.
  5. Use Autoclass for mixed access. Enable Autoclass on buckets where you cannot predict reads. Set a terminal storage class if you need a floor and confirm that your tools can handle class changes on objects.
  6. Test on a small prefix. Apply the rule to a copy or a small prefix first. Check object class, restore time, and billing line items before you widen the scope.
  7. Roll out and watch the bill. Apply changes per bucket, then compare storage, retrieval, and early deletion charges in Cloud Billing. Pause any rule that creates more cost than it removes.

How to check it worked

Check the rules and the objects. Run gcloud storage buckets describe gs://BUCKET --format='json(lifecycle)' to see the lifecycle policy. Run gcloud storage objects describe gs://BUCKET/OBJECT to see the current storage class. For Autoclass, describe the bucket and look at the autoclass setting. If an object did not move, check its age, prefix, and version state against the rule.

Check the bill by line item, not by total. In Cloud Billing reports or a BigQuery billing export, filter Cloud Storage and look at storage, retrieval, operations, and early deletion charges. A lower storage line with a higher retrieval line is not a win. Compare the same buckets month over month.

Test the restore path. Pull a sample from Nearline, Coldline, and Archive and time it. Run the job that depends on the data, not just a manual download. If a backup restore, analytics query, or user download misses its target, move that prefix back to a warmer class.

Watch for unexpected reads. If access logs show regular reads from cold objects, your rule is fighting the workload. Either move those objects to Standard or Nearline, or change the job to use a local cache or a copy. The storage class should follow the workload, not the other way around.

Mistakes to avoid

The first mistake is treating Archive as cheap hot storage. Archive is for data you expect to touch less than once a year. Restores can take hours, and retrieval fees apply. User-facing assets, active model training sets, and nightly backup reads do not belong there.

The second is ignoring minimum storage durations. Nearline keeps a 30 day minimum, Coldline 90, Archive 365. Delete, overwrite, or move an object out early and you still pay for the remaining time. A lifecycle rule that sends objects to Coldline after 10 days in Nearline does not erase the Nearline minimum.

The third is forgetting versioning and soft delete. Noncurrent versions and soft deleted objects still take space and still have a class. A cleanup rule that only targets live objects leaves the old bytes behind. Check NumNewerVersions and the soft delete window before you report savings.

The fourth is using age based lifecycle rules for data with unknown access, or chasing storage rate while ignoring operations and egress. Many small reads from a cold class can cost more than the storage you saved. If you want a second opinion on the bill, the Cloud cost audit from Cloudverg is a fixed price $4,500 review over two weeks that ranks storage tier and idle resource findings. It is one option among others, and your own billing export may be enough.

Frequently asked questions

When should I use Nearline instead of Coldline?

Use Nearline for data you read about once a month and can wait a little for. Use Coldline for data you read about once a quarter. Both have retrieval fees and minimum storage durations, so check the read pattern before you move a prefix. If a job reads the data weekly, keep it in Standard.

Does Autoclass replace Object Lifecycle Management?

No. Autoclass moves objects based on access, while lifecycle rules act on conditions like age, prefix, and version state. Use Autoclass for buckets with mixed or unknown access, and keep lifecycle rules for deletion and version cleanup. Check how the two interact on a test bucket before you rely on both.

Why did my Cloud Storage bill go up after moving data to Archive?

Archive has a 365 day minimum and charges for retrieval. If you read the data, restore it, or move it out early, those charges can exceed the storage savings. Look at retrieval, operations, and early deletion line items in Cloud Billing before you move more prefixes.

Fixed price

Want help with this? Cloud cost audit

$4,500 fixed price

2 weeks · Starts within 10 business days

A two-week, read-only review of your AWS, Azure, Google Cloud or Oracle bill, with every saving ranked by dollars per month.

What is included

Related guides

More cloud costs guides   Cloud cost audit

Smallest way to start

Get a senior architect on your problem this week

Ninety minutes on the cloud, AI or security question that is blocking you, a pre-read of your material and a written summary within two business days.

$450 one-time