diff --git a/CHANGELOG.md b/CHANGELOG.md index cd7dd412..c339420d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -216,6 +216,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ### Fixed - **AWS/OpenSearch:** the STS account-ID lookup used for post-purchase tagging caches only a successful result, so one throttled or timed-out `GetCallerIdentity` no longer disables tagging for the client's lifetime (#53). +- **AWS/recommendations:** `normalizeRegionName` maps the current `Europe (Ireland|Frankfurt|London|Paris|Stockholm)` Cost Explorer display names to region codes, so coverage lookups keyed by region code match those recommendations (#53). - **AWS/RDS:** `PurchaseCommitment` refuses an offering whose upfront (`FixedPrice` x count) exceeds the approved recommendation upfront by more than 5%, or that is priced in a non-USD currency; a zero approved upfront is not checked (#53). - Bump Go to 1.26.10 to pick up the fix for GO-2026-6809 (crypto/x509), which `govulncheck` now reports against 1.26.9. - **AWS/MemoryDB, OpenSearch, Redshift:** `PurchaseCommitment` refuses an offering whose upfront (`FixedPrice` x count) exceeds the approved recommendation upfront by more than 5%, or that is priced in a non-USD currency (MemoryDB offerings carry no currency, so only the recommendation's currency is checked there), or, for MemoryDB, an upfront offering with a zero price or one bought in a China region (cn-north-1, cn-northwest-1), where the assumed USD price is wrong; a zero approved upfront is not checked. All AWS RI price guards (EC2, RDS, MemoryDB, OpenSearch, Redshift) also refuse a NaN or infinite approved upfront (#53). diff --git a/providers/aws/recommendations/converters.go b/providers/aws/recommendations/converters.go index f04c146f..c451ad89 100644 --- a/providers/aws/recommendations/converters.go +++ b/providers/aws/recommendations/converters.go @@ -120,6 +120,11 @@ func normalizeRegionName(region string) string { "Asia Pacific (Hong Kong)": "ap-east-1", "Asia Pacific (Osaka)": "ap-northeast-3", "Asia Pacific (Jakarta)": "ap-southeast-3", + "Europe (Ireland)": "eu-west-1", + "Europe (Frankfurt)": "eu-central-1", + "Europe (London)": "eu-west-2", + "Europe (Paris)": "eu-west-3", + "Europe (Stockholm)": "eu-north-1", "Europe (Milan)": "eu-south-1", "Middle East (UAE)": "me-central-1", "Asia Pacific (Hyderabad)": "ap-south-2", diff --git a/providers/aws/recommendations/converters_test.go b/providers/aws/recommendations/converters_test.go index 524bb77c..47f458e3 100644 --- a/providers/aws/recommendations/converters_test.go +++ b/providers/aws/recommendations/converters_test.go @@ -553,6 +553,11 @@ func TestNormalizeRegionName(t *testing.T) { region: "il-central-1", expected: "il-central-1", }, + {name: "Europe (Ireland)", region: "Europe (Ireland)", expected: "eu-west-1"}, + {name: "Europe (Frankfurt)", region: "Europe (Frankfurt)", expected: "eu-central-1"}, + {name: "Europe (London)", region: "Europe (London)", expected: "eu-west-2"}, + {name: "Europe (Paris)", region: "Europe (Paris)", expected: "eu-west-3"}, + {name: "Europe (Stockholm)", region: "Europe (Stockholm)", expected: "eu-north-1"}, { name: "Unknown region returns as-is", region: "Unknown Region",