---
cuppy_hub: aws
cuppy_path: examples/healthcare-master-data/07-cost-model.md
cuppy_section: docs
cuppy_doc: 89JV-WRE9
cuppy_doc_uuid: a64adbaa-1df4-4a04-a64a-34576e4064b3
cuppy_permalink: https://cuppy.io/aws/d/89JV-WRE9
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/aws/docs/examples/healthcare-master-data/07-cost-model
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: 4e35619eb8e796a48f956ab052b806df4cfe56c56e0bebad12f7667e54720027
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# Cost model and where the savings come from

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

1. **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.
2. **Make the ML pass deliberate.** Quarterly, or triggered when a quality signal suggests
   demographic duplicates are accumulating. Never on a nightly schedule by default.
3. **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.
4. **Think before creating a HealthLake data store.** Each one is a standing $197 per month.
5. **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.
6. **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.
7. **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.


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 131 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/aws/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
