Data and Analytics on AWS
Data and analytics on an AWS lakehouse
AWS gives you a lake-first architecture in which storage, catalogue, query and compute are separate services you assemble deliberately. That is more design work than adopting a single suite, and it is the right trade when workloads differ from each other, volumes are large, or your applications already run on AWS. We establish the Amazon S3 and catalogue foundation first, then add only the query engines the access patterns justify. The decision that determines your bill is not which engine you pick, it is how the data is laid out underneath it.
Why AWS
When this is the right platform.
- Storage and compute are genuinely separate. Data lands once in Amazon S3 and Athena, Redshift, EMR and OpenSearch each read it with the engine that suits the query, so exploratory work is not billed at warehouse rates.
- Where transactional applications already run on Aurora, RDS or DynamoDB, the ingestion path is short and well understood, and change data capture into the lake is a settled pattern rather than an integration project.
- Open table formats are first-class. Iceberg tables on S3 give you transactional behaviour, schema evolution and time travel over storage that other engines can read, which keeps the curated layer the least locked-in part of the platform.
- Cost scales down as well as up. Athena bills on data scanned and Redshift Serverless bills for the compute it consumes, which suits organisations whose analytics load is spiky rather than constant.
- AWS Lake Formation applies table, column and row-level permissions to the catalogue centrally, so one grant governs Athena, Redshift Spectrum and EMR instead of each engine holding its own rules.
- Engine choice stays open. Batch engineering, ad hoc SQL, streaming and search each have a fit-for-purpose service, which matters when one workload looks nothing like the next.
Where it is less suited
We would rather say this now than after a migration.
- You are assembling a platform rather than adopting one. Component choice is an advantage when workloads differ, but it means more design decisions up front and more integration to own than a single suite asks for. If your estate is small and uniform, that flexibility is a cost with no matching benefit and we will say so.
- Query cost is a function of data layout, not engine choice. Unpartitioned tables and thousands of small files turn a cheap query into an expensive one, and managed table maintenance is itself a billed activity: high write churn drives compaction charges that appear on the invoice separately from storage. File format, partitioning and compaction need ongoing attention rather than one-time configuration.
- Permissions can be granted in three places at once through IAM policy, bucket policy and Lake Formation. Unless the model is deliberately centralised, the effective access on a dataset becomes genuinely hard to state with confidence, which is the answer nobody wants to give an auditor.
- Zero-ETL integrations remove the pipeline, not the modelling. They replicate source tables as they are, carry conditions such as same-region placement and no in-flight transformation, and can require a resync after certain source events. Treat them as a cheaper landing mechanism rather than as a substitute for a curated layer.
- Business-user self-service reporting takes more setup than in an estate where a reporting tool is already deployed to every employee, because identity, licensing and rollout all have to be planned rather than inherited. Where an organisation already has Power BI across the business, that is a genuine argument for the other platform.
- Service naming and packaging in the AWS analytics area has shifted repeatedly, with catalogue and studio experiences folded into the SageMaker family and the business intelligence product renamed. Vendor documentation, blog posts and your existing infrastructure code will not all agree, so we confirm current behaviour against what is deployed rather than trusting an article.
Business outcomes
What AWS delivers here.
- One governed lake instead of a copy per team
- Analytics, engineering and application teams read the same curated tables through a shared catalogue rather than each keeping a private extract that diverges the week after it is taken.Agreed measure: Share of production datasets served from the catalogue rather than a private bucket or database copy, verified at handover.
- Query cost tied to what is actually asked
- Finance sees analytics spend split between storage, bytes scanned, table maintenance and warehouse compute, which makes an expensive dashboard both visible and fixable rather than an unexplained line.Agreed measure: Monthly cost view by workload, agreed alongside the partitioning and file-layout targets that reduce what each query reads.
- Operational databases relieved of reporting load
- Application teams stop having month-end reports run against the production Aurora or RDS instance, which removes a recurring cause of contention and slow pages for the people using the application.Agreed measure: Reporting query load on the operational database baselined before the change and measured after it.
- Near real-time visibility where it earns its keep
- Streamed events from devices, applications or the warehouse floor reach the lake within minutes and drive exception dashboards, while routine reporting stays on the batch schedule it does not need to leave.Agreed measure: Latency target agreed measure by measure before any streaming component is built.
- A credible path off ageing databases
- Legacy on-premises databases move to managed services on a schedule with defined rollback points, using change data capture so cutover does not require a long outage nobody can authorise.Agreed measure: Reconciliation counts per table and the agreed cutover window, both signed off before the migration runs.
- A platform that can be rebuilt, not repaired
- Storage, catalogue, jobs and permissions deployed from infrastructure as code across separate accounts, so an environment can be recreated and a change can be reviewed before it reaches production data.Agreed measure: Whether a non-production environment can be rebuilt from code without manual steps, demonstrated at handover.
Common client problems
What we usually hear first.
We have data spread across a dozen S3 buckets and nobody knows which of it is current.
We catalogue the estate, establish which prefixes a live workload actually reads, and separate curated tables from the raw dumps that have accumulated over the years. Buckets nothing reads move to a colder storage class or are deleted once the owner signs off. The awkward finding is usually that two teams maintain overlapping copies of the same source and both believe theirs is authoritative.
Our Redshift bill went up sharply and nobody can tell me why.
We break the spend down by workload and look for the usual causes: unpartitioned scans, unsorted tables, clusters running through the night, and reports doing a full refresh where an incremental one would do. Each fix is quantified so you decide what is worth changing before we change it. Occasionally the answer is that the workload genuinely needs the capacity, in which case we say so rather than tuning for a fortnight.
Reporting queries are hitting our production database and slowing the application down.
We move reporting off the transactional instance using change data capture into the lake, with a curated layer the reports read instead. Where a zero-ETL integration covers the source it can remove the pipeline entirely, but it replicates tables as they are, so the conformance and modelling work still has to happen somewhere. The application team gets its headroom back and the reporting team stops negotiating for query windows.
Every team built its own pipeline and now we maintain nine of them.
We consolidate onto a shared ingestion and transformation pattern with common orchestration, logging and error handling, then migrate the existing pipelines onto it one at a time. Teams keep ownership of their business logic and stop maintaining their own plumbing. This is slower than a rewrite and considerably less likely to break a report somebody presents to the board.
I cannot answer a simple question about who has access to which dataset.
That is usually because permissions exist in three places at once: IAM policy, bucket policy and Lake Formation grants. We centralise table, column and row-level permissions in Lake Formation, remove the bucket-level grants that quietly bypass it, and map access to roles tied to identity groups. The current state can then be exported for review at any time instead of reconstructed by an engineer.
We keep reading about new AWS analytics services and cannot tell what we should be using.
Naming and packaging in this area has shifted repeatedly, with the catalogue and studio experiences being folded into the SageMaker family and the business intelligence product renamed. We map what you already run to the current services, separate what changed in substance from what changed in name, and recommend the smallest set that covers your access patterns. Adopting a new studio experience is rarely the thing standing between you and a trusted number.
How we deliver
Our AWS delivery approach.
- 01
Assessment and advisory
The AWS assessment concentrates on what the estate costs to run today and which engines each workload genuinely needs. In our experience most of the saving comes from access patterns and data layout, not from resizing clusters.
- Storage inventoried and priced. Buckets, prefixes, storage classes and lifecycle rules listed, identifying data that is stored and paid for every month but never read.
- Catalogue coverage checked. Crawler behaviour, stale table definitions and orphaned schemas compared against the prefixes actually in active use.
- Query history analysed for cost. Athena and Redshift history examined for the heaviest queries, bytes scanned and the specific reports responsible for them.
- Sources mapped with change rate. Aurora, RDS, DynamoDB and on-premises databases recorded with volume, change rate and extraction method, since that decides between batch, change data capture and zero-ETL.
- Permissions traced across all three planes. IAM policy, bucket policy and Lake Formation grants compared, with every dataset governed in more than one place documented as a risk.
- Target architecture with a costed sequence. The first workload chosen for business value rather than technical convenience, with effort and running cost attached to each step.
- 02
Architecture and implementation
We build a lake with clear zones and a catalogue that means something, then add only the engines the workloads justify. The first delivery is a single business domain running end to end in production.
- Zones and conventions set at account level. Raw, curated and consumption zones in Amazon S3 with an agreed bucket and prefix convention, lifecycle policies and encryption defaults applied as account defaults rather than per bucket.
- Ingestion with reconciliation on every load. Batch ingestion built with AWS Glue and change data capture from operational databases with AWS Database Migration Service, each load producing counts that reconcile to the source.
- Curated layer in an open table format. Iceberg tables with partitioning and file sizes chosen from observed query patterns, so bytes scanned stay proportionate to the question being asked.
- Maintenance treated as part of the design. Compaction, snapshot expiry and lifecycle rules configured from the start, because small-file accumulation is what turns a cheap query into an expensive one.
- Engines added on evidence. Athena for exploration, Amazon Redshift for modelled reporting under concurrency, Amazon EMR only where Spark is genuinely required rather than culturally preferred.
- Streaming chosen on skills, not fashion. Amazon Kinesis or Amazon MSK selected on existing Kafka capability, ordering and retention requirements, with the operating burden of each stated up front.
- Everything deployed from code. Infrastructure as code across separate development, test and production accounts, so an environment can be rebuilt rather than repaired under pressure.
- 03
Security and governance
On AWS the governance question is where permissions live, because the same table can be reached through several engines. We settle that early and keep the answer in one place. The wider cataloguing and compliance-evidence programme is covered on our data governance and compliance page.
- One permission plane, not three. Table, column and row-level permissions centralised in AWS Lake Formation, with the duplicate bucket-level grants that quietly bypass it removed.
- Roles mapped to identity groups. Access granted to IAM roles tied to identity groups, with no long-lived user keys and no standing administrative access to production data.
- Encryption enforced, not requested. Customer-managed keys at rest and encryption in transit enforced through bucket policy rather than relying on each client being configured correctly.
- Access requests recorded as a workflow. Ownership and business context published so requesting access is a recorded request against a dataset rather than a message to an engineer who happens to be free.
- Access logging routed centrally. S3, Athena and Redshift access logs sent to the account where the security team already reviews logs, not left enabled locally and unread.
- Controls mapped to your framework. The control set documented against the framework your organisation is aligning to, such as the Essential Eight or the Australian Privacy Principles, with residual gaps recorded.
- 04
Adoption and enablement
AWS gives teams more choice, and choice becomes sprawl unless somebody writes down what to use when. Enablement here is mostly about that decision and about making the catalogue the first place anyone looks.
- A written guide to engine choice. Which engine suits which job, published so a new team does not stand up its own cluster by default and then own it forever.
- Analysts trained on what a query costs. Dashboard authoring plus writing Athena queries that respect partitioning, with the cost of a full table scan made explicit in the training.
- Runbooks for pipeline operations. How to rerun a failed load, how to backfill a date range without duplicating rows, and who to call when a change data capture task falls behind.
- An owner recorded per curated dataset. Each dataset carrying a named owner and a plain-language description of what it contains, held where consumers actually look for it.
- Legacy extracts retired on sign-off. The reports and extracts the new datasets replace switched off once reconciliation has been accepted by their owner.
- Access onboarding as a process. New consumers granted access through a recorded request path instead of an ad hoc grant nobody can later explain.
- 05
Managed service continuation
Lake platforms degrade through small file accumulation, unpartitioned growth and permissions granted once for a reason nobody now remembers. We stay on to keep the platform in shape.
- Jobs and streams monitored. Glue jobs, database migration tasks and streaming consumers watched with alerting on failure, consumer lag and record counts outside expected ranges.
- Table maintenance kept current. Compaction, snapshot expiry, partitioning review and statistics refreshed so query performance does not decay as volume grows.
- Cost reported where it is generated. Monthly reporting on S3 storage by class, table maintenance charges, Athena bytes scanned and Redshift compute, with recommendations wherever spend grows faster than usage.
- Grants reviewed and pruned. Lake Formation grants and IAM role usage reviewed on an agreed cycle, with access that is no longer needed removed rather than left dormant.
- Schema and service changes tested first. Source schema changes and AWS service updates assessed in a non-production account before they touch production data.
- A visible improvement backlog. A prioritised list worked through in agreed increments alongside day-to-day support, so improvement is funded rather than deferred indefinitely.
Reference architecture
An AWS lakehouse, layer by layer.
How the pieces fit together on AWS. Every engagement adapts this, and we will tell you which layers you already have.
- 01
Sources
Operational systems, event streams and the extracts nobody has admitted to.
- Aurora and RDS
- DynamoDB and SaaS APIs
- Kinesis or MSK streams
- 02
Land
Raw zone written once per source, nothing overwritten, replay always possible.
- Amazon S3 raw zone
- AWS Glue jobs
- AWS DMS change data capture
- 03
Curate
Iceberg tables, partitioning from real queries, compaction on a schedule.
- Iceberg tables on S3
- Glue Data Catalog
- Compaction and lifecycle rules
- 04
Serve
The engine chosen per access pattern, not one engine for everything.
- Amazon Athena
- Amazon Redshift
- Dashboards on curated datasets
Across every layer
- AWS Lake Formation as the single permission plane
- IAM roles mapped to identity groups, no long-lived user keys
- Bytes scanned, maintenance and warehouse hours reported per workload
- Infrastructure as code across separate accounts
Technology reference
The AWS services we build with.
A reference architecture view of the platform services used in this domain, and what each one does in the design.
Lake storage and cataloguing
Amazon S3The storage layer the whole platform rests on, organised into raw, curated and consumption zones, with managed Iceberg tables used where automatic maintenance is worth its charge.
AWS GlueBatch ingestion and transformation jobs, plus the data catalogue every query engine reads its table definitions from.
AWS Lake FormationCentral permission management for the catalogue, so table, column and row-level access is granted once and honoured by each engine that reads it.
Ingestion and streaming
AWS Database Migration ServiceInitial load and ongoing change data capture from operational and on-premises databases, which is what gets reporting off the transactional instance.
Amazon KinesisManaged ingestion for telemetry and application event streams where the team has no appetite for operating Kafka.
Amazon MSKManaged Kafka where the organisation already has Kafka skills, existing producers, or ordering and retention requirements that suit it.
Query and processing engines
Amazon AthenaServerless SQL over the lake for exploration, ad hoc analysis and the reporting that does not justify a warehouse, billed on data scanned.
Amazon RedshiftThe modelled warehouse layer for finance and operational reporting that needs predictable performance under concurrent use, with serverless used where load is spiky.
Amazon EMRManaged Spark for the heavy transformation and large-scale processing that is genuinely too big or too complex for a Glue job.
Amazon OpenSearch ServiceSearch and log analytics where people need to find individual records by text or investigate operational events rather than aggregate them.
Operational data sources
Amazon AuroraTransactional store behind line-of-business applications, read into the lake through change data capture or a zero-ETL integration rather than queried directly by reports.
Amazon RDSManaged relational source for existing SQL Server, PostgreSQL or MySQL workloads that feed the analytics estate.
Amazon DynamoDBHigh-throughput operational data source, exported into the lake for analysis instead of being scanned by reporting queries.
Consumption and business context
Amazon QuickThe dashboard and reporting layer for business users, built over curated datasets rather than direct queries against raw files. AWS renamed this product family, so older documentation and existing dashboards may not match the current naming.
Amazon DataZoneBusiness-facing catalogue and access workflow, giving each dataset an owner, a description and a recorded request path. AWS now surfaces the same capability as the catalogue inside Amazon SageMaker Unified Studio, and existing domains have an upgrade path.
Product names and icons are trademarks of Microsoft and Amazon Web Services, reproduced unmodified from their official architecture icon libraries to identify the technologies used in these architectures. Their presence does not indicate partnership, certification or endorsement by either vendor.
AWS questions
What people ask about doing this on AWS.
Cost, lock-in and the parts that go wrong, answered before you have to ask twice.
Do we need Amazon Redshift if we already have S3 and Athena?
Often not, and that is worth testing before buying capacity. Athena over well-partitioned Iceberg tables handles exploration and a great deal of routine reporting, and it bills on data scanned so an idle platform costs almost nothing. Redshift earns its place where concurrency is high, queries are relational and repetitive, or third-party tools connect over SQL and expect warehouse behaviour. We decide it from your query history rather than in principle, and running both is a legitimate outcome as long as somebody owns the boundary.
Why does our Athena and Redshift spend keep climbing when usage is flat?
Almost always data layout. Athena charges for bytes scanned, so an unpartitioned table means every query reads everything, and thousands of small files add per-request overhead on top. On Redshift the usual causes are unsorted tables, full refreshes where incremental would do, and clusters left running overnight. Managed table maintenance is also a billed activity, so heavy write churn produces compaction charges separate from storage. We attribute the spend by workload before recommending a change, because tuning the wrong layer is how a fortnight disappears.
Are we locked in if we build the lakehouse on AWS?
The curated layer is the least locked-in thing you will build. Iceberg tables on object storage are an open format other engines can read, so your data stays portable in a way it genuinely was not a decade ago. What is not portable is the surrounding machinery: Glue jobs, catalogue definitions, Lake Formation grants, Redshift models and the dashboards on top would all be rebuilt if you moved. That is the same trade as the Microsoft side, so choose on where your applications, identity and skills already sit.
Can our platform team build this without a consultancy?
If you have an engineer who has run a lake before, quite possibly, and we would rather tell you that at assessment than sell a programme. AWS analytics is not difficult to start and it is unforgiving of early structural choices. The decisions worth outside review are zone and table layout, where the permission model lives, and which engines you commit to operating. Getting those wrong is not visible for six months, and then it is visible in the invoice and in every query's runtime.
Is a zero-ETL integration from Aurora enough to skip building pipelines?
It removes one job and leaves the harder one. Zero-ETL replicates source tables into the warehouse without you running an extraction pipeline, which is genuinely useful for getting reporting load off a production database. What it does not do is transform, conform or model: you receive the source schema, in the source shape, with conditions such as same-region placement and the possibility of a resync after certain source events. It is a better landing mechanism, not a substitute for a curated layer.
What happened to Amazon QuickSight and Amazon DataZone?
Both were renamed or repackaged, which causes real confusion when your infrastructure code and your documentation disagree. The business intelligence product is now part of the Amazon Quick family, with existing APIs and dashboards continuing to work. DataZone's catalogue and access capability is now also surfaced inside Amazon SageMaker Unified Studio, with an upgrade path for existing domains. Nothing you built has stopped working, but we map current naming to what you actually run before anyone writes a plan against a stale article.
How long until the business sees a report it trusts?
The first production increment is usually weeks rather than quarters, and it is one business domain: one set of numbers, one audience, one legacy extract switched off. On AWS the specific thing that extends it is source access, because change data capture on a production database needs a change window, a database administrator and often a security review. We put that dependency in the plan at the start rather than reporting it as a delay later.
Related industries
Where this work has the most leverage.
Logistics and Warehousing
Shipment and document automation, proof-of-delivery processing and exception dashboards that let a small team run a large network.
Manufacturing and Distribution
Demand and inventory intelligence, production analytics and supplier automation built on data your planners already trust.
Healthcare and Community Services
Administrative automation, policy search, workforce analytics and privacy uplift for healthcare and community providers, with clinical decisions left entirely to clinicians.
Free discovery workshop
Start with a data and analytics discovery workshop.
Bring one challenge. We will assess whether AWS is the right platform for it before recommending anything.