Skip to content

Commit 6d5eeea

Browse files
hyunsiesChris Hyuclaude
authored
fix: MapConfig SSM param → Tier: Intelligent-Tiering (v20.6.5, plan-PR #50) (#55)
§1.60 — Standard-tier 4KB wall silently fails at ~240 accounts. The MapConfig SSM parameter had no explicit Tier, so CFN defaulted to Standard (4KB Value limit). A customer with ~240+ accounts listed in scoped_account_ids generates a Value > 4KB; stack create failed with ParameterMaxSizeExceeded and no actionable error message. Intelligent-Tiering stays in the free Standard tier until the Value actually crosses 4KB, at which point AWS auto-upgrades to Advanced ($0.05/parameter/month, $0.60/year for that one parameter). Zero cost impact for normal-sized deployments; graceful auto-upgrade at the boundary. Mirrored in both YAML and configurator inline template. No new IAM required — the tier upgrade is driven by CloudFormation's deploy-time role at stack create, not by the Lambda. Runtime ssm:GetParameter grant covers both tiers. Co-authored-by: Chris Hyu <chhyu@amazon.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3ce1aa9 commit 6d5eeea

4 files changed

Lines changed: 38 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ All notable changes to the MAP 2.0 Auto-Tagger.
66

77
## v20 — Resilient SQS Pipeline + Open Source
88

9+
### v20.6.5 — SSM parameter Intelligent-Tiering (plan-PR #50)
10+
11+
PATCH. Closes audit item §1.60.
12+
13+
**§1.60 — SSM Standard-tier 4KB wall silently fails at ~240 accounts.** `MapConfig` (the JSON configuration that the Lambda reads on every invocation) had no explicit `Tier` on its `AWS::SSM::Parameter` resource, so CFN defaulted it to Standard (4KB Value limit). A customer with ~240+ accounts listed in `scoped_account_ids` generates a Value > 4KB; stack create failed with `ParameterMaxSizeExceeded` and no actionable CFN error message. Added `Tier: Intelligent-Tiering` to both YAML (`map2-auto-tagger-optimized.yaml`) and the configurator's inline template. Intelligent-Tiering stays in the free Standard tier until the Value actually crosses 4KB, at which point AWS auto-upgrades to Advanced ($0.05/parameter/month, $0.60/year for that one parameter). Zero cost impact for normal-sized deployments; graceful auto-upgrade at the 4KB boundary.
14+
15+
No new IAM required — the Intelligent-Tiering upgrade is driven by CloudFormation's deploy-time role at stack create, not by the Lambda. The Lambda's runtime `ssm:GetParameter` grant (scoped to `/auto-map-tagger/${MpeId}/config`) covers both tiers.
16+
17+
---
18+
919
### v20.6.4 — IAM completeness + CI gate (plan-PR #42)
1020

1121
Tooling + IAM PATCH. YAML runtime Lambda is byte-identical to v20.6.3 except the version stamps and one added IAM row. Closes audit item §1.99; partially addresses §1.64 (introduces the methodology to prevent future siblings).

VERSIONING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
The version lives in exactly two places:
2323

24-
1. **`configurator.html`**`const TEMPLATE_VERSION = 'v20.6.4';` (one occurrence)
24+
1. **`configurator.html`**`const TEMPLATE_VERSION = 'v20.6.5';` (one occurrence)
2525
2. **`map2-auto-tagger-optimized.yaml`** — Description header, `MapVersion` SSM parameter default, Lambda `TEMPLATE_VERSION` constant, `TemplateVersion` CFN output (all four must equal the configurator constant)
2626

2727
`.github/scripts/sync-check.py` enforces this invariant. Any drift between references is a sync-check failure.

configurator.html

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,15 +1141,22 @@ <h3 style="margin:20px 0 8px;font-size:14px;" data-i18n="ui_editor_script_previe
11411141

11421142
<script>
11431143
// Template version — single source of truth for the SemVer constant.
1144-
// Must match `TEMPLATE_VERSION = 'v20.6.4'` in map2-auto-tagger-optimized.yaml (sync-check enforces this).
1145-
const TEMPLATE_VERSION = 'v20.6.4';
1144+
// Must match `TEMPLATE_VERSION = 'v20.6.5'` in map2-auto-tagger-optimized.yaml (sync-check enforces this).
1145+
const TEMPLATE_VERSION = 'v20.6.5';
11461146

11471147
// Version history surfaced in the Update flow. Bullets are intentionally English-only —
11481148
// translating release notes across 7 languages for every PR is unsustainable. Labels
11491149
// (titles, buttons) go through i18n; change bullets stay in source form.
11501150
// Tags: bugfix, coverage, breaking, security, perf, other.
11511151
// sync-check.py enforces that the newest entry's version matches TEMPLATE_VERSION.
11521152
const VERSION_HISTORY = [
1153+
{
1154+
version: 'v20.6.5',
1155+
date: '2026-04-26',
1156+
changes: [
1157+
{ tag: 'bugfix', text: 'MapConfig SSM parameter now uses Tier: Intelligent-Tiering instead of the default Standard tier. Customers with ~240+ accounts in scoped_account_ids generate a Value > 4KB (the Standard-tier limit); prior behavior silently failed stack create with ParameterMaxSizeExceeded. Intelligent-Tiering stays free for normal-sized deployments and auto-upgrades to Advanced ($0.05/parameter/month) only when the Value actually crosses the threshold. Closes §1.60.' },
1158+
],
1159+
},
11531160
{
11541161
version: 'v20.6.4',
11551162
date: '2026-04-26',
@@ -5925,6 +5932,11 @@ <h3 style="margin:20px 0 8px;font-size:14px;" data-i18n="ui_editor_script_previe
59255932
Type: AWS::SSM::Parameter
59265933
Properties:
59275934
Name: /auto-map-tagger/${mpe}/config
5935+
# Tier: Intelligent-Tiering — see §1.60 comment in map2-auto-tagger-optimized.yaml.
5936+
# Customers with ~240+ accounts in scoped_account_ids produce a Value > 4KB; AWS
5937+
# auto-upgrades to Advanced tier ($0.05/parameter/month) instead of failing stack
5938+
# create with ParameterMaxSizeExceeded. Zero cost impact below the threshold.
5939+
Tier: Intelligent-Tiering
59285940
# SECURITY NOTE: Type: String is intentional. The stored values (MPE ID, agreement
59295941
# dates, account/VPC scope lists) are non-sensitive operational configuration — not
59305942
# credentials, secrets, or PII. SecureString would require KMS decrypt permissions

map2-auto-tagger-optimized.yaml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
AWSTemplateFormatVersion: '2010-09-09'
55
Description: >
6-
MAP 2.0 Auto-Tagger v20.6.4 - Auto-tags AWS resources with map-migrated for MAP 2.0
6+
MAP 2.0 Auto-Tagger v20.6.5 - Auto-tags AWS resources with map-migrated for MAP 2.0
77
credit eligibility. 190+ resource types. Deploy once; tagging happens within 60-90 s
88
of resource creation. Daily reconciliation Lambda (RGTA-based) catches any tags the
99
live Lambda missed. Three-path error classifier + TagFailureByClass CloudWatch metric
@@ -64,13 +64,20 @@ Resources:
6464
Name: !Sub '/auto-map-tagger/${MpeId}/version'
6565
Type: String
6666
Description: MAP 2.0 Auto-Tagger template version pinned at deploy time
67-
Value: v20.6.4
68-
69-
# SSM Parameter Store - single source of truth for config
67+
Value: v20.6.5
68+
69+
# SSM Parameter Store - single source of truth for config.
70+
# Tier: Intelligent-Tiering leaves the parameter in the free Standard tier
71+
# (4KB limit) until the Value crosses the threshold, at which point AWS
72+
# auto-upgrades to Advanced (8KB limit, $0.05/parameter/month). Closes
73+
# §1.60: customers with ~240+ accounts in `scoped_account_ids` generate a
74+
# Value > 4KB; prior behavior (default Standard) silently failed stack
75+
# create with `ParameterMaxSizeExceeded`.
7076
MapConfig:
7177
Type: AWS::SSM::Parameter
7278
Properties:
7379
Name: !Sub '/auto-map-tagger/${MpeId}/config'
80+
Tier: Intelligent-Tiering
7481
Type: String
7582
Description: MAP 2.0 Auto-Tagger configuration
7683
Value: !Sub
@@ -374,7 +381,7 @@ Resources:
374381
# Template version pinned at deploy time. Surfaced in CloudWatch Logs on
375382
# every cold start so ops can trace which version processed an event
376383
# without reading the CFN stack or SSM parameter.
377-
TEMPLATE_VERSION = 'v20.6.4'
384+
TEMPLATE_VERSION = 'v20.6.5'
378385
print(f'auto-map-tagger {TEMPLATE_VERSION} cold start')
379386
380387
ssm = boto3.client('ssm')
@@ -2407,7 +2414,7 @@ Outputs:
24072414
Value: !Ref MapConfig
24082415
TemplateVersion:
24092416
Description: MAP 2.0 Auto-Tagger template version (pinned at deploy time)
2410-
Value: v20.6.4
2417+
Value: v20.6.5
24112418
AlertTopicArn:
24122419
Description: SNS topic for tagger alerts - subscribe your email here
24132420
Value: !Ref AlertTopic

0 commit comments

Comments
 (0)