Sitemap
Christopher B. London

Christopher B. London

Cloud-first data professional designing scalable data and AI platforms. Exploring the architecture and decisions that turn pipelines into intelligent systems.

The Backbone of Cloud Platforms: Demystifying Amazon S3

7 min readAug 6, 2025

--

Illustration of a cloud streaming files — photos, music, videos, mobile content into an Amazon S3 bucket, representing scalable and unified object storage in the cloud.
Amazon S3 as the Universal Cloud Bucket: From documents to mobile data, S3 collects and stores diverse content types securely and at scale, powering modern apps and platforms.

First, let’s look at Storage

Before the cloud, storage lived in hardware: hard drives, USBs, and on-prem file servers. When something went wrong, you replaced the drive. Soon after, we relied on network shares, we built RAID arrays, and if you were in enterprise IT, you must remember tape drives. S3 changed that entire approach. It abstracted away the direct physical layer and gave us an object store powered by APIs, built across data centers to handle scale and redundancy, with a global reach by design.

From Personal Storage to Enterprise Architecture

Storing files used to mean saving to a local device or an internal NAS. You could unplug it, walk away, and know where your data lived. But once businesses needed to scale, they needed file sharing, backups, and disaster recovery. We then graduated to SANs and networked file systems. S3 is the cloud-native evolution of that concept. Cloud Storage is not mythical; it’s geographically distributed storage nodes and replicated data served up behind globally available endpoints.

All that really means is behind the scenes, your files are saved in secure buildings located in different parts of the country or world. When you upload or download something, you’re just connecting to the closest and fastest location through the internet.

Object Storage vs. Block Storage: Know the Difference

As storage evolved to cloud infrastructure, the way we organize, and access data changed too. That shift gave rise to two fundamental models in the cloud: block storage and object storage.

  • Block Storage: Block storage operates at a lower level of abstraction. It presents raw volumes of storage to the operating system, which then formats it with a file system (like ext4, NTFS, etc.). Each block is addressable, and the OS controls how files are structured across those blocks. This is why block storage is ideal for applications that require direct disk access, just like databases or virtual machines. Think of it like having a blank hard drive attached to your server, whatever you do with it is up to the OS.
    For example, when you save a Word document to an NTFS-formatted disk, the OS breaks that file into chunks and stores it across multiple non-contiguous blocks. NTFS keeps a file table (MFT) that records where those chunks live and how to reconstruct them when you open the file. When you retrieve that document, the OS looks up the file’s metadata, finds the block addresses, reads them into memory, and reassembles the full document seamlessly for the user. None of this is visible to the application, just open and save. But under the hood, it’s a block-level procedure that requires low-latency disk access and a reliable file system.
  • Object Storage: In contrast, object storage takes the entire file system away. Each file is stored as an immutable object and identified by a unique key. Objects also include metadata and can be retrieved directly via HTTP-based APIs. There’s no hierarchy, no block-level formatting, and no concept of partial updates, modifying a file means completely uploading a new object. This makes object storage highly scalable and resilient for unstructured data, that’s perfect for logs, images, video, or backup snapshots.

In traditional terms, block storage is your internal SSD or SAN where you write and read at a block level. Object storage is more like a warehouse storage system with labeled boxes. You store, tag, and retrieve entire boxes, not individual sectors. Understanding this distinction is critical when designing storage-backed applications or cloud-native pipelines.

What really is S3?

S3 is a globally distributed object storage system wrapped in a consistent API. When you upload to a bucket, that object is stored across multiple availability zones (think separate data center campuses in the same geographic region) within a region. It uses internal replication systems, think like a super powered RAID, but abstracted from you. You don’t manage disks. You manage objects and metadata. That’s the management shift: you’re no longer managing hardware; you’re managing addressable units of data via API.

Creating a Secure S3 Bucket (Terraform)

resource "aws_s3_bucket" "app_artifact_bucket" { 
bucket_prefix = "app-artifacts"

tags = {
Environment = var.env
Purpose = "raw-app-artifact-dump"
}
}

resource "aws_s3_bucket_public_access_block" "lockdown" {
bucket = aws_s3_bucket.app_artifact_bucket.id

block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}

resource "aws_s3_bucket_versioning" "versioning" {
bucket = aws_s3_bucket.app_artifact_bucket.id
versioning_configuration {
status = "Enabled"
}
}

This gives you version control, tagging, and secure access by default. Always start here before building automation or distribution logic.

Durability and Redundancy: Remember RAID

In a traditional setup, RAID mirrors or stripes data across multiple drives in the same system to provide redundancy or speed. You can think of it as protecting against hardware failure at the disk level, if one drive goes down, the others hold a copy or parity. S3 operates with a similar philosophy, but at a much larger scale. Instead of replicating data across local disks, S3 replicates objects across multiple physical facilities, or buildings in different availability zones within the same AWS region. So conceptually, S3 is like running RAID across datacenters, not just hard drives.

