High-Performing Storage: S3 vs EBS vs EFS, Volume Types, and Hybrid Options
High-performing storage on AWS means matching how an application addresses its data (as objects, blocks or files) to the service and configuration that meets its IOPS, throughput, latency and growth needs at the lowest cost. Task 3.1 covers that whole decision: object, block, file and hybrid storage by access pattern; EBS volume types and their current limits; when instance store's raw speed is worth its impermanence; EFS throughput modes, storage classes and One Zone; the FSx family and its deployment types; S3 upload, download and request-rate optimization, including S3 Express One Zone; and bridging on-premises data with Storage Gateway or DataSync. The questions rarely ask what a storage service is. They describe an application, its I/O behaviour and a constraint such as no downtime, survive an AZ failure or lowest cost, and offer options that all technically store bytes. By the end of this lesson you will be able to read the access pattern out of a scenario, map it to the right service and configuration, and eliminate near-miss options on cost, latency, availability or scaling grounds.
On this page10 sections
- Storage types are access patterns: object, block, and file
- EBS volume types: the IOPS-versus-throughput-versus-cost decision
- Changing EBS volumes: Elastic Volumes, Multi-Attach, and cost levers
- Instance store: maximum I/O, zero durability
- EFS: shared POSIX file storage that scales itself
- FSx: when the workload names its file system
- S3 performance: scale is the default — you optimize the path to it
- Hybrid storage: Storage Gateway for ongoing access, DataSync for movement
- The storage-selection table: requirement phrase to service
- Worked scenarios: reasoning through Task 3.1 questions
- Classify any workload's storage need as object, block, file, or hybrid from its access pattern
- Select the right EBS volume type (gp3, io2 Block Express, st1, or sc1) from current IOPS, throughput, latency, and cost limits
- Change EBS volumes in place with Elastic Volumes and use Multi-Attach, RAID 0 and Snapshots Archive where each fits
- Decide when instance store, EFS, or an FSx variant beats EBS, and pick EFS throughput mode, storage class and Regional or One Zone storage
- Choose FSx deployment types (Windows Single-AZ vs Multi-AZ, Lustre scratch vs persistent) and know which FSx variants speak SMB
- Fix S3 bottlenecks by cause: multipart and byte-range for size, Transfer Acceleration for distance, prefixes and CloudFront for request rate, S3 Express One Zone for same-AZ latency
- Choose between Storage Gateway types and DataSync for hybrid access, tape replacement, and data movement
- Apply the selection logic under qualifiers such as MOST cost-effective, MOST performant and least operational overhead
Storage types are access patterns: object, block, and file
Storage on AWS comes in three types defined by how the application addresses its data: object (Amazon S3), block (Amazon EBS) and file (Amazon EFS and FSx). Every Task 3.1 question starts with that silent classification. Answer that and half the options disappear before you weigh performance at all.
Block storage presents a raw device the operating system formats and mounts. The application sees a disk, and every read or write hits fixed-size blocks at very low latency. That is Amazon EBS — attached over the network to one EC2 instance in the same Availability Zone — and it is the answer whenever the scenario involves a boot volume, a self-managed database, or any software that expects a local disk. Block is the fastest per-operation option, but it does not natively share: one volume, one instance, one AZ is the default mental model.
File storage adds a shared hierarchy on top: directories, file locking, and permissions, accessed over a network protocol by many clients at once. That is Amazon EFS (NFS, Linux) and the Amazon FSx family (SMB, Lustre, and others). File is the answer when multiple instances — often across AZs — must read and write the same data through standard file-system semantics.
Object storage drops the hierarchy and the mount entirely: each object is stored with a key and metadata and accessed over an HTTP API. That is Amazon S3 — virtually unlimited capacity and aggregate throughput, but you write and read whole objects (or byte ranges), not blocks inside them. S3 is the answer for static assets, backups, data lakes, media, and anything web-scale where the application can speak an API instead of a filesystem.
The exam encodes the pattern in verbs. "Mount," "POSIX," or "shared directory" means file. "Attach," "boot," "database on EC2," or "low-latency block" means EBS. "Store millions of images," "durable archive," or "accessed via API by a web application" means S3. Options that ignore the access pattern — an S3 bucket where the app needs a mounted filesystem, an EBS volume shared by a fleet — are eliminations, not contenders.
EBS volume types: the IOPS-versus-throughput-versus-cost decision
An EBS volume type is chosen by the shape of the I/O first and the size of the requirement second. SSD volumes (gp3, io2) sell IOPS: small, random reads and writes, the shape of transactional database traffic. HDD volumes (st1, sc1) sell throughput: large, sequential scans at a much lower price per gigabyte, and neither HDD type can be a boot volume. If the scenario says "random," "transactions," or "latency," you are choosing an SSD; if it says "sequential," "large files," "log processing," or "streaming reads," an HDD is probably the cost-correct answer. An HDD offered to cut the bill for a random-I/O workload fails the performance need, however cheap it is.
| Volume type | Performance envelope (current) | Choose it when | Watch out for |
|---|---|---|---|
| gp3 (General Purpose SSD) | 3,000 IOPS and 125 MiB/s included at any size; provision up to 80,000 IOPS (500 IOPS per GiB) and 2,000 MiB/s on volumes up to 64 TiB; single-digit-millisecond latency | Boot volumes, dev/test, most databases and app servers, including heavy ones that accept single-digit-millisecond latency | The default. Wrong only when the IOPS need exceeds its ceiling or the latency must be consistently sub-millisecond |
| io2 Block Express (Provisioned IOPS SSD) | Up to 256,000 IOPS and 4,000 MiB/s on volumes up to 64 TiB; consistent sub-millisecond latency; highest EBS durability | Mission-critical databases needing more IOPS than gp3 can provision, or latency that must stay below a millisecond at peak | Most expensive; a cost trap when gp3 meets both the number and the latency |
| st1 (Throughput Optimized HDD) | Cheap, high sequential throughput | Big data, ETL, log processing, data warehousing on EC2 | Poor at random I/O; not bootable |
| sc1 (Cold HDD) | Lowest EBS cost per GB | Rarely read data that must stay on a mounted volume | Lowest performance; not bootable |
Two older types still appear in scenarios as the starting point of a change. gp2 ties IOPS to size at 3 IOPS per GiB and caps at 16,000 IOPS, so it cannot be grown to match a higher provisioned-IOPS requirement and costs more than gp3 for the same performance. io1 is the previous Provisioned IOPS generation; a workload on io1 whose IOPS fit within gp3's ceiling and that tolerates single-digit-millisecond latency usually runs for less on gp3 at the same provisioned IOPS.
Three configuration facts carry questions. First, gp3 decouples performance from capacity: you raise IOPS or throughput without buying a bigger volume, so "needs more IOPS, the disk is mostly empty" resolves to new gp3 settings, not a larger disk or a new volume type. Second, latency is a property of the volume type. Striping several gp3 volumes with RAID 0 adds their IOPS and throughput together, but each I/O still has gp3 latency, so RAID 0 cannot turn single-digit-millisecond storage into sub-millisecond storage; only io2 Block Express (or instance store) changes the latency class. Third, the IOPS number and the latency requirement are separate tests: a database needing 20,000 IOPS with single-digit-millisecond latency is a gp3 workload, while the same database needing 120,000 IOPS, or sub-millisecond latency at peak, is an io2 Block Express workload.
Changing EBS volumes: Elastic Volumes, Multi-Attach, and cost levers
Most EBS changes happen in place. Elastic Volumes lets you increase a volume's size and change its type, IOPS and throughput while it stays attached and in use, with no downtime: io1 to gp3, gp2 to gp3, gp3 with higher provisioned IOPS, or a large volume of cold data moved to sc1. Size can only grow, and after a modification you wait before modifying the same volume again (the volume passes through an optimizing state). When a scenario says the database cannot be taken offline, a snapshot-and-restore migration or a new volume with a data copy loses to an Elastic Volumes modification.
Multi-Attach: a shared block device, not a shared file system
EBS Multi-Attach attaches one volume to several Nitro-based instances at the same time. It is supported only on Provisioned IOPS SSD volumes (io1 and io2), never on gp3, gp2 or HDD types; every instance must be in the volume's Availability Zone (up to 16 instances); and the application must coordinate writes with a cluster-aware file system, because a standard file system such as ext4 or XFS mounted by several hosts corrupts data. Keep the distinction sharp: clustered software that needs a shared block device every node attaches directly uses io1/io2 Multi-Attach; ordinary applications that need shared files, especially across AZs, use a file service (EFS, or FSx for Windows/SMB).
Cost levers that keep the data where it must be
| Situation | Lever | What it keeps or gives up |
|---|---|---|
| gp3 provisioned well above what the workload uses | Lower IOPS/throughput toward the included 3,000 IOPS and 125 MiB/s baseline | You pay only for performance above the baseline; same volume, no downtime |
| io1/io2 or gp2 paying for performance gp3 can deliver | Modify the volume to gp3 with Elastic Volumes | Same data and IOPS, lower price, single-digit-millisecond latency |
| Data read a few times a year but it must remain on a mounted volume | Modify to sc1 | Still mounted and readable; slow, which the scenario accepts |
| Snapshots kept for months or years for compliance and rarely restored | EBS Snapshots Archive | Much lower storage price per GB; a minimum archive period of 90 days and a restore that takes hours before the snapshot can be used |
The deciding detail is usually whether the data must stay mounted. If auditors need to browse files on an attached volume, sc1 keeps them there; if only a point-in-time copy must be retained, a snapshot in the archive tier is cheaper still, but it is not a mounted volume.
Instance store: maximum I/O, zero durability
When a scenario demands the absolute fastest storage an EC2 instance can touch, the answer is not an EBS type at all. Instance store is disk (typically NVMe SSD) physically attached to the host machine — no network hop between the instance and the storage — which gives it the highest IOPS and lowest latency available to EC2, at no separate storage charge, because it comes bundled with instance types that include it (the storage-optimized families are built around it).
The price is durability. Instance store is ephemeral: the data is gone when the instance stops, hibernates, or terminates, or when the underlying hardware fails. You cannot snapshot it the way you snapshot EBS, you cannot detach it and move it, and it exists only for the life of that instance on that host.
That failure mode defines the decision rule: instance store is correct only when the data is replaceable or replicated elsewhere. The legitimate uses are caches, buffers, scratch space for intermediate computation, temporary database files, and nodes of distributed data stores that replicate across instances — a NoSQL cluster where losing one node's disk costs nothing because peers hold copies. In each case the speed is pure win because durability was never this disk's job. Well-designed architectures pair it with a durable layer: intermediate results checkpointed to S3, or cluster replication that rebuilds a lost node from its peers, so the ephemeral disk is always recoverable state, never the system of record.
The durable alternative for the same high-I/O workload is io2 Block Express. It is network-attached, so its sub-millisecond latency is still higher than local NVMe, but it survives stops, host failures and instance replacement, can be snapshotted, and can be detached and reattached. For a distributed database that already replicates every partition to nodes in other AZs, instance store wins: losing one node's disk is repaired from its peers, and paying for durable provisioned IOPS on every replica buys protection the cluster already provides. For a database that keeps a single authoritative copy, or that must restart on a new host without rebuilding from peers, io2 Block Express is the answer. Scheduled backups to S3 add a recovery point for both designs.
A useful cross-signal: the storage-optimized instance families exist precisely to ship large, fast local NVMe — when a scenario picks one of those for a high-I/O distributed database, the instance store is the point of the choice, not an accident of it.
The exam plays this from both directions. In one shape, the scenario needs "the highest possible I/O performance" for temporary processing data, and instance store beats every EBS option — including io2 — because physical attachment beats network-attached storage. In the other shape, instance store appears as a trap: an option proposes it for data the scenario clearly needs to survive a stop/start cycle, and you eliminate it on the ephemerality alone. Read for one word before you pick it: is the data temporary? If the scenario never says so, instance store is the distractor, not the answer.
FSx: when the workload names its file system
The FSx family exists for workloads that need a specific file-system technology: the scenario names the ecosystem or protocol, and that names the FSx variant.
FSx for Windows File Server is fully managed Windows-native file storage: SMB protocol, NTFS permissions and, the detail most scenarios lean on, integration with Active Directory. Windows applications, mapped network drives, SMB shares or users authenticating against AD resolve here. EFS is wrong for these because it speaks NFS to Linux clients. Its deployment type decides availability: Single-AZ runs one file server in one AZ (data is replicated within that AZ), so an AZ outage takes the share down; Multi-AZ runs an active file server and a standby in a second AZ with synchronous replication and automatic failover, so the share survives an AZ failure. A requirement that the share stay available if an AZ fails means Multi-AZ.
FSx for Lustre is the high-performance computing answer: a parallel file system built for very high aggregate throughput, sub-millisecond latencies and massive concurrency, used for machine learning training, genomics, financial simulation and rendering. Its signature feature is the S3 linkage: a Lustre file system can be linked to an S3 bucket, presenting the bucket's objects as files, letting a compute fleet process them at Lustre speed, and writing results back to S3. Deployment types set cost and durability: scratch file systems are cheaper and do not replicate data (a failed server loses its data), built for short-lived processing; persistent file systems replicate within the AZ for longer-running workloads. A processing burst over data whose durable copy lives in S3 pairs naturally with scratch.
| FSx variant | Protocols and identity | Signal in the scenario |
|---|---|---|
| FSx for Windows File Server | SMB; NTFS ACLs; Active Directory | Windows apps, mapped drives, AD groups |
| FSx for Lustre | Lustre client (POSIX); S3 data repository link | HPC, ML training, parallel throughput over S3 data |
| FSx for NetApp ONTAP | NFS, SMB and iSCSI from one file system (multi-protocol) | Existing NetApp/ONTAP estate; Linux and Windows clients on the same data |
| FSx for OpenZFS | NFS only (v3 and v4.x); Unix permissions | ZFS features (snapshots, clones) for Linux/NFS workloads moving from ZFS |
FSx for OpenZFS cannot serve SMB shares or Active Directory permissions, so it is never the answer for Windows clients; among the FSx variants, only Windows File Server and ONTAP speak SMB. The usual FSx scenario is a shared-file requirement with one qualifying noun (Windows, Active Directory, HPC, Lustre, NetApp, ZFS) and four file services as options. The noun picks the winner; the discipline is not defaulting to EFS out of familiarity when the scenario has ruled Linux/NFS out.
S3 performance: scale is the default — you optimize the path to it
S3's aggregate throughput scales automatically and is virtually unlimited; you do not provision S3, so S3 performance work means matching an optimization to the bottleneck: object size, distance, request rate or latency.
Multipart upload splits a large object into parts uploaded in parallel; a failed part retries alone instead of restarting the whole transfer. It is recommended for large objects generally and is the answer when large uploads are slow or fail partway on unreliable connections. Byte-range fetches are the download mirror: request ranges of an object in parallel to use more bandwidth, or fetch only the bytes you need, such as a header at a known offset, instead of the whole object.
Transfer Acceleration attacks distance, not size: clients upload through the nearest CloudFront edge location and the data travels Amazon's backbone to the bucket's Region. It helps clients far from the bucket and buys little for clients already near it. It is a network path, not a cache: every request still reaches the bucket. Multipart and Transfer Acceleration combine for globally distributed large-file ingestion.
Request rates, prefixes, and 503 Slow Down
S3 supports at least 3,500 PUT/COPY/POST/DELETE and 5,500 GET/HEAD requests per second per partitioned prefix, with no limit on the number of prefixes in a bucket. Traffic above a prefix's current rate is answered with HTTP 503 Slow Down while S3 scales. Two fixes match two causes. Spreading keys across many prefixes multiplies the request rate the bucket can serve, but only for objects stored under those prefixes: hot objects that already exist must be copied to the new keys (and references updated) to benefit; re-keying only new uploads leaves the hot objects throttled. When the load is the same objects read over and over, CloudFront in front of the bucket serves them from edge caches, so most requests never reach S3 at all, and readers worldwide get lower latency. Clients should also retry 503s with exponential backoff.
S3 Express One Zone: lowest latency next to the compute
S3 Express One Zone is a storage class that stores data in directory buckets in a single Availability Zone you choose, delivering consistent single-digit-millisecond access and very high request rates for compute running in the same AZ, such as ML training or interactive analytics reading many small objects. Because data lives in one AZ, it fits data that can be re-created or has a copy elsewhere. It does nothing for uploaders far from the Region; distance is Transfer Acceleration's job.
When the same objects must be written and read at low latency from multiple Regions, S3 replication and Multi-Region Access Points put copies near each set of users. In short: object size (multipart, byte-range), distance (Transfer Acceleration for uploads, CloudFront for reads), request rate (prefixes, CloudFront for repeated reads), same-AZ latency (S3 Express One Zone). Name the bottleneck first and the optimization follows.
Hybrid storage: Storage Gateway for ongoing access, DataSync for movement
Hybrid questions hinge on one distinction: does the on-premises side need continuing access to data that lives in AWS, or does data need to be moved to AWS?
AWS Storage Gateway answers the first case. It is an on-premises appliance (virtual or hardware) that presents standard storage interfaces locally while the data lives in AWS — and, critically, it keeps a local cache of frequently accessed data, so on-premises applications get low-latency access to their hot set while the cloud holds the durable copy. Three types, matched by interface: S3 File Gateway presents NFS or SMB shares backed by S3 objects (SMB shares can authenticate users against Active Directory), the answer for "on-premises applications need file access to data stored in S3." Volume Gateway presents iSCSI block volumes, in cached mode (data in AWS, hot blocks cached locally — extends limited local storage) or stored mode (full dataset on-premises, asynchronously backed up to AWS as EBS snapshots — for lowest-latency full-local access). Tape Gateway presents a virtual tape library (iSCSI VTL), so existing backup software keeps writing to "tapes" with its current jobs. Active virtual tapes are stored in S3; when the backup application ejects a tape, it is archived to the pool you choose: S3 Glacier Flexible Retrieval or S3 Glacier Deep Archive, the lowest-cost option for long-term copies that are rarely restored (retrieving an archived tape takes hours). Pointing the backups at an S3 File Gateway share with lifecycle rules could also reach Glacier storage, but it would mean reconfiguring tape-based backup jobs to write to a file share instead, which is exactly what Tape Gateway avoids.
AWS DataSync answers the second case: an online transfer service purpose-built for moving datasets — one-time migrations or scheduled, incremental transfers — from NFS, SMB, HDFS, or object storage into S3, EFS, or FSx (and between AWS storage services), with built-in acceleration, scheduling, encryption, and integrity verification. When a scenario says "migrate," "transfer," "one-time," or "nightly sync of on-premises data to AWS," DataSync beats a gateway: it moves data efficiently and stops, rather than standing up a permanent access bridge.
The exam pairs them deliberately. "Applications keep working against the data from the datacenter" — Storage Gateway, then pick File, Volume, or Tape by the interface named. "Get the data into AWS on a schedule, decommission afterwards" — DataSync. An answer offering DataSync for continuous application access, or a File Gateway for a bulk migration, has confused access with movement — the exact confusion the question is checking for.
The storage-selection table: requirement phrase to service
Most Task 3.1 questions compress to a phrase-to-service lookup. Internalize this table and read scenarios for the trigger phrase in the left column.
| Requirement phrase in the scenario | Service / configuration | Why it wins |
|---|---|---|
| Boot volume, or a general database on one EC2 instance | EBS gp3 | Block latency at balanced cost; raise IOPS/throughput independently of size if needed |
| Database needs more IOPS than gp3 can provision, or consistent sub-millisecond latency | EBS io2 Block Express | Up to 256,000 IOPS, sub-millisecond latency, highest durability |
| Change volume type or IOPS without taking the database offline | Elastic Volumes modification | Type, IOPS, throughput and size change in place on an attached volume |
| Clustered app needs one block device attached by several nodes in one AZ | io1/io2 with Multi-Attach | Only Provisioned IOPS volumes support it; needs a cluster-aware file system |
| Large sequential scans — big data, log processing — at low cost | EBS st1 | HDD throughput pricing; sequential pattern doesn't need SSD IOPS |
| Rarely accessed volume data, lowest storage cost | EBS sc1 | Cheapest EBS per GB; performance is not the requirement |
| Fastest possible I/O for temporary, replaceable data | Instance store | Physically attached NVMe beats any network-attached volume; ephemerality is acceptable by definition |
| Many Linux instances share one file system across AZs (POSIX) | EFS | Managed NFS, concurrent multi-AZ mounts, elastic capacity |
| Bursting EFS file system throttled after credits run out | EFS Provisioned (steady, known load) or Elastic (spiky, unpredictable load) throughput | Both decouple throughput from stored size; the load shape decides which is cheaper |
| Shared file data ageing and rarely read, costs climbing | EFS lifecycle management to IA, then Archive (Archive needs Elastic throughput) | Storage class sets the per-GB price; throughput mode does not |
| Windows applications, SMB shares, Active Directory | FSx for Windows File Server (Multi-AZ if it must survive an AZ failure) | Native SMB/NTFS + AD integration; EFS and FSx for OpenZFS are NFS only |
| HPC / ML training needs a fast parallel file system over S3 data | FSx for Lustre (S3-linked) | Extreme parallel throughput with objects presented as files |
| Web-scale objects: assets, backups, data lake, media | S3 (+ multipart, prefixes, Transfer Acceleration as the bottleneck dictates) | Virtually unlimited capacity and aggregate throughput, HTTP access |
| HTTP 503 Slow Down on hot objects under one prefix | Re-key objects across prefixes; CloudFront for repeated reads | Request-rate limits are per partitioned prefix; edge caching removes repeat requests |
| Lowest-latency object access for compute in one AZ | S3 Express One Zone (directory bucket) | Single-digit-millisecond access in the same AZ; single-AZ storage |
| On-premises apps need ongoing low-latency access to data stored in AWS | Storage Gateway (File/Volume/Tape by interface) | Local cache for the hot set; durable copy in the cloud |
| Replace physical tape without changing backup jobs, lowest storage cost | Tape Gateway archiving to S3 Glacier Deep Archive | Backup software still writes tapes; ejected tapes land in the cheapest archive tier |
| Migrate or schedule transfers of on-premises data into AWS storage | DataSync | Purpose-built accelerated movement, one-time or scheduled — not an access bridge |
Exam questions built on this table hide the phrase inside operational detail — your job is extraction. When two rows both seem to fit, the constraint qualifier (MOST performant, MOST cost-effective, LEAST overhead) breaks the tie: performance qualifiers push toward io2 Block Express, instance store, Lustre or S3 Express One Zone; cost qualifiers push toward gp3, HDD types, or S3.
Worked scenarios: reasoning through Task 3.1 questions
Scenario 1. A market-data platform writes every incoming tick to a write-ahead log on a single EC2 instance before acknowledging it. The log needs only around 25,000 IOPS, but the acknowledgement path is budgeted for storage latency well under a millisecond, and the log must survive an instance stop. What should back the log volume?
Reasoning: Start with what the numbers say, one requirement at a time. On IOPS alone, 25,000 sits comfortably inside gp3's range, so if throughput were the only constraint, gp3 with raised IOPS would be the cost-first answer. The latency requirement is a separate test, and gp3 fails it: gp3 is a single-digit-millisecond volume regardless of how many IOPS you provision, and adding volumes in a stripe raises the aggregate rate without moving any single I/O into a lower latency class. Durability rules out instance store, which is fast but is lost on a stop. That leaves io2 Block Express, provisioned near the measured 25,000 IOPS rather than at its maximum, because latency is the reason to choose it and paying for unused IOPS buys nothing. The lesson: IOPS and latency are independent gates. A modest IOPS figure does not make gp3 sufficient when the latency budget is sub-millisecond, and a high IOPS figure above gp3's ceiling forces io2 even when latency is relaxed. When neither gate is crossed, gp3 is the answer and io2 is overspend.
Scenario 2. During a phased migration, a Linux build farm runs partly on EC2 instances in two Availability Zones and partly on on-premises Linux servers connected over AWS Direct Connect. Both groups must read and write one shared directory of build artifacts with ordinary file operations, and the team does not want to manage file servers. What storage fits?
Reasoning: Name the pattern before the service: shared, read-write, POSIX/NFS, multiple AZs, plus on-premises clients, no servers to run. Shared file semantics points to file storage rather than block or object storage. Linux clients with no Windows, SMB or Active Directory requirement point to NFS, and nothing mentions HPC scratch or a NetApp feature set, so Amazon EFS fits. A Regional EFS file system has mount targets in each AZ, and on-premises Linux servers can mount it over Direct Connect or a VPN, so both halves of the farm see the same directory with no gateway to operate. The variants show how the pattern drives the answer. If the clients were Windows and used SMB shares joined to AD, the answer would move to FSx for Windows File Server. If the on-premises side needed a low-latency local cache of data whose system of record is S3, the answer would be S3 File Gateway. If the on-premises data only had to be copied into AWS once, DataSync would replace a shared mount altogether.
Tip. SAA-C03 tests Task 3.1 with scenario questions that describe an application's I/O behaviour (random or sequential, shared or single-instance, temporary or durable, near or far, steady or spiky) and a constraint such as no downtime, survive an AZ failure, keep existing backup jobs, or lowest cost. Common shapes: the EBS ladder with a stated IOPS figure and latency tolerance (gp3 versus io2 Block Express), changing a volume in place with Elastic Volumes, the S3-vs-EFS-vs-EBS choice for shared access, EFS throughput mode by load shape and storage class for cost, FSx by protocol and deployment type, the S3 optimization matched to its bottleneck (multipart, Transfer Acceleration, prefixes and CloudFront for 503 errors), and the Storage Gateway type or DataSync for hybrid needs. Wrong options are usually near-misses: a service that meets one stated requirement but misses another, such as the right performance with the wrong durability or the right capacity at the wrong cost. Reading the qualifier (MOST cost-effective versus MOST performant, least operational overhead) decides between options that all work.
- Classify by access pattern first: mounted raw disk = EBS (block), shared directories across instances = EFS/FSx (file), API-accessed web-scale data = S3 (object).
- EBS ladder: gp3 by default (up to 80,000 IOPS and 2,000 MiB/s, single-digit-millisecond latency); io2 Block Express when IOPS exceed that or latency must be sub-millisecond; st1 for cheap sequential throughput; sc1 for cold data that must stay mounted. HDDs never boot.
- gp3 decouples performance from capacity, and Elastic Volumes changes type, IOPS and throughput in place with no downtime. RAID 0 adds IOPS, never a lower latency class.
- Multi-Attach is io1/io2 only, same AZ, cluster-aware file system: a shared block device, not a substitute for EFS.
- Instance store is the fastest storage EC2 can touch and vanishes on stop or failure; io2 Block Express is the durable, network-attached alternative when the data is not replicated elsewhere.
- EFS: Elastic throughput is the default for spiky or unknown load, Provisioned for steady known load; storage classes (Standard, IA, Archive) are the cost lever, and Archive needs Elastic throughput. One Zone is cheaper but lives and fails with one AZ.
- Windows/SMB/AD means FSx for Windows File Server (Multi-AZ to survive an AZ failure); FSx for OpenZFS is NFS only; HPC over S3 data means FSx for Lustre, scratch for short bursts.
- S3 by bottleneck: multipart and byte-range for size, Transfer Acceleration for distance (no caching), prefixes (re-key existing hot objects) and CloudFront for 503 Slow Down, S3 Express One Zone for same-AZ latency.
- Hybrid: Storage Gateway for ongoing access with a local cache (Tape Gateway archives to Glacier Deep Archive without changing backup jobs); DataSync for one-time or scheduled movement.
- Read the qualifier: under MOST cost-effective, pick the cheapest option that still meets every stated requirement; under MOST performant, meet the performance requirement first and treat cost as secondary.
Frequently asked questions
What is the difference between S3, EBS, and EFS?
They differ by access pattern. Amazon EBS is block storage: a virtual disk attached to a single EC2 instance in one Availability Zone — the choice for boot volumes and databases that expect a local disk. Amazon EFS is file storage: a managed NFS file system that many Linux instances mount concurrently across multiple AZs, with POSIX permissions and locking, and capacity that grows automatically. Amazon S3 is object storage: data stored as objects behind an HTTP API with virtually unlimited capacity and aggregate throughput, ideal for static assets, backups, and data lakes. Match the service to how the application addresses data — disk, shared directory, or API.
When should I use gp3 vs io2 EBS volumes?
Use gp3 unless a requirement exceeds it. gp3 includes 3,000 IOPS and 125 MiB/s at any size and can be provisioned up to 80,000 IOPS and 2,000 MiB/s, independently of volume size, with single-digit-millisecond latency, so it suits boot volumes, application servers and most databases, including busy ones. Choose io2 Block Express when the workload needs more IOPS than gp3 can provision (io2 Block Express reaches 256,000) or latency that stays consistently below one millisecond, typically for mission-critical transactional databases. If both the IOPS figure and the latency tolerance fit within gp3, io2 costs more for no benefit; striping gp3 volumes adds IOPS but never lowers latency.
Can multiple EC2 instances share one EBS volume?
Only in a narrow case. EBS Multi-Attach lets a Provisioned IOPS SSD volume (io1 or io2) attach to up to 16 Nitro-based instances at once; gp3, gp2 and HDD volumes do not support it. All instances must be in the volume's Availability Zone, and the application must use a cluster-aware file system that coordinates writes, because a standard file system like ext4 or XFS would corrupt data. It exists for clustered applications that need a shared block device. When instances, especially across AZs, need to share files, use a file service: Amazon EFS for Linux/NFS or Amazon FSx for Windows File Server for SMB.
How do I speed up large file uploads to S3?
Match the tool to the bottleneck. If the object is large, use multipart upload: the file is split into parts uploaded in parallel, and a failed part retries alone instead of restarting the whole transfer. If the distance is large, such as users uploading from around the world to a bucket in one Region, enable S3 Transfer Acceleration, which routes uploads through the nearest CloudFront edge location and across Amazon's backbone. The two combine for globally distributed large-file ingestion. For downloads, the parallel equivalent is byte-range fetches. If compute in one Availability Zone needs the lowest-latency access to objects, S3 Express One Zone directory buckets in that AZ are the option; they do not help distant uploaders.
What is the difference between EFS bursting and provisioned throughput?
They supply throughput differently. In Bursting mode, throughput scales with how much data the file system stores in the Standard class, so a small but busy file system spends its burst credits and is throttled. Provisioned mode sets a throughput level independent of size and charges for it whether it is used or not, which suits steady, known demand. Elastic mode, the default and AWS's recommendation, scales throughput automatically and bills for data read and written, which suits spiky or unpredictable demand without paying for an idle peak. You can switch modes on an existing file system. None of the modes lowers the per-GB storage price; that comes from lifecycle management into Infrequent Access and Archive, and Archive requires Elastic throughput.
When should I use AWS DataSync vs Storage Gateway?
Ask whether the job is movement or access. AWS DataSync moves data: one-time migrations or scheduled incremental transfers from NFS, SMB, HDFS, or object storage into S3, EFS, or FSx, with acceleration, scheduling, and integrity verification built in — once the data is transferred, the job is done. AWS Storage Gateway provides ongoing access: on-premises applications keep reading and writing through familiar interfaces (NFS/SMB file shares, iSCSI volumes, or a virtual tape library) while the data lives durably in AWS, with a local cache keeping hot data fast. Migration or nightly sync means DataSync; applications continuing to work against the data means Storage Gateway.
What is EC2 instance store used for?
Instance store is disk physically attached to the host running your instance, so it delivers the highest IOPS and lowest latency available to EC2 — faster than any network-attached EBS volume. The trade-off is that it is ephemeral: data disappears when the instance stops, hibernates, terminates, or the hardware fails, and it cannot be snapshotted or detached. Use it for data that is replaceable or replicated elsewhere: caches, buffers, scratch space for intermediate processing, temporary database files, or nodes of a distributed data store that replicates across instances. If the data must survive an instance stop, instance store is the wrong answer.
Why does Amazon S3 return 503 Slow Down errors?
S3 returns HTTP 503 Slow Down when requests to one partitioned prefix exceed the rate it currently supports: at least 3,500 PUT/COPY/POST/DELETE and 5,500 GET/HEAD requests per second per prefix. Because the limit is per prefix and a bucket can have any number of prefixes, spreading keys across many prefixes raises the total rate; objects that are already hot must be copied to the new keys and references updated, since re-keying only new uploads leaves the existing hot objects throttled. When the traffic is repeated reads of the same objects, putting CloudFront in front of the bucket serves them from edge caches so most requests never reach S3. S3 Transfer Acceleration does not help here because it does not cache. Clients should also retry 503 responses with exponential backoff.
Source
This lesson covers the "Design High-Performing Architectures" domain of the official SAA-C03 exam guide. Vendors revise their guides — check the source for the current version.
- AWS Certified Solutions Architect – Associate (SAA-C03) exam guide — Amazon Web Services
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.