Cost model and where the savings come from
How each component bills, a worked monthly estimate at a stated scale with every assumption visible, the dimensions that dominate, and an honest account of the saving against a licence.
markdownexamplev189JV-WRE9stage: designtrust: mixedservice: entity-resolutionservice: healthlakeservice: glueservice: auroraservice: s3service: macieservice: kmsservice: lambdainterface: architectureAWS Entity Resolution per record pricingHealthLake data store hour and storageGlue DPU-hour billingAurora Standard versus IO-OptimizedMacie per GB inspected dominatesworked monthly estimate with assumptionscost levers and what to tune firstsavings versus a licensed MDM
Every price below was read from the AWS pricing page named in provenance on 2026-10-21, for US
East (N. Virginia) where the page distinguished Regions. Prices change; treat the arithmetic as the
durable part and re-read the pages before quoting a figure.
Two figures carry a weaker provenance than the rest and are flagged where they appear: the S3 Standard and Glacier Deep Archive storage rates. They were returned verbatim by the fetch recorded for this document, but an independent reviewer fetching the same page could not reproduce the storage tables, which render dynamically; the request prices reproduced for both of us. Re-check those two in the console before quoting them.
How each piece bills
| Component | Dimension | List price read 2026-10-21 |
|---|---|---|
| AWS Entity Resolution | Per record processed | $0.25 per 1,000 records |
| Entity Resolution, provider | Per record processed | $0.10 per 1,000, licence required |
| AWS HealthLake | Per data store hour | $0.27 per data store hour |
| HealthLake storage | Per GB-month beyond 10 GB | $0.25 Standard, $0.37 Advanced |
| HealthLake FHIR queries | Beyond 3,500 per hour | $0.015 / $0.048 per 10,000 |
| HealthLake FHIR Subscriptions | Per event, Advanced tier | $2.00 per M EventBridge, $0.90 per M REST-Hook |
| HealthLake export | Per GB exported | $0.19 per GB |
| HealthLake medical NLP | Per 100 characters | $0.0010 per 100 characters |
| AWS Glue ETL and crawlers | Per DPU-hour | $0.44 per DPU-hour |
| Glue Data Quality | Per DPU-hour, 2 DPU minimum | $0.44 per DPU-hour |
| Glue Data Catalog | Objects and requests | First million of each free |
| Amazon S3 Standard | Per GB-month, first 50 TB | $0.023 per GB (re-check) |
| S3 requests | Per 1,000 | $0.005 PUT, $0.0004 GET |
| Aurora Serverless v2 | Per ACU-hour | $0.12 Standard, $0.156 I/O-Optimized |
| Aurora storage | Per GB-month | $0.10 Standard, $0.225 I/O-Optimized |
| Aurora I/O | Per million I/Os | $0.20 Standard, $0 I/O-Optimized |
| AWS Lambda | Requests and GB-seconds | $0.20 per million, $0.0000166667 per GB-s |
| Step Functions Standard | Per state transition | $0.000025, first 4,000 free monthly |
| AWS KMS | Per key, per request | $1 per key per month; 20,000 requests free |
| Amazon Macie | Buckets, objects, GB inspected | $0.10 per bucket, $0.01 per 100K objects, $1 per GB |
| Amazon Athena | Per TB scanned | $5 per TB |
Three notes on the prices above, because precision matters more than completeness.
Entity Resolution charges for every record, not every match. The pricing page states all records are charged even those without matches, and that "The AWS Free Tier is not available for AWS Entity Resolution". A record is "a row of data that can have multiple columns", so widening a table costs nothing extra. With rule-based automatic incremental processing "you will only be charged for incremental matches", which is the single most important cost lever in this design.
The HealthLake data store hour is a fixed floor. At $0.27 per hour, a store runs about $197 per month before a byte of storage or a single query. That is a standing charge per data store, so resist creating one per environment unless each is genuinely needed.
Glue's minimum billing duration is documented for some workloads and not others. The page states a "1 minute minimum billing duration" for Data Quality tasks and for table optimisation, and describes ETL jobs as billed by the second. Whether Spark ETL jobs carry their own minimum was not confirmed on the page read; assume a short-job floor when budgeting many small jobs.
A worked monthly estimate
Scale as stated in document 01: 12,440,000 source records across four entity types resolving from six source systems, 2,000,000 changed records per month, 200,000 synchronous lookups, 2 TB of clinical data in FHIR, 3 TB in the raw zone. The master runs as an Aurora writer with a reader in a second Availability Zone, because it sits on a synchronous clinical path — a single instance is not an acceptable posture, and the reader is the cheapest line in the table that removes a single point of failure.
| Line | Arithmetic | Monthly |
|---|---|---|
| Entity Resolution, rule-based incremental | 2,000 × $0.25 | $500 |
| Entity Resolution, quarterly ML pass | 12,440 × $0.25 ÷ 3 | $1,037 |
GenerateMatchId, synchronous lookups | 200 × $0.25 | $50 |
| Glue ETL | 10 DPU × 0.5 h × 30 × $0.44 | $66 |
| Glue Data Quality | 6 sources × 2 DPU × 0.1 h × 30 × $0.44 | $16 |
| Glue crawlers | 2 DPU × 0.25 h × 30 × $0.44 | $7 |
| S3 storage | 3,772 GB × $0.023 | $87 |
| S3 requests | 5M PUT, 50M GET | $45 |
| HealthLake data store | 730 h × $0.27 | $197 |
| HealthLake storage, Standard | 2,038 GB × $0.25 | $510 |
| HealthLake queries | 2.45M beyond the included 2.56M | $4 |
| HealthLake monthly full export | 2,048 GB × $0.19 | $389 |
| Aurora Serverless v2 writer, Standard | 4 ACU × 730 h × $0.12 | $350 |
| Aurora reader, second AZ | 2 ACU × 730 h × $0.12 | $175 |
| Aurora storage and I/O | 200 GB × $0.10 + 500M I/O × $0.20/M | $120 |
| Lambda | 20M invocations, 512 MB, 200 ms, free tier applied | $30 |
| Step Functions Standard | 50,000 transitions | $1 |
| KMS | 6 keys + 10M requests | $36 |
| Macie | 20 buckets, 50M objects, 100 GB inspected | $107 |
| Athena | 2 TB scanned × $5 | $10 |
| Total | about $3,735 |
One-time initial load: 12,440 × $0.25 = $3,110 for the first full match across all entities.
What this estimate excludes
It is a floor, not a forecast. Not priced here because those pages were not read: CloudTrail, AWS Config, Security Hub CSPM, EventBridge, SNS, SQS, Kinesis Data Streams or MSK, OpenSearch Service, AWS Backup, data transfer, and the compute and hosting for the steward console. OpenSearch is the largest of those omissions and not only on cost: it is a second full copy of patient demographics, in scope for the BAA, carrying its own encryption, access-control, snapshot and deletion-propagation obligations. Nor does it include the engineering cost of building the custom components in document 08, which for a first release is the largest number on the page and is not an AWS charge at all.
The assumptions that move the total most
| Assumption | Effect if wrong |
|---|---|
| Quarterly rather than monthly ML pass | A monthly full ML pass adds about $2,070 |
| ML runs are full reprocesses | A documented incremental ML path would cut this line sharply |
| Macie inspects 100 GB per month | At $1 per GB, inspecting 1 TB adds about $900 |
| No HealthLake medical NLP | At $0.0010 per 100 characters, 100M characters is $1,000 |
| Monthly rather than weekly export | Weekly export at 2 TB adds roughly $1,170 |
| HealthLake Standard rather than Advanced | Advanced storage at $0.37 adds about $245 |
| No managed FHIR Subscriptions | Advanced tier, +$245 storage, plus per-event charges; 100,000 free |
| Aurora at 4 average ACUs | Each additional average ACU adds about $88 |
The ML reprocessing line carries a stated caveat rather than a documented limit. The pages read confirm that automatic incremental processing is rule-based only; the Entity Resolution glossary separately defines a confidence level "for ML incremental matching", so an incremental ML path appears to exist but its invocation was not characterised. Full reprocessing is modelled here as the conservative case.
Aurora Standard against I/O-Optimized
Worth having at hand, because the right configuration depends on a number most designs have not yet measured.
| Configuration | ACU-hours | Storage | I/O | Monthly at the stated scale |
|---|---|---|---|---|
| Aurora Standard | $0.12 | $0.10 per GB | $0.20 per million | $470 |
| Aurora I/O-Optimized | $0.156 | $0.225 per GB | $0 | $501 |
At 500 million I/Os per month, Standard wins. Match-and-merge is I/O-heavy and that number climbs with reprocessing frequency, so the crossover is near: above roughly 650 million I/Os per month at this ACU and storage profile, I/O-Optimized becomes the cheaper option, and it also removes I/O volatility from the bill. Note the reader moves with the choice — a 2-ACU reader is $175 per month on Standard and $228 on I/O-Optimized. The right answer is to measure I/O for a month and then choose, and to say so rather than guessing.
The cost levers, in order
- Keep rule-based incremental processing as the default path. Charging only for incremental
matches rather than the full corpus is roughly a sixfold difference on the matching line at this scale.
- Make the ML pass deliberate. Quarterly, or triggered when a quality signal suggests
demographic duplicates are accumulating. Never on a nightly schedule by default.
- Scope Macie. The $1 per GB inspected dimension dominates if pointed at everything. Target the
landing prefixes and any extract bucket, sample rather than scan exhaustively.
- Think before creating a HealthLake data store. Each one is a standing $197 per month.
- Tier the raw zone. S3 Glacier Deep Archive at $0.00099 per GB-month is about 4 percent of
Standard's $0.023. Raw objects older than a quarter are rebuild material, not working data.
- Partition for Athena. At $5 per TB scanned, partitioning and columnar formats are the whole
game. Note that the per-query minimum and rounding behaviour were not confirmed on the page read.
- Use NLP surgically. $0.0010 per 100 characters is $10 per million characters. Run it on the
fields that improve match coverage, not on every note.
Where the savings against a licence actually come from
An honest comparison needs a caveat first: no licence price is quoted in this document set, because no vendor list price was read. Commercial MDM pricing is typically negotiated and confidential. Any figure put against this estimate must come from your own quote; a remembered number presented as fact is not evidence.
What can be said about the structure of the difference, which is the more interesting answer:
No licence floor. The AWS components bill on records processed, DPU-hours, ACU-hours and GB. A proof of concept resolving 50,000 records costs about $12.50 in matching. A commercial licence is normally a minimum commitment made before any value is demonstrated. Glue Data Quality's own documentation makes the point: "There are no annual licenses you need to use AWS Glue Data Quality."
Cost follows the work, not the entitlement. Matching cost here is driven by changed records when rule-based incremental processing is used — $500 per month against $3,110 for a full pass. A licence sized to total master records charges for the whole corpus whether it changed or not.
No separate infrastructure bill. Licensed MDM usually needs its own compute, database and support estate beside the licence. Here the serverless components are the infrastructure.
One compliance envelope. One BAA, one audit boundary, one set of eligible services, rather than a vendor's compliance posture assessed and maintained alongside AWS's. That saving is real but shows up in audit effort rather than on an invoice.
And the honest offset. The saving is a licence and an infrastructure estate; the cost is the custom build in document 08 plus its indefinite maintenance. At the stated scale, roughly $3,735 per month of AWS charges is a small number next to the engineering investment the steward console, survivorship engine and crosswalk represent. The defensible claim is not "this is cheaper". It is: the run cost is usage-based and predictable, and the trade is that you fund and own the governance layer. Whether that run cost sits below a given licence plus estate is a comparison to make against your own quote, not a claim this document can make. If the organisation cannot fund a platform team indefinitely, the licence is the cheaper option, and document 00 says so.