S3 Buckets as File Systems: Retire NFS/EFS Glue Code with Amazon S3 Files (Without Rewriting Your Data Layout)
Many legacy applications still assume file-system semantics—paths, directories, renames, and concurrent readers—making S3 migrations feel like an all-or-nothing rewrite. Amazon S3 Files offers a modernization bridge: keep S3 as the durable system of record while giving compute workloads high-performance, file-like access patterns that can reduce risk, simplify operations, and help teams delete years of NFS/EFS “compatibility glue.”
Legacy software has a way of turning storage into a long-term hostage situation. If your application expects a POSIX-like file system—directories, atomic-ish renames, file locks, and a tight loop of open/read/write/close—then “just put it in S3” often turns into a months-long refactor, plus a pile of glue code to fake file semantics on top of object storage.
Amazon is signaling a different path: Amazon S3 Files, a feature that makes S3 buckets accessible as high-performance file systems on AWS compute resources. According to the AWS launch post, it’s positioned specifically to remove the tradeoff between object storage benefits and interactive file capabilities, letting teams use S3 with file-like access patterns for compute workloads (AWS Blog: “Launching S3 Files, making S3 buckets accessible as file systems”).
For teams modernizing older systems, that framing matters. It hints at a practical strategy: decouple “storage API assumptions” from application refactors, migrate in smaller steps, and progressively retire the NFS/EFS adapters, sidecars, and cron-driven sync jobs that have accumulated over time.
Context: why S3 migrations stall on file assumptions