Get Christopher B. London’s stories in your inbox

Join Medium for free to get updates from this writer.

Let’s take this a step further with CRR or Cross-Region Replication. If RAID is about protecting data across multiple disks, CRR is about protecting your data across entire AWS regions. You’re essentially saying, “If this region ever goes down, I want another copy of my data somewhere else entirely.” This isn’t just for backup, it’s for compliance, disaster recovery, and global app performance. Think of CRR as the next layer of RAID, but with continents instead of racks.

Press enter or click to view image in full size
Diagram showing Amazon S3 Cross-Region Replication (CRR) workflow: a user uploads a file through the S3 API, and the object is replicated across AWS regions us-east-1, us-west-1, and us-west-2 within a single AWS account, ensuring high durability and availability.
Amazon S3 CRR in Action: When a user uploads a file, S3 distributes it across geographically spaced data centers using Cross-Region Replication, ensuring global durability and continuity.
resource "aws_s3_bucket_replication_configuration" "replication" { 
bucket = aws_s3_bucket.app_artifact_bucket.id
role = aws_iam_role.replication.arn

rules {
id = "replicate-everything"
status = "Enabled"

destination {
bucket = aws_s3_bucket.app_artifact_replica_bucket.arn
storage_class = "STANDARD"
}

filter {
prefix = ""
}
}
}

This is how you build beyond a single-region design. With CRR, your architecture gains both resilience and reach.

Understanding Storage Tiers and Why They Matter

Storage isn’t just about what you save, it’s about how often you use it. AWS S3 offers several storage classes designed for different access patterns: STANDARD for hot data, INTELLIGENT_TIERING for unknown usage patterns, and GLACIER for cold archival data. If you’re storing logs, media, or backups, tiering makes or breaks your cloud bill. The lifecycle engine helps you automate this:

resource "aws_s3_bucket_lifecycle_configuration" "lifecycle" { 
bucket = aws_s3_bucket.app_artifact_bucket.id

rule {
id = "auto-tiering"
status = "Enabled"

transition {
days = 30
storage_class = "STANDARD_IA"
}

transition {
days = 90
storage_class = "GLACIER"
}
}
}

It’s simple: the longer a file goes untouched, the cheaper it should be to store. Automate that decision.

Using S3 Cross-Region Replication in Practice

Let’s walk through a practical example to put it all together and better understand S3 usage. Imagine you have a data pipeline that ingests files into an S3 bucket in us-east-1. These objects are then processed by AWS Glue, some other service, or used downstream in a workflow. If that region experiences an outage, or your organization requires geographic fault tolerance, you don’t want a single-region failure to bring your entire operation down.

That’s where CRR becomes essential. You replicate those objects in near-real time to us-west-2, and in the event of a regional issue, your failover architecture (possibly using Route 53 failover) can redirect traffic or batch jobs to consume data from the secondary bucket.

Here’s how that architecture might play out:

  • User/Service uploads a file to s3://app-artifacts-us-east-1
  • CRR replicates it to s3://app-artifacts-us-west-2
  • Use Route 53 health checks to switch traffic or workflows to the west bucket during a failover event

In this example CRR ensures data is physically available in multiple regions for resilience. This is great for multi-region durability guarantees and DR playbooks that assume storage parity across regions. Let’s not forget about our lifecycle rules, because while CRR increases storage cost (since each object is copied to another region), our rules help control cost growth as the different storage tiers in different regions can be configured to mitigate cost.

We can:

  • Transition replicated objects in the secondary region to cheaper storage tiers (like Glacier or Intelligent-Tiering)
  • Expire or delete data after a set period
  • Reduce retrieval costs for infrequent access patterns
resource "aws_s3_bucket_lifecycle_configuration" "replica_lifecycle" {
bucket = aws_s3_bucket.app_artifact_replica_bucket.id

rule {
id = "transition-to-glacier"
status = "Enabled"

filter {
prefix = ""
}

transition {
days = 30
storage_class = "GLACIER"
}

expiration {
days = 180
}
}
}

Final Thought: Treat S3 Like the Critical Backbone of the Platform

If you’re designing cloud-native platforms, especially in the realm of data operations, S3 is more than just a file dump, it’s the anchor point for ingestion, processing, sharing, and compliance. Every pipeline, every analytic model, and every event-driven workload likely interacts with it. You have to treat S3 the way you’d treat a message broker or a compute platform: with planning, policy, and intentional design. The best data platforms I’ve seen weren’t just clever; they were disciplined in how they managed storage. If this helped you connect those dots, give it a clap or follow, and stay tuned for more practical design guides for the data architect in all of us.

--

--

Christopher B. London
Christopher B. London

Cloud-first data professional designing scalable data and AI platforms. Exploring the architecture and decisions that turn pipelines into intelligent systems.