# Cost coverage

> PROPOSAL — generated by StackToIT Assess. Architect review required before any decision.

Run `f6267c3f-2848-4aa5-89df-5fee8b15b3b9` · source digest `sha256:812c5ae3f6cc8530163abbf5b6fbe305ed3b363c4886ec6b87623db857ea0c70`

**Financial comparison: NOT AVAILABLE — source region unknown (30 AWS lines wait for source.aws.region); 9 of 14 STACKIT lines have no price; 10 billable source resources are outside the model; the subtotal of one side is not a comparison and no saving is stated**

Not included: traffic, usage, support, licences, operations and migration cost; a scenario of what owning the estate costs, on either side, is not provided by this build.

1. Stage 1, coverage and uncertainties: 5 of 44 lines priced (source 0 of 30, STACKIT 5 of 14); the lines that have no price say why in the table of causes and the three coverage indicators below.
2. Stage 2, run-rate of the comparable services: not available, because no billable source resource is priced on both sides.
3. Stage 3, cost scenarios beyond the list prices (data egress, parallel running, migration effort, operations): not provided by this build.

## Why lines are not priced

reasons: 30 region needed. Three different causes, three different next actions: a refresh of the price cache fixes only the one marked CACHE_MISSING.

| Diagnostic | Lines | Families (lines) | What it is | Next action |
|---|---|---|---|---|
| `AWS_REGION_NEEDED` | 30 | aws_ecs_service 10, aws_rds_cluster 4, aws_dynamodb_table 3, aws_lb 2, aws_mq_broker 2, aws_nat_gateway 2, aws_opensearch_domain 2, aws_rds_cluster_instance 2, aws_eip 1, aws_elasticache_replication_group 1, aws_internet_gateway 1 | The source names no AWS region for the provider configuration of these resources, so no price key can be built; StackToIT never picks a region. | AWS region not stated: give it in review/inputs (source.aws.region). A price cache holds the prices of a region: once the region is given, fill the cache for it with `stacktoit prices refresh --provider aws --region <region>` if the price sources above say it is missing. |

The diagnostic of each line is the `diagnostic` field of `financial/cost-model.json`. A line that is not priced for another reason keeps its state and has none.

These are list prices only: no quantity is read and no total is built from them here; the quantities, amounts and totals of the priced families are in financial/cost-model.json, and no usage and no egress is computed anywhere.

An initial infrastructure cost estimate under explicit assumptions (the scenario and the assumption file this model names), not a bill: list prices (net, no discount, no Spot, no savings plan, no private price) times quantities the source or the assumption file states. A total is FULL only when every line of its scope is priced; a line that cannot be priced says why and is never filled in, and an unknown quantity is neither 0 nor 1. A savings percentage is given only for the same scope, in one currency (or with an exchange rate that names its source and date), with every line of both sides priced. No usage, traffic, request, egress, support or one-off migration cost is computed.

Scenario: **STANDARD_730H**, 730 hours (the labelled standard month of 730 hours, the same on both sides). The lines are in `financial/cost-model.json` and in `financial/priced-resources.csv`.

## Price sources

| Side | Source | Status | sha256 | Note |
|---|---|---|---|---|
| SOURCE | `aws` | NOT_AVAILABLE |  | no line has a region the source states, so no offer file was asked for: give the AWS region in review/inputs (source.aws.region) |
| TARGET | `stackit` | USED | `94244fec5b573614dcff15f79238ce4a0e60cf197768be287e45092d7e1e61ca` | retrieved 2026-10-26T18:27:45Z; net list price; supplied by the price cache |

## Lines by pricing state

44 lines in all: 30 of the source, 14 of the target.

| State | Lines | Meaning |
|---|---|---|
| AMBIGUOUS | 1 | More than one price fits and none is picked. |
| PRICED | 5 | A price record and a known quantity give an amount. |
| PRICE_NOT_FOUND | 30 | The key names a price and the price list in force has none (or the region or purchasing option rules it out): never free. |
| QUANTITY_UNKNOWN | 1 | A price is known and the quantity is not: neither zero nor one. |
| TARGET_NOT_CHOSEN | 7 | The target design does not choose what the price needs. |

## Lines by class

Every line is one of four classes, so that a known figure is not read as an estimate or an assumption, and a line that is not computed is not read as zero. The class is the `class` column of `financial/priced-resources.csv`.

| Class | Lines | Meaning |
|---|---|---|
| KNOWN | 0 | list price × a quantity read from the source or the draft; nothing else assumed |
| ESTIMATE | 2 | a list price with an assumption the model states: the hours of the scenario (730 h in the standard month) on a per-hour rate |
| ASSUMPTION | 3 | a quantity or a class is assumed (an operating system, a tenancy, a performance class); the assumption is named on the line |
| OUT_OF_MODEL | 39 | not computed: not zero and not free; the line says what is missing |

## Coverage: how much of the estate the model can price

**Billable coverage: which source resources can carry a price.** Most source resources carry no charge of their own (a security group rule, an IAM role, a route), so the share of source resources that have a line is not the share of the estate that is priced. Of the 140 source resources, 27 are or may be billed.

| Source resources | Count | Meaning |
|---|---|---|
| With a price rule | 17 | Of a type this build prices: the model has a line for them (a line can still lack a price or a quantity: see the next tables). |
| No charge of its own | 113 | Of a type AWS bills nothing for (a security group rule, an IAM role, a route, a subnet): there is nothing to price, and they are not out of the model. |
| Out of the model | 10 | May be billed, and this build has no price rule for the type, or does not classify it: its cost is not computed, never zero and never free. |

Out of the model, by type: aws_secretsmanager_secret (4), aws_cloudwatch_log_group (2), aws_cloudwatch_event_rule (1), aws_cloudwatch_event_target (1), aws_kms_key (1), aws_service_discovery_private_dns_namespace (1).

**Price coverage: which lines have a price.** Of the 44 lines of the model, both sides.

| Lines | Count | Meaning |
|---|---|---|
| Price found | 5 | The line carries a price record (a rate from a price list), whether or not its quantity is known. |
| No price | 39 | No rate: the reason is each of the rows below. |
| PRICE_NOT_FOUND | 30 | The key names a price and the price list in force has none (or the region is not stated): never free. |
| TARGET_NOT_CHOSEN | 7 | The target design does not choose what the price needs. |
| AMBIGUOUS | 1 | More than one price fits and none is picked. |
| QUANTITY_UNKNOWN | 1 |  |

Lines with a price found, by side: source 0 of 30, target 5 of 14. Of the lines without a price, by diagnostic: AWS_REGION_NEEDED (30) (a refresh of the price cache fixes only CACHE_MISSING).

**Usage coverage: which priced lines have a quantity.** Of the 5 lines that have a price.

| Priced lines | Count | Meaning |
|---|---|---|
| Quantity known | 5 | The line has an amount; 0 of them rest on a quantity the assumption file states. |
| Quantity unknown | 0 | QUANTITY_UNKNOWN: the price is known, the quantity (a usage, a traffic, a size the source does not state) is not; neither zero nor one. |

A subtotal is the sum of the list prices of the lines that are priced, for the resources this build prices. It is not the cost of running the estate: usage, traffic, support, licences, operation and the effort of the migration are not in it. A difference between the source and the target subtotal is the difference of those list prices over the same resources, in one currency; it is not the saving, or the cost, of the migration.

## Estimated monthly cost for the resources that could be compared (730 h, list prices)

A saving or an increase is stated only over the source resources that both sides price in full (0 resources); the others are under Cost groups below with why they are not computed.

No line is summed: the computed subtotal is empty. A line of the class OUT_OF_MODEL is not computed, is in no sum and is never filled in as zero.

### Computed subtotal

No source unit is priced on both sides: there is no computed subtotal.

Source against target over the computed units: NOT_COMPARED; saving of the target not given (no source unit is priced on both sides, so there is no computed subtotal to compare).

Outside this comparison: STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR; STACKIT, priced lines of units that are not compared: 4 lines, 805.64 EUR. The target-only lines are in the STACKIT total, and no saving includes them.

A difference between the source and the target subtotal is the difference of those list prices over the same resources, in one currency; it is not the saving, or the cost, of the migration.

### Technical mapping

10 pairs of the computed units and of the units that are only partly priced (their basis says how many components are priced) are in `financial/mapping.csv` with the vCPU, memory, CPU model, disk, IOPS, throughput and high availability each side states. A machine type is one of the types of the catalogue with at least the vCPUs and memory of the source (a burstable source may be offered shared types); a storage class is the one the draft names (the customer's answer or the variable's default), shown with the catalogue's own IOPS and throughput. This table states sizes; it is not a statement about the performance of the target against the source (no benchmark was run, and a CPU model that a side does not state is shown as not stated).

## Totals

The state of an estate row is the estate's: PARTIAL while any line of any source resource the model knows is not priced, a resource outside the modelled part included. Its amount is the modelled infrastructure subtotal (10 of 140 source resources): the sum of the lines that are priced; N is the number of source resources with a priced line and M all the source resources the model knows (a source resource is a Terraform resource; one migration unit can stand for several). A resource with no priced line is not in it, and the lines of a counted resource that are not priced are counted beside the amount and never filled in; so it is not the cost of the estate.

| Scope | Side | State | Amount | Priced lines | Not priced |
|---|---|---|---|---|---|
| estate (140 source resources), priced part: modelled infrastructure subtotal (10 of 140 source resources) | SOURCE | NONE | none | 0 | 30 |
| estate (140 source resources), priced part: modelled infrastructure subtotal (10 of 140 source resources) | TARGET | PARTIAL | 878.34 EUR | 5 | 9 |
| service cache | SOURCE | NONE | none | 0 | 1 |
| service cache | TARGET | FULL | 72.97 EUR | 1 | 0 |
| service containers | SOURCE | NONE | none | 0 | 10 |
| service containers | TARGET | PARTIAL | 72.70 EUR | 1 | 1 |
| service database | SOURCE | NONE | none | 0 | 9 |
| service database | TARGET | PARTIAL | 91.97 EUR | 1 | 4 |
| service messaging | SOURCE | NONE | none | 0 | 2 |
| service messaging | TARGET | FULL | 621.52 EUR | 1 | 0 |
| service messaging_observability | TARGET | NONE | none | 0 | 1 |
| service network | SOURCE | NONE | none | 0 | 6 |
| service network | TARGET | FULL | 19.18 EUR | 1 | 0 |
| service platform | TARGET | NONE | none | 0 | 2 |
| service search | SOURCE | NONE | none | 0 | 2 |
| service search | TARGET | NONE | none | 0 | 1 |

FULL: every line of the scope is priced. PARTIAL: the priced lines are summed; the others are counted and never filled in. NONE: no line of the scope has an amount.

## Comparison of source and target

| Scope | Comparability | Saving or increase | Why |
|---|---|---|---|
| estate (140 source resources), priced part: modelled infrastructure subtotal (10 of 140 source resources) | TARGET_ONLY | not given | TARGET_ONLY: the source has no priced component. Outside this comparison: STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR. The target-only lines are in the STACKIT total, and no saving includes them. |
| service cache | TARGET_ONLY | not given | TARGET_ONLY: the source has no priced component |
| service containers | SCOPE_UNEQUAL | not given | SCOPE_UNEQUAL: the sides cover different source units (source [unit:module.retail_app_ecs.module.carts_service.aws_ecs_service.this unit:module.retail_app_ecs.module.catalog_service.aws_ecs_service.this unit:module.retail_app_ecs.module.checkout_service.aws_ecs_service.this unit:module.retail_app_ecs.module.orders_service.aws_ecs_service.this unit:module.retail_app_ecs.module.ui_service.aws_ecs_service.this], target [unit:module.retail_app_ecs.aws_ecs_cluster.cluster unit:module.retail_app_ecs.module.carts_service.aws_ecs_service.this unit:module.retail_app_ecs.module.catalog_service.aws_ecs_service.this unit:module.retail_app_ecs.module.checkout_service.aws_ecs_service.this unit:module.retail_app_ecs.module.orders_service.aws_ecs_service.this unit:module.retail_app_ecs.module.ui_service.aws_ecs_service.this]). Outside this comparison: STACKIT, target only, no source line stands against them: 1 line, 72.70 EUR. The target-only lines are in the STACKIT total, and no saving includes them. |
| service database | TARGET_ONLY | not given | TARGET_ONLY: the source has no priced component |
| service messaging | TARGET_ONLY | not given | TARGET_ONLY: the source has no priced component |
| service messaging_observability | TARGET_ONLY | not given | TARGET_ONLY: there is no source total |
| service network | TARGET_ONLY | not given | TARGET_ONLY: the source has no priced component |
| service platform | TARGET_ONLY | not given | TARGET_ONLY: there is no source total |
| service search | COMPARABLE | not given | NONE: neither side has a priced component |

A difference between the source and the target subtotal is the difference of those list prices over the same resources, in one currency; it is not the saving, or the cost, of the migration.

## Cost groups

Every source unit is in one of three groups. Computed: every line of it, on both sides, has an amount; only these lines make the computed subtotals, so the source and the target subtotal cover the same units and may be compared. Quantity unknown: the price of each open line is known and its quantity is not; the quantity that is needed is named. Not computed: a unit of a type out of the model (no quantity driver; the coverage table counts those apart, by type), a unit the partial draft refuses for a missing input (the coverage table counts those apart as refused), a unit with no line on one side, or a line without a price record; listed by resource with the reason, never zero and never free. It holds every unit counted as out of the model or as refused and the units priced on one side only, so its count is the larger.


### Price known, quantity unknown (0)

None.

### Not computed (20)

| Source units | Why it is not computed (not zero) |
|---|---|
| `module.dependencies.aws_mq_broker.mq` | SOURCE: 0 components priced, 2 not priced: mq storage (module.dependencies.aws_mq_broker.mq.storage) PRICE_NOT_FOUND; mq broker hours (module.dependencies.aws_mq_broker.mq) PRICE_NOT_FOUND. TARGET: 1 component priced, 0 not priced; the priced component alone sums to 621.52 EUR. These sums cover the priced components only: a partial figure, not the cost of this resource, and in no computed subtotal, comparison or saving.; source:module.dependencies.aws_mq_broker.mq.storage:mq_storage: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the storage a broker uses per month is what its messages need, a measurement of use; the source does not state it; source:module.dependencies.aws_mq_broker.mq:mq_broker_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.dependencies.module.catalog_opensearch.aws_opensearch_domain.this` | source:module.dependencies.module.catalog_opensearch.aws_opensearch_domain.this.storage:search_storage: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.dependencies.module.catalog_opensearch.aws_opensearch_domain.this:search_instance_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); target:stackit_opensearch_instance.dependencies_catalog_opensearch_this:service_plan_hours: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the opensearch plan (plan_name is var.dependencies_catalog_opensearch_this_plan_name): no SKU is named; to name the SKU of this line, state the value of plan_name in the assumption file (--assumptions FILE): variable target_choice, subject stackit_opensearch_instance.dependencies_catalog_opensearch_this (or the source unit it stands for), value a plan of the catalogue such as "stackit-rabbitmq-2.4.10-single" (an Observability plan is named like its SKU, "Observability-Monitoring-Medium-EU01") |
| `module.dependencies.module.catalog_rds.aws_rds_cluster.this` | source:module.dependencies.module.catalog_rds.aws_rds_cluster.this.io:aurora_io_requests: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the I/O requests an Aurora Standard cluster makes are a measurement of use the source does not state; source:module.dependencies.module.catalog_rds.aws_rds_cluster.this.storage:db_storage: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the storage an Aurora cluster consumes grows with its data and is billed by the GB-month of use: a measurement of use the source does not state; target:stackit_mariadb_instance.dependencies_catalog_rds_this:service_plan_hours: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the mariadb plan (plan_name is var.dependencies_catalog_rds_this_plan_name): no SKU is named; to name the SKU of this line, state the value of plan_name in the assumption file (--assumptions FILE): variable target_choice, subject stackit_mariadb_instance.dependencies_catalog_rds_this (or the source unit it stands for), value a plan of the catalogue such as "stackit-rabbitmq-2.4.10-single" (an Observability plan is named like its SKU, "Observability-Monitoring-Medium-EU01") |
| `module.dependencies.module.catalog_rds.aws_rds_cluster_instance.this` | no TARGET line: the draft has no priced component for it; source:module.dependencies.module.catalog_rds.aws_rds_cluster_instance.this:db_instance_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.dependencies.module.checkout_elasticache_redis.aws_elasticache_replication_group.default` | SOURCE: 0 components priced, 1 not priced: cache node hours (module.dependencies.module.checkout_elasticache_redis.aws_elasticache_replication_group.default) PRICE_NOT_FOUND. TARGET: 1 component priced, 0 not priced; the priced component alone sums to 72.97 EUR. These sums cover the priced components only: a partial figure, not the cost of this resource, and in no computed subtotal, comparison or saving.; source:module.dependencies.module.checkout_elasticache_redis.aws_elasticache_replication_group.default:cache_node_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this` | source:module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this.read_requests:dynamodb_requests: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the read request units an on-demand table serves per month are a measurement of use; the source does not state them; source:module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this.storage:dynamodb_storage: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the data a table holds per month is a measurement of use; the source does not state it; source:module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this.write_requests:dynamodb_requests: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the write request units an on-demand table serves per month are a measurement of use; the source does not state them; target:stackit_mongodbflex_instance.dynamodb_tables:db_instance_hours: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the MongoDB Flex flavor (flavor.cpu, flavor.ram and options.type is flavor.cpu = var.dynamodb_tables_cpu, flavor.ram = var.dynamodb_tables_ram): no SKU is named; to name the SKU of this line, state the value of flavor in the assumption file (--assumptions FILE): variable target_choice, subject stackit_mongodbflex_instance.dynamodb_tables (or the source unit it stands for), value "<cpu>.<ram>-<Single\|Replica\|Sharded>" such as "2.4-Single" |
| `module.dependencies.module.orders_rds.aws_rds_cluster.this` | SOURCE: 0 components priced, 2 not priced: aurora io requests (module.dependencies.module.orders_rds.aws_rds_cluster.this.io) PRICE_NOT_FOUND; storage capacity (billed per GB) (module.dependencies.module.orders_rds.aws_rds_cluster.this.storage) PRICE_NOT_FOUND. TARGET: 1 component priced, 2 not priced: storage capacity (billed per GB) (stackit_postgresflex_instance.dependencies_orders_rds_this) TARGET_NOT_CHOSEN; storage class fee (billed per disk) (stackit_postgresflex_instance.dependencies_orders_rds_this) TARGET_NOT_CHOSEN; the priced component alone sums to 91.97 EUR. These sums cover the priced components only: a partial figure, not the cost of this resource, and in no computed subtotal, comparison or saving.; source:module.dependencies.module.orders_rds.aws_rds_cluster.this.io:aurora_io_requests: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the I/O requests an Aurora Standard cluster makes are a measurement of use the source does not state; source:module.dependencies.module.orders_rds.aws_rds_cluster.this.storage:db_storage: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the storage an Aurora cluster consumes grows with its data and is billed by the GB-month of use: a measurement of use the source does not state; target:stackit_postgresflex_instance.dependencies_orders_rds_this:db_storage: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the PostgreSQL Flex storage class (storage.class is var.postgresflex_storage_class): no SKU is named; to name the SKU of this line, state the value of storage.class in the assumption file (--assumptions FILE): variable target_choice, subject stackit_postgresflex_instance.dependencies_orders_rds_this.storage_class, value a storage class such as "premium-perf6-stackit", or answer the request target.postgres.storage of the run (review/inputs.yaml), which also changes the draft; target:stackit_postgresflex_instance.dependencies_orders_rds_this:db_storage_perf_class: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the PostgreSQL Flex storage class (storage.class is var.postgresflex_storage_class): no SKU is named; to name the SKU of this line, state the value of storage.class in the assumption file (--assumptions FILE): variable target_choice, subject stackit_postgresflex_instance.dependencies_orders_rds_this.storage_class, value a storage class such as "premium-perf6-stackit", or answer the request target.postgres.storage of the run (review/inputs.yaml), which also changes the draft |
| `module.dependencies.module.orders_rds.aws_rds_cluster_instance.this` | no TARGET line: the draft has no priced component for it; source:module.dependencies.module.orders_rds.aws_rds_cluster_instance.this:db_instance_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.retail_app_ecs.aws_cloudwatch_event_rule.ecs_events` | no quantity driver for aws_cloudwatch_event_rule in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; no TARGET line: the draft has no priced component for it |
| `module.retail_app_ecs.aws_cloudwatch_event_target.ecs_events_target` | no quantity driver for aws_cloudwatch_event_target in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; no TARGET line: the draft has no priced component for it |
| `module.retail_app_ecs.aws_cloudwatch_log_group.ecs_container_insights` | no quantity driver for aws_cloudwatch_log_group in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; no TARGET line: the draft has no priced component for it |
| `module.retail_app_ecs.aws_cloudwatch_log_group.ecs_tasks` | no quantity driver for aws_cloudwatch_log_group in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; target:stackit_logs_instance.logs_retention_180d:list_price: QUANTITY_UNKNOWN: the list price of ST-0171601 is known (1.2 EUR per Gigabyte Ingestion); the quantity is the gigabytes of log data it takes in (the retention of each gigabyte is a SKU of its own), a measurement of use the draft does not state, so it is not multiplied; to price it, state the gigabytes of log data one instance takes in during the scenario's period in the assumption file (--assumptions FILE): variable log_ingestion, unit GB, subject stackit_logs_instance.logs_retention_180d (or the source unit it stands for; another data unit converts); without it the line stays unpriced |
| `module.retail_app_ecs.aws_ecs_cluster.cluster, module.retail_app_ecs.module.carts_service.aws_ecs_service.this, module.retail_app_ecs.module.catalog_service.aws_ecs_service.this, module.retail_app_ecs.module.checkout_service.aws_ecs_service.this, module.retail_app_ecs.module.orders_service.aws_ecs_service.this, module.retail_app_ecs.module.ui_service.aws_ecs_service.this` | SOURCE: 0 components priced, 10 not priced: fargate memory hours (module.retail_app_ecs.module.carts_service.aws_ecs_service.this.memory) PRICE_NOT_FOUND; fargate vcpu hours (module.retail_app_ecs.module.carts_service.aws_ecs_service.this.vcpu) PRICE_NOT_FOUND; fargate memory hours (module.retail_app_ecs.module.catalog_service.aws_ecs_service.this.memory) PRICE_NOT_FOUND; fargate vcpu hours (module.retail_app_ecs.module.catalog_service.aws_ecs_service.this.vcpu) PRICE_NOT_FOUND; fargate memory hours (module.retail_app_ecs.module.checkout_service.aws_ecs_service.this.memory) PRICE_NOT_FOUND; fargate vcpu hours (module.retail_app_ecs.module.checkout_service.aws_ecs_service.this.vcpu) PRICE_NOT_FOUND; fargate memory hours (module.retail_app_ecs.module.orders_service.aws_ecs_service.this.memory) PRICE_NOT_FOUND; fargate vcpu hours (module.retail_app_ecs.module.orders_service.aws_ecs_service.this.vcpu) PRICE_NOT_FOUND; fargate memory hours (module.retail_app_ecs.module.ui_service.aws_ecs_service.this.memory) PRICE_NOT_FOUND; fargate vcpu hours (module.retail_app_ecs.module.ui_service.aws_ecs_service.this.vcpu) PRICE_NOT_FOUND. TARGET: 1 component priced, 1 not priced: node pool hours (stackit_ske_cluster.retail_app_ecs_cluster.node_pool.workloads) TARGET_NOT_CHOSEN; the priced component alone sums to 72.70 EUR. These sums cover the priced components only: a partial figure, not the cost of this resource, and in no computed subtotal, comparison or saving.; NO_CHARGE: aws_ecs_cluster has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model; source:module.retail_app_ecs.module.carts_service.aws_ecs_service.this.memory:fargate_memory_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.carts_service.aws_ecs_service.this.vcpu:fargate_vcpu_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.catalog_service.aws_ecs_service.this.memory:fargate_memory_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.catalog_service.aws_ecs_service.this.vcpu:fargate_vcpu_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.checkout_service.aws_ecs_service.this.memory:fargate_memory_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.checkout_service.aws_ecs_service.this.vcpu:fargate_vcpu_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.orders_service.aws_ecs_service.this.memory:fargate_memory_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.orders_service.aws_ecs_service.this.vcpu:fargate_vcpu_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.ui_service.aws_ecs_service.this.memory:fargate_memory_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); source:module.retail_app_ecs.module.ui_service.aws_ecs_service.this.vcpu:fargate_vcpu_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); target:stackit_ske_cluster.retail_app_ecs_cluster.node_pool.workloads:node_pool_hours: TARGET_NOT_CHOSEN: NOT_ASSESSED: the draft does not choose the server flavor (node_pools.machine_type is var.retail_app_ecs_cluster_machine_type): no SKU is named; to name the SKU of this line, state the value of node_pools.machine_type in the assumption file (--assumptions FILE): variable target_choice, subject stackit_ske_cluster.retail_app_ecs_cluster.node_pool.workloads, value a server flavor such as "g2i.4"; target:stackit_ske_cluster.retail_app_ecs_cluster:cluster_hours: TARGET_ONLY: priced at 72.70 EUR and counted in the STACKIT total, but the source side holds no line of its family to stand against: outside the comparison, in no saving |
| `module.retail_app_ecs.aws_kms_key.cmk` | no quantity driver for aws_kms_key in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; target:stackit_kms_key.retail_app_ecs_cmk:list_price: TARGET_NOT_CHOSEN: the draft does not choose the key protection (protection is var.kms_protection): no SKU is named; the KMS API knows the protections "software" and "hsm": "software" has the list price ST-0124501 (0.00209102962 EUR per version/hour), "hsm" has no SKU in the public list; the number of key versions is not stated either, so no amount is built whichever is chosen |
| `module.retail_app_ecs.aws_secretsmanager_secret.catalog_db, module.retail_app_ecs.aws_secretsmanager_secret.catalog_opensearch, module.retail_app_ecs.aws_secretsmanager_secret.mq, module.retail_app_ecs.aws_secretsmanager_secret.orders_db` | no quantity driver for aws_secretsmanager_secret in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; target:stackit_secretsmanager_instance.migrated_secrets:list_price: AMBIGUOUS: 5 public SKUs match the Secrets Manager version hour (Secrets Manager-100-EU01, Secrets Manager-100k-EU01, Secrets Manager-10k-EU01, Secrets Manager-1M-EU01, Secrets Manager-1k-EU01): none is picked; the tier is read as the number of secret versions of the instance, which the draft does not state, and which the price list (1.0.44, page Security) and the documentation of the service (FAQ, 2026-11-02: "You pay per secret version") do not define: no tier is assumed |
| `module.retail_app_ecs.aws_service_discovery_private_dns_namespace.this` | no quantity driver for aws_service_discovery_private_dns_namespace in this build: its cost is not computed (it is not zero); no SOURCE line: the model does not compute the cost of the source; no TARGET line: the draft has no priced component for it |
| `module.retail_app_ecs.module.alb.aws_lb.this` | SOURCE: 0 components priced, 2 not priced: load balancer capacity (module.retail_app_ecs.module.alb.aws_lb.this.capacity) PRICE_NOT_FOUND; load balancer hours (module.retail_app_ecs.module.alb.aws_lb.this) PRICE_NOT_FOUND. TARGET: 1 component priced, 0 not priced; the priced component alone sums to 19.18 EUR. These sums cover the priced components only: a partial figure, not the cost of this resource, and in no computed subtotal, comparison or saving.; source:module.retail_app_ecs.module.alb.aws_lb.this.capacity:load_balancer_capacity: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the capacity units a load balancer uses are a measurement of its traffic (new connections, active connections, bytes, rule evaluations); the source does not state them; source:module.retail_app_ecs.module.alb.aws_lb.this:load_balancer_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.vpc.module.vpc.aws_eip.nat` | target public ip: TARGET_NOT_CHOSEN: the draft holds no stackit_public_ip for module.vpc.module.vpc.aws_eip.nat, so the target side states nothing of this family for it (a person decides) and its source line stands without a priced counterpart; no TARGET line: the draft has no priced component for it; source:module.vpc.module.vpc.aws_eip.nat:public_ipv4_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |
| `module.vpc.module.vpc.aws_internet_gateway.this` | target data transfer out: PRICE_NOT_FOUND: the public STACKIT price list holds no SKU for data transfer out to the internet in region eu01 (1134 SKUs read, the per-GB traffic SKUs of a CDN and of a container registry are other services'); a service the list does not price is not free, and no price is taken from anywhere else; no TARGET line: the draft has no priced component for it; source:module.vpc.module.vpc.aws_internet_gateway.this.egress:internet_egress: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the data an estate sends to the internet per month is a measurement of use; the source does not state it |
| `module.vpc.module.vpc.aws_nat_gateway.this` | target NAT gateway: PRICE_NOT_FOUND: the public STACKIT price list holds no SKU for a NAT gateway or outbound address translation (SNAT) in region eu01 (1134 SKUs read, the per-GB traffic SKUs of a CDN and of a container registry are other services'); a service the list does not price is not free, and no price is taken from anywhere else; no TARGET line: the draft has no priced component for it; source:module.vpc.module.vpc.aws_nat_gateway.this.data:nat_gateway_data: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it); quantity unknown: the data a NAT gateway processes per month is a measurement of use; the source does not state it; source:module.vpc.module.vpc.aws_nat_gateway.this:nat_gateway_hours: PRICE_NOT_FOUND: region unknown: the aws provider configuration "aws" sets no region the source states (the environment or a profile would decide it) |

### No charge of its own (112)

| Source units | Why there is nothing to price |
|---|---|
| `module.dependencies.aws_iam_policy.carts_dynamo` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.aws_security_group.catalog_opensearch_sg` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.aws_security_group.mq` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.aws_security_group_rule.allow_https_from_client` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.aws_security_group_rule.mq` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_opensearch.aws_opensearch_domain_policy.this` | NO_CHARGE: aws_opensearch_domain_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_rds.aws_db_parameter_group.this` | NO_CHARGE: aws_db_parameter_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_rds.aws_db_subnet_group.this` | NO_CHARGE: aws_db_subnet_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_rds.aws_rds_cluster_parameter_group.this` | NO_CHARGE: aws_rds_cluster_parameter_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_rds.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.catalog_rds.aws_security_group_rule.default_ingress` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.checkout_elasticache_redis.aws_elasticache_parameter_group.default` | NO_CHARGE: aws_elasticache_parameter_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.checkout_elasticache_redis.aws_elasticache_subnet_group.default` | NO_CHARGE: aws_elasticache_subnet_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.checkout_elasticache_redis.module.aws_security_group.aws_security_group.cbd` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.checkout_elasticache_redis.module.aws_security_group.aws_security_group_rule.keyed` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.orders_rds.aws_db_parameter_group.this` | NO_CHARGE: aws_db_parameter_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.orders_rds.aws_db_subnet_group.this` | NO_CHARGE: aws_db_subnet_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.orders_rds.aws_rds_cluster_parameter_group.this` | NO_CHARGE: aws_rds_cluster_parameter_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.orders_rds.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.module.orders_rds.aws_security_group_rule.default_ingress` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.random_password.mq_password` | NO_CHARGE: random_password has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.random_string.catalog_db_master` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.random_string.catalog_opensearch_master` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.dependencies.random_string.orders_db_master` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_cloudwatch_log_resource_policy.eventbridge_ecs` | NO_CHARGE: aws_cloudwatch_log_resource_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_iam_policy.catalog_policy` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_iam_policy.orders_policy` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_secretsmanager_secret_version.catalog_db` | NO_CHARGE: aws_secretsmanager_secret_version has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_secretsmanager_secret_version.catalog_opensearch` | NO_CHARGE: aws_secretsmanager_secret_version has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_secretsmanager_secret_version.mq` | NO_CHARGE: aws_secretsmanager_secret_version has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.aws_secretsmanager_secret_version.orders_db` | NO_CHARGE: aws_secretsmanager_secret_version has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb.aws_lb_listener.frontend_http_tcp` | NO_CHARGE: aws_lb_listener has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb.aws_lb_target_group.main` | NO_CHARGE: aws_lb_target_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb_sg.aws_security_group.this_name_prefix` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb_sg.aws_security_group_rule.egress_rules` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.alb_sg.aws_security_group_rule.ingress_rules` | NO_CHARGE: aws_security_group_rule has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_ecs_task_definition.this` | NO_CHARGE: aws_ecs_task_definition has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_policy.cloudwatch_agent` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_policy.cloudwatch_logs` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_policy.ecs_exec` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role.task_execution_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role.task_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role_policy_attachment.cloudwatch_agent` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role_policy_attachment.cloudwatch_logs` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role_policy_attachment.ecs_exec` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role_policy_attachment.task_execution_role_policy` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_iam_role_policy_attachment.task_role_additional` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.carts_service.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_ecs_task_definition.this` | NO_CHARGE: aws_ecs_task_definition has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_policy.cloudwatch_agent` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_policy.cloudwatch_logs` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_policy.ecs_exec` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role.task_execution_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role.task_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role_policy_attachment.cloudwatch_agent` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role_policy_attachment.cloudwatch_logs` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role_policy_attachment.ecs_exec` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role_policy_attachment.task_execution_role_additional` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_iam_role_policy_attachment.task_execution_role_policy` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.catalog_service.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_ecs_task_definition.this` | NO_CHARGE: aws_ecs_task_definition has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_policy.cloudwatch_agent` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_policy.cloudwatch_logs` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_policy.ecs_exec` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role.task_execution_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role.task_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role_policy_attachment.cloudwatch_agent` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role_policy_attachment.cloudwatch_logs` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role_policy_attachment.ecs_exec` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role_policy_attachment.task_execution_role_policy` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_iam_role_policy_attachment.task_role_additional` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.checkout_service.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_ecs_task_definition.this` | NO_CHARGE: aws_ecs_task_definition has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_policy.cloudwatch_agent` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_policy.cloudwatch_logs` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_policy.ecs_exec` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role.task_execution_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role.task_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role_policy_attachment.cloudwatch_agent` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role_policy_attachment.cloudwatch_logs` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role_policy_attachment.ecs_exec` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role_policy_attachment.task_execution_role_additional` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_iam_role_policy_attachment.task_execution_role_policy` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.orders_service.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_ecs_task_definition.this` | NO_CHARGE: aws_ecs_task_definition has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_policy.cloudwatch_agent` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_policy.cloudwatch_logs` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_policy.ecs_exec` | NO_CHARGE: aws_iam_policy has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role.task_execution_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role.task_role` | NO_CHARGE: aws_iam_role has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role_policy_attachment.cloudwatch_agent` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role_policy_attachment.cloudwatch_logs` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role_policy_attachment.ecs_exec` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_iam_role_policy_attachment.task_execution_role_policy` | NO_CHARGE: aws_iam_role_policy_attachment has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.module.ui_service.aws_security_group.this` | NO_CHARGE: aws_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.random_id.eventbridge_suffix` | NO_CHARGE: random_id has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.random_string.random_catalog_secret` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.random_string.random_mq_secret` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.retail_app_ecs.random_string.random_orders_secret` | NO_CHARGE: random_string has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_default_network_acl.this` | NO_CHARGE: aws_default_network_acl has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_default_route_table.default` | NO_CHARGE: aws_default_route_table has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_default_security_group.this` | NO_CHARGE: aws_default_security_group has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route.private_nat_gateway` | NO_CHARGE: aws_route has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route.public_internet_gateway` | NO_CHARGE: aws_route has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route_table.private` | NO_CHARGE: aws_route_table has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route_table.public` | NO_CHARGE: aws_route_table has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route_table_association.private` | NO_CHARGE: aws_route_table_association has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_route_table_association.public` | NO_CHARGE: aws_route_table_association has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_subnet.private` | NO_CHARGE: aws_subnet has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_subnet.public` | NO_CHARGE: aws_subnet has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |
| `module.vpc.module.vpc.aws_vpc.this` | NO_CHARGE: aws_vpc has no charge of its own (see the billable coverage): there is nothing to price, it is billed, if at all, through the resource it belongs to or configures, and it is not out of the model |

## Assumptions

No assumption file was given: nothing the source leaves open was chosen.

## The STACKIT list prices

| Item | Value |
|---|---|
| Source | https://pim.api.stackit.cloud/v2/skus?pageSize=100&language=en |
| Retrieved (UTC) | 2026-10-26T18:27:45Z |
| Snapshot sha256 | `94244fec5b573614dcff15f79238ce4a0e60cf197768be287e45092d7e1e61ca` |
| SKUs in the snapshot | 1134 |
| Currency | EUR |
| Price basis | net list price |
| Region looked at | eu01 |
| Price list PDF checked against | not recorded |
| Terms of reuse of the price data | reuse terms not found (U1) |

| State | Resources | Meaning |
|---|---|---|
| Priced | 6 | A tested rule joins the resource to one SKU of the public price list. |
| Unpriced | 0 | The draft names a key the rules know, and the public price list has no price for it. |
| Not assessed | 5 | No tested join exists for the kind of resource, the draft leaves the key to a person, the block is a comment, or more than one SKU matches. |
| With a row | 11 | The drafted resources of a kind the price rules list. |

42 drafted resources of a kind the price rules do not list have no row, and nothing is stated about their cost. 0 resources have a row and no unit of the estate leads to them.

## What these figures are, and are not

- Only EC2 instances (aws_instance), EBS volumes (aws_ebs_volume and the root and block devices of an instance), RDS for PostgreSQL instances (aws_db_instance: instance hours, allocated storage, provisioned iops, gp3 throughput), Amazon Aurora (aws_rds_cluster_instance: the instance hours; aws_rds_cluster: the consumed storage and the I/O requests with their price and no quantity) the network families (aws_nat_gateway, aws_lb, aws_eip and the public address an instance asks for, aws_route53_zone, aws_internet_gateway: see the line on the network families below) and the managed-service families (aws_ecs_service on Fargate, aws_mq_broker, aws_elasticache_replication_group and aws_elasticache_cluster, aws_opensearch_domain, aws_dynamodb_table: see the line on them below) have lines on the source side, and only STACKIT servers (each with its boot volume), volumes, PostgreSQL Flex instances (flavor, storage class, storage capacity), public IPs, load balancers, DNS zones, RabbitMQ, Valkey, OpenSearch and MariaDB instances (their plan), MongoDB Flex instances (their flavor), SKE clusters (the cluster hour and each node pool), KMS keys, Secrets Manager and Logs instances on the target side; the other drafted resources have a line that says they have no quantity rule, and every other source resource has no line and is listed in the out-of-model group.
- The network families have a line on each side, never a total over a partial set. NAT gateway: the hour of a zonal public NAT gateway is priced and the data it processes has the per-GB price and no quantity; the STACKIT price list holds no SKU for a NAT gateway or for outbound address translation, so its target line is PRICE_NOT_FOUND (a service the list does not price is not free). Load balancer: the hour of an Application or Network Load Balancer is priced and its capacity units have the price and no quantity; the target line is the hour of the plan (plan_id; a Network Load Balancer that states none is read as the default p10 the provider documents). Public IPv4 address: the hour of an Elastic IP, and of the address an instance asks for with associate_public_ip_address = true (not an address its subnet or launch template decides), against the hour of a stackit_public_ip. DNS: the month of a hosted zone (the first tier of the Route 53 price; the tier is the account's) and its queries (no quantity); the STACKIT list prices a zone by the number of records it may hold, which the draft does not state, so its target line is AMBIGUOUS. Data transfer out: the per-GB price of the first tier (every tier is named on the line) on the line of the internet gateway and no quantity; the STACKIT list holds no SKU for it, so its target line is PRICE_NOT_FOUND. A quantity that is a measurement of use (GB, capacity unit hours, queries) is never in a Terraform source and is never made up: such a line has its price and no amount. The prices are the On-Demand rows of the AmazonEC2 (NAT gateway, load balancers), AmazonVPC (public IPv4), AWSDataTransfer and AmazonRoute53 offers of the price cache, which `stacktoit prices refresh --provider aws --region R` fetches (`--offer` names one); a line whose offer the cache does not hold names the offer and the command.
- The managed-service families are priced from the On-Demand rows of the AmazonECS (Fargate vCPU and GB hours: the cpu and memory of the task definition times the desired count, which is never taken as zero when it is not stated), AmazonMQ (broker hour by engine, instance type and deployment mode; its storage has the price and no quantity), AmazonElastiCache (node hour by engine and node type times the nodes of a replication group), AmazonES (data and dedicated master node hours, EBS GB-month) and AmazonDynamoDB (provisioned read and write capacity unit hours when the table states them, at the rate beyond the free first tier, which is the whole account's; request units and storage have the price and no quantity) offers, which `stacktoit prices refresh --provider aws --region R` fetches (`--offer` names one); Fargate Spot, ECS on EC2 capacity, Windows tasks, global datastores and non-standard table classes are out of the model. On the target side a RabbitMQ, Valkey (Key Value Store), OpenSearch or MariaDB instance is the hour of the SKU of its plan_name (the SKU is named by the plan, INFERRED from the names of the list, and its nodes and disk are checked against the list's attributes); a plan the draft leaves to a person is TARGET_NOT_CHOSEN. An SKE cluster is the cluster hour, and each node pool it states is a line of its own: the server flavor hours of its machine_type (the join of a server) times its nodes, the range between its minimum and its maximum when they differ, an unknown quantity with the price when the draft states either as a variable, and TARGET_NOT_CHOSEN when the machine type is a variable; the boot volume of each node is not in the line, and the nodes of an EKS node group or of an ECS cluster's capacity have no source line in this build, so a pool is a target-only line (see below). A MongoDB Flex instance is the hour of the SKU MongoDB-Flex-<cpu>.<ram>-<Single\|Replica\|Sharded> of its flavor.cpu, flavor.ram and options.type (INFERRED from the names of the list, and checked against the SKU's own attributes; the rate of a Replica SKU is read as that of the whole instance with its nodes); a flavor a person sets is TARGET_NOT_CHOSEN, a flavor the list has no SKU of is PRICE_NOT_FOUND, its storage and backups are not computed, and because this build prices no DocumentDB cluster on the source side its line is target only (see below). A software KMS key version and a GB of log ingestion have their list price and no quantity; Secrets Manager is AMBIGUOUS between its tiers (the number of secret versions). A priced target line of a family whose source side has no line for the unit (an SKE cluster and its node pools, a MariaDB instance, a MongoDB Flex instance, a RabbitMQ plan against a source with no priced broker) is target only: it is counted in the STACKIT total, listed apart with its amount (target_only on the line and target_only_lines, target_only_min and target_only_max on the total), and kept out of every comparison and every saving, because no source amount stands against it; each comparison states the lines and the amount it leaves out, on both sides.
- The instance hours and the allocated storage of an RDS for PostgreSQL instance are priced from the AmazonRDS offer of the price cache (On-Demand list prices, Single-AZ or Multi-AZ as the source states; `stacktoit prices refresh --provider aws` fetches it with the AmazonEC2 offer); its provisioned IOPS (io1, io2, gp3) and the provisioned throughput of gp3 storage come from the same offer, gp3 only above the performance its allocated storage includes (a baseline of 12,000 IOPS and 500 MiB/s from 400 GiB, nothing more can be provisioned below it: Amazon RDS User Guide, DB instance storage); without that offer the lines are PRICE_SOURCE_ABSENT and the instance is never in the computed subtotal. An Aurora instance (engine aurora-mysql or aurora-postgresql) is the instance hour of its engine, its instance class and the storage configuration of its cluster, from the same offer (rules version 3 of its narrowing): Aurora Standard when the cluster states no storage_type (the provider's documented default), Aurora I/O-Optimized for storage_type = "aurora-iopt1", and both prices open (AMBIGUOUS) when the source does not state it as a fact or the instance's cluster is not a resource of the source; the cluster's consumed storage (a GB-month) and, on Standard, its I/O requests are measurements of use and have their price and no quantity. An Aurora Serverless v2 instance (db.serverless), an instance of a Multi-AZ DB cluster, backup storage beyond the free allocation, Global Database and the Data API are not computed. An offer narrowed before the Aurora rows were kept answers PRICE_SOURCE_ABSENT with the refresh command on each Aurora line. A PostgreSQL Flex Replica flavor is priced once per instance: the list gives its SKU 3 nodes and a higher rate than the Single SKU (1.6 to 2.0 times it, never 3 times), and the rate is read as that of the whole instance (evidence class INFERRED from the price list; each such line says so); how much of its storage is billed (once or per node) the list does not say, so its storage lines have the SKU and no quantity.
- The PostgreSQL Flex storage class premium-perf<n>-stackit is priced as the SKU "Block Storage for PostgreSQL Premium-Performance <n>" per disk and its capacity as "Block Storage for PostgreSQL Premium-Capacity" per GB (evidence class INFERRED from the names of the price list; each such line says so). The IOPS and throughput shown for the class in the technical mapping are the attributes maxIOPerSec and maxTroughInMB of that performance SKU in the price list (the catalogue states none for a PostgreSQL Flex class); whether the class covers what the source provisions is a comparison of those figures, not a statement that the two perform alike.
- The lines fall into three groups: the computed subtotal (only the source units every line of which is priced on both sides, so both subtotals cover the same units), the lines whose price is known and whose quantity is not (the quantity that is needed is named), and what is not computed (a unit of a type out of the model, a unit with no line on one side, or a line without a price), listed by resource and never zero.
- Source prices are the On-Demand list prices of the AWS offer file in the price cache (USD, net, region of the resource); Spot, Reserved, Savings Plans, Dedicated Host, capacity reservation and private prices are never used. The operating system and licence come from the assumption file: the source does not state them.
- The offer file bills an EBS volume per GB-month; this build reads it as GiB-month, the unit a volume is sized in: the Amazon EBS pricing page states "on this page, GB = 1024^3 bytes" (OFFICIAL_DOCUMENTED for that page; applying it to the offer file's unit is INFERRED). The IOPS and throughput of a gp3 volume are priced only above the baseline included in the price of its storage (3,000 IOPS, 125 MiB/s: Amazon EBS User Guide, OFFICIAL_DOCUMENTED), per volume; io2 IOPS are priced in tiers whose edges the offer file carries in descriptions only, and are not priced.
- Target prices are the net EUR list prices of the public STACKIT price list in the price cache (region eu01). A machine type or performance class the draft leaves to a person is TARGET_NOT_CHOSEN; the metro variant of a SKU is never substituted.
- The target capacity price of a volume is the capacity SKU of its performance class's tier (evidence class INFERRED from the structure of the price list).
- One month is the 730 hours of the scenario; a per-month rate is applied as the file gives it. Snapshots, backups, support plans and every other cost of usage, traffic or requests that this build has no line for are not computed.
- A saving is compared only for the same source units on both sides and in one currency (an exchange rate from the assumption file, with its source and date, converts one side).
- A list price is the price of one unit of one SKU. It is not a cost: this block reads no quantity and builds no total; the quantities, amounts and totals of the priced families are in financial/cost-model.json.
- A resource is joined to a SKU only where the draft itself names the machine type, performance class or flavor; where the draft leaves that to a person (a variable), no SKU is named and the resource is NOT_ASSESSED.
- Prices are net list prices of the public STACKIT price list: excluding taxes, with no contract discount, no savings plan and no other currency. A SKU that is not in the public list, a deprecated SKU and the metro variant of a SKU are never used as a price.
- Egress and traffic, support plans, the container registry and every resource of a kind the price rules do not list have no row: nothing is stated about their cost.
- Only the region eu01 is looked at: it is the region of the knowledge-base catalogue the draft takes its flavors from.
- The row of a volume is the per-hour fee of its performance class; the capacity fee of the disk is a separate SKU that depends on the size, and is a line of the cost model, not a row here.