Most engineering leaders already know the high-level differences:
- S3 (object storage) excels at durability, scale, lifecycle management, and cost efficiency.
- Traditional file systems (NFS/EFS/FSx) excel at interactive access patterns—frequent metadata operations, directory traversal, low-latency reads/writes, and file-like semantics.
The problem is that many enterprise and “long-lived” workloads were written with file systems as a default. That includes:
- Build pipelines that read and write thousands of small files
- Media and scientific workloads with directory-based datasets
- Document processing systems using rename-as-commit patterns
- ML feature pipelines that “walk” directories and assume stable paths
When these workloads move to cloud, teams often end up with one of three outcomes:
- Keep NFS/EFS and accept higher costs and operational complexity.
- Rewrite to S3 APIs, which can be the right answer—but is rarely “quick.”
- Build glue code (or rely on third-party adapters) that approximates file behavior on top of object operations.
Option #3 is where modernization debt quietly grows: custom sync tools, partial caches, inconsistent semantics, surprising performance cliffs, and on-call pain when “eventual consistency” or object naming assumptions collide with application expectations.
What Amazon S3 Files changes (and what it doesn’t)
The AWS announcement describes Amazon S3 Files as making S3 buckets accessible as file systems—specifically as high-performance file systems on AWS compute resources. The stated goal is to eliminate the tradeoff between object storage benefits (durability, cost, scale) and interactive file capabilities (file-like access patterns) for compute workloads.
A modernization bridge: S3 as system of record, file-like access for compute
The key architectural implication is this: you can treat S3 as the durable source of truth while providing workloads a file-system interface that looks more like what legacy software expects.
That matters because it enables incremental modernization:
- The application continues to “speak files” (paths, directories).
- Your data lives in S3, using the same bucket/object layout you already have (or want).
- You can modernize the application behavior over time (e.g., fewer metadata-heavy operations, more batch-friendly IO patterns), without blocking the storage migration.
In other words: S3 Files can help you remove “storage API assumptions” as a critical path dependency for modernization.
Not a magic wand: semantics and performance still require intent
Even with a file-system view, engineering teams should assume there are still design considerations:
- Consistency and concurrency semantics: legacy apps may rely on behaviors that vary across file systems.
- Workload shape: millions of tiny-file operations vs. large sequential reads will behave differently.
- Operational boundaries: permissions, auditability, and access patterns should align with your security model.
The point isn’t that you stop thinking about IO. The point is you can stop betting your timeline on a big-bang rewrite.
Retiring NFS/EFS “glue code” without rewriting your data layout
In many migrations, the hardest part isn’t moving bytes—it’s unwinding assumptions.
The “NFS/EFS compatibility layer” anti-pattern
A common transitional architecture looks like this:
- App writes to an NFS/EFS mount
- Background jobs sync to S3 for durability, cross-region access, analytics, or downstream workflows
- Another job syncs back (or primes caches) for consumers
This yields recurring issues:
- Split-brain data (which copy is authoritative?)
- Operational burden (sync failures, retries, partial copies)
- Latency surprises (read-after-write behavior varies)
- Cost creep (double storage, network transfer, high IOPS tiers)
S3 Files is explicitly framed as a way to use S3 with file-like access patterns for compute workloads, which suggests a more direct model: keep the system of record in S3, and give compute the interface it needs—without the extra synchronization machinery.
Keeping your existing S3 object layout
A subtle but important promise in the concept of “S3 buckets accessible as file systems” is that you don’t necessarily need to redesign your data layout to match a new storage product. Teams often delay modernization because they fear a cascading rewrite:
- Change storage backend → change naming scheme → change directory structure → change every consumer
A file-system interface over an S3 bucket can help stabilize the “shape” of the data while you modernize consumers one by one. That’s especially valuable when you have:
- Multiple producers and consumers
- Vendor tools that assume directories
- Batch jobs, ad-hoc scripts, and operational runbooks that reference paths
From a maintenance perspective, preserving layout reduces churn, regression risk, and the time you spend coordinating cross-team changes.
Practical implications for engineering teams
S3 Files won’t modernize your application for you—but it can change what’s feasible to modernize this quarter versus next year.
1) Reframe migration plans around interfaces, not storage products
A useful planning technique:
- Identify where your application assumes POSIX-like behavior (rename patterns, directory scans, file locks, temp files, etc.).
- Separate those assumptions into:
- Hard requirements (must behave like a file system)
- Incidental usage (we use files because it was convenient)
Then decide:
- Use S3 Files where file-like access patterns are truly required for compute workloads.
- Plan incremental refactors where usage is incidental (e.g., switching some components to S3 APIs, streaming, or databases).
This reduces migration risk while still moving toward a cleaner architecture.
2) Delete glue code as a first-class modernization milestone
Teams often treat glue code as “temporary,” but it becomes permanent because no one schedules its removal.
Make deletion a deliverable:
- Inventory NFS/EFS sync jobs, caching layers, and file adapters.
- Estimate on-call toil and failure modes they introduce.
- Create a retirement plan tied to S3 Files adoption milestones.
The business value is real: fewer moving parts, fewer pages, simpler IAM/policies, and more predictable cost.
3) Improve operability by consolidating durability and lifecycle in S3
One reason S3 persists as a system of record is its mature operational toolchain: lifecycle policies, replication options, tiering, and broad ecosystem integration.
If S3 Files helps you keep data in S3 while supporting interactive access patterns, you can standardize around:
- One durability model
- One primary backup/retention strategy
- One audit surface for storage access
This is a classic platform move: reduce “special cases” so teams spend less time babysitting storage and more time shipping product.
4) Use it as an incremental modernization layer—not an excuse to stop modernizing
A file-system interface can be a bridge, but bridges should lead somewhere.
A healthy long-term strategy often looks like:
- Phase 1: Adopt S3 Files to reduce risk and unblock migration.
- Phase 2: Refactor the worst offenders (e.g., metadata-heavy directory walks, tiny-file thrash).
- Phase 3: For components that benefit, migrate from file semantics to more cloud-native patterns (streaming IO, event-driven pipelines, object-native reads/writes).
That approach aligns with software maintenance realities: you modernize in slices, prioritize by pain and payoff, and avoid rewriting stable code just to satisfy infrastructure constraints.
Actionable takeaways (what to do next)
Evaluate fit with a workload-first checklist
For each candidate system, answer:
- Does it depend on directory traversal or path-based organization?
- Does it do frequent open/close cycles or create many temporary files?
- Does it require interactive reads/writes during compute (not just batch transfers)?
- Is the team currently maintaining NFS/EFS sync glue or custom adapters?
If you answered “yes” to several, S3 Files is worth piloting.
Run a pilot that measures toil, not just throughput
Performance matters, but modernization success often hinges on operational outcomes.
In your pilot, measure:
- Reduction in sync jobs and scheduled tasks
- Fewer failure modes (and fewer alerts)
- Simpler deployment topology (fewer sidecars/agents)
- Incident rate and mean time to recovery related to storage
These metrics make the ROI legible to CTOs and platform leaders.
Preserve your data layout—then intentionally improve it
Start by keeping the existing layout to minimize blast radius. Once stable:
- Normalize naming conventions
- Document the “contract” for directory structures
- Add lightweight validation to prevent layout drift
This turns “we inherited this mess” into an evolving, governed data interface.
Conclusion: modernize the interface boundary, not the whole application
Amazon S3 Files, as introduced in the AWS launch post, is a clear attempt to close the long-standing gap between object storage and file-like access for compute workloads—making S3 buckets accessible as high-performance file systems and aiming to remove the tradeoff between S3’s durability/scale and interactive file capabilities. For maintenance-heavy teams, that can be the difference between a risky rewrite and a pragmatic migration.
The forward-looking opportunity is bigger than a new feature: it’s a pattern for modernization. If you can decouple storage semantics from application change, you can migrate sooner, delete glue code faster, and refactor on your schedule—while keeping S3 as the durable system of record.
Primary source: AWS Blog, “Launching S3 Files, making S3 buckets accessible as file systems” https://aws.amazon.com/blogs/aws/launching-s3-files-making-s3-buckets-accessible-as-file-systems/