Skip to content

docs(aws-serverless): update LMI skill for region expansion and scheduled scaling#1

Closed
sbbhimji wants to merge 8 commits into
mainfrom
lmi-scheduled-scaling-region-expansion
Closed

docs(aws-serverless): update LMI skill for region expansion and scheduled scaling#1
sbbhimji wants to merge 8 commits into
mainfrom
lmi-scheduled-scaling-region-expansion

Conversation

@sbbhimji

Copy link
Copy Markdown
Owner

Summary

Updates the aws-lambda-managed-instances skill for two recent Lambda Managed Instances launches:

  1. Region expansion (announcement) — LMI is now available in all commercial AWS Regions except Israel (Tel Aviv), Middle East (Bahrain), Middle East (UAE), and Asia Pacific (Auckland). Replaces the previous fixed five-region list and updates the "Unsupported Region" handling to name the excluded regions and suggest the nearest supported one.
  2. Scheduled scaling (announcement) — documents using Amazon EventBridge Scheduler to adjust MinExecutionEnvironments/MaxExecutionEnvironments on a one-time or recurring schedule for predictable traffic (scale up before peak, scale down or to zero when idle).

Files changed

  • SKILL.md: regional availability + unsupported-region scenario; scheduled scaling trigger and scheduled-scaling tag in frontmatter; scheduled-scaling note in Step 3; two Operations best practices; reference-file pointers; Scaling docs link in Resources.
  • references/configuration-guide.md: new "Scheduled Scaling (Predictable Traffic)" section — behavior notes (still scales on CPU/concurrency between bounds; Min=Max=0 deactivates and needs explicit reactivation) and a common-patterns table.
  • references/infrastructure-setup.md: new "Scheduled Scaling (EventBridge Scheduler)" section — scheduler IAM trust/permissions policies, create-schedule examples targeting the PutFunctionScalingConfig universal target, and a manual put-function-scaling-config override.

Testing

  • dprint check — clean
  • markdownlint-cli2 (incl. custom skill-length + frontmatter rules) — 0 errors
  • lint:cross-refs — 0 errors
  • validate:refs — 0 broken links
  • validate:size — SKILL.md 225 lines / 1566 words, description 626 chars (all under limits)

Documentation-only change; content verified against the LMI scaling documentation. Security scanners (gitleaks/checkov/etc.) were not run in this environment — the change adds only docs with placeholder identifiers (<account-id>), no real secrets or IaC files.

sbbhimji and others added 2 commits June 19, 2026 15:53
…uled scaling

- Region availability: now all commercial AWS Regions except Israel (Tel Aviv), Middle East (Bahrain), Middle East (UAE), and Asia Pacific (Auckland); update Unsupported Region handling.
- Scheduled scaling: document EventBridge Scheduler-based scheduled scaling of Min/Max execution environments for predictable traffic (SKILL.md, configuration-guide.md, infrastructure-setup.md).
sbbhimji pushed a commit that referenced this pull request Jun 30, 2026
…ction, rewrites, and workflow extraction (awslabs#162)

* feat(dsql): enhance query plan explainability with type coercion detection and rewrite references

- Add structured trigger phrases and routing criteria for query plan diagnosis
- Add type coercion index bypass detection (implicit cast compatibility matrix)
- Extend catalog queries with indexed column type retrieval
- Add generic SQL rewrite reference (11 patterns: OR-to-IN, subquery unnesting, etc.)
- Add DSQL-specific rewrite reference (reltuples estimate, split large joins for DP threshold)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(dsql): extract query plan workflow, add rewrite evals

- Extract Workflow 8 (query plan explainability) from SKILL.md into
  references/query-plan/workflow.md to stay under the 300 LOC limit
- Wire query-rewrites-generic.md and query-rewrites-dsql-specific.md
  into the workflow (Phase 0 load list + Phase 2 evidence gathering)
- Add behavioral evals (query_plan_rewrite_evals.json) covering type
  coercion detection, subquery unnesting, OR-to-IN, GROUP BY pushdown,
  large join splitting, and reltuples estimation
- Add eval results (query_plan_rewrite_eval_results.md) with
  with-skill vs baseline comparison

Validation:
- validate-size.py: 275 lines (good)
- validate-references.py: 0 broken links, 0 new orphans

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: correct markdown link fragments in workflow.md TOC

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: apply dprint table formatting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(dsql): address PR review — split rewrites, positive language, RFC keywords

Review feedback from amaksimo:

- Split query-rewrites-generic.md into 11 individual files under
  query-rewrites/ subdirectory to reduce context consumption
- Split query-rewrites-dsql-specific.md into individual files
- Convert monolithic files to index tables pointing to sub-files
- Fix DATEADD() SQL Server syntax → PostgreSQL NOW() - INTERVAL
- Flip negative language ("Do not apply") to positive ("Skip when")
- Add RFC keywords (MUST, SHOULD, MAY) throughout
- Remove psql fallback from workflow.md (enforce MCP usage)
- Update plan-interpretation.md recommendation template with RFC language
- Make Phase 0 loading explicit: MUST for core refs, SHOULD for rewrites

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dsql): address PR awslabs#162 review — correctness, references, evals

Correctness fixes (review items 1-5):
- #1: push-computation-to-constant — use NUMERIC column 'amount' to
  avoid integer division non-equivalence
- #2: not-in-to-not-exists — add NULL semantics warning (NOT EXISTS
  does not preserve NOT IN's NULL-propagation; MUST confirm with user)
- awslabs#3/awslabs#4: subquery-unnesting — prefer EXISTS form (true semi-join);
  document uniqueness precondition for JOIN+DISTINCT alternative
- awslabs#5: subquery-unnesting-scalar — add COALESCE(s_count, 0) for
  COUNT/SUM (LEFT JOIN returns NULL, scalar returns 0)

Dangling reference fixes (review items 6-8):
- awslabs#6: workflow.md trigger table — "Phase 5" → reassessment re-entry
- awslabs#7: Replace all "implicit cast compatibility matrix" references
  with "pg_amop query in catalog-queries.md"
- awslabs#8: plan-interpretation.md L202 — fix cast-vs-operator contradiction

Structural fixes (review items 9-14, 24):
- awslabs#9: Hedge "integer family" claim with "at time of writing" + verify
- awslabs#10: amopmethod=10003 — add provenance comment and verification SQL
- awslabs#11: catalog-queries.md TOC — add 3 missing sections
- awslabs#12: plan-interpretation.md TOC — add Type Coercion section
- awslabs#13: SKILL.md — explicitly delegate routing to workflow.md
- awslabs#24: workflow.md — remove em dashes from headings for clean anchors

Other fixes (review items 21-23):
- awslabs#21: reltuples-estimate — add staleness warning (MUST warn user)
- awslabs#22: catalog-queries — add safe_query.build() note for placeholders
- awslabs#23: "Skip when" → "SHOULD skip when" in all rewrite files

Eval improvements (review items 14, 16):
- awslabs#14: README — add query_plan_rewrite_evals to directory tree and
  eval section
- awslabs#16: Add evals 206-210 covering LEFT JOIN, computation push, NOT IN
  with NULL warning, nested UNION ALL, and negative case (OR across
  different columns)
- awslabs#7 (eval): Update eval 201 expectation — pg_amop instead of matrix

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dsql): address remaining PR awslabs#162 review items

- awslabs#17: Downgrade eval results to qualitative comparison, record model
  and version, note n=1 and recommend n>=3 for production confidence
- awslabs#18: SKILL.md is 281 lines (will update PR body)
- awslabs#20: Strengthen awsknowledge fallback to MUST — refuse fallback when
  recommendation depends on exact limit value
- awslabs#21: Already addressed in prior commit (reltuples staleness)
- awslabs#15: Document manual-only status and future Python converter direction
  (per anwesham-lab's suggestion for deterministic rewrites)
- awslabs#19: MCP mirror PR noted as follow-up in PR body

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(dsql): address self-review findings — links, inclusive language, evals

- Revert broken relative links in SKILL.md (mcp/.mcp.json, scripts/)
  back to correct ../../ paths
- Rename blacklisted_customers → excluded_customers and blacklist →
  exclusion_list for inclusive language compliance
- Fix stale 'implicit cast compatibility matrix' → pg_amop in eval
  results
- Add eval results for 206–210 (LEFT JOIN, computation push, NOT IN
  NULL warning, nested UNION ALL, negative OR case)
- Include hooks.json update

* fix: remove stray conflict marker in evals README

* style: apply dprint table formatting to eval results

* fix(dsql): wire workflow.md and rewrite indexes into SKILL.md

Addresses amaksimo's review comment: after rebase onto main, the
Workflow 9 section lost its link to workflow.md and the rewrite index
files, making all 16 new query-plan files unreachable orphans.

- Add workflow.md as the entry gate in the reference table
- Add query-rewrites-generic.md and query-rewrites-dsql-specific.md
- Update Workflow 9 section to load workflow.md instead of listing
  the 4 Phase-0 files directly (workflow.md handles that routing)

* fix(dsql): address review findings awslabs#4, awslabs#5, awslabs#7, awslabs#8, awslabs#9

- awslabs#4: COALESCE rule in subquery-unnesting-scalar.md restricted to
  COUNT only; SUM/MAX/MIN return NULL on empty sets in both forms
- awslabs#5: verify-comment in catalog-queries.md changed from
  amname='btree' to amname='btree_index' (DSQL uses btree_index AM)
- awslabs#7: workflow.md context disambiguation removes psql fallback offer,
  now says no MCP means no plan capture (consistent with Safety)
- awslabs#8: split-large-joins.md example expanded from 7 to 11 tables,
  exceeding the stated DP threshold of 10; CTEs project explicit cols
- awslabs#9: plan-interpretation.md recommendation template changed ::float
  to ::integer (only integer-family cross-type operators registered)

* fix(dsql): correct safe_query substitution guidance in catalog-queries

Lift the substitution rule to the file preamble with per-position
guidance: identifier positions (FROM, GROUP BY) use ident(); string-
literal positions (WHERE = '{schema}', IN ('{table}')) use allow()
or regex(). The prior note incorrectly prescribed ident() for all
positions, which would produce invalid SQL in WHERE clauses.

* refactor(dsql): merge in-subquery-to-exists into subquery-unnesting-uncorrelated

Delete redundant in-subquery-to-exists.md — same input shape and same
rewrite as subquery-unnesting-uncorrelated.md. Merge the 'large result
set' trigger and 'small static set' skip condition into the canonical
file. Update index and eval 200 to route exclusively there.

* style: apply dprint table formatting to workflow.md

* fix(dsql): address merge-blocking review findings #1-awslabs#4

- #1: Strip surrounding quotes from all placeholders in catalog-queries
  so safe_query helpers (which emit their own quotes) don't double-quote.
  Add worked safe_query.build() example to preamble.
- #2: DP threshold changed from 10 to 8 (validated: SHOW
  join_collapse_limit = 8 on live DSQL). Agent now instructed to SHOW
  the value rather than hardcoding.
- awslabs#3: Remove pg_stat_user_tables.last_analyze cross-check (DSQL never
  populates it). Guard reltuples with GREATEST(..., 0) for the -1
  sentinel on never-analyzed tables.
- awslabs#4: Fix '11 generic' to '10 generic' in SKILL.md reference table.

* feat(dsql): add blog learnings — filter model, DPU, CTE rewrite

- Add Three-Layer Filter Model (Index Cond / Storage Filter / Query
  Processor Filter) with optimization table to plan-interpretation.md
- Add Fixing Storage Lookups guidance (INCLUDE columns) with example
- Add Cost Number Interpretation (startup ~100 is normal in DSQL)
- Add DPU Interpretation (Read DPU as primary signal, optimization loop)
- Add CTE late materialization as DSQL-specific rewrite pattern
  (defer Storage Lookups past LIMIT)
- Update workflow.md Phase 1: recommend plain EXPLAIN first for
  expensive queries before EXPLAIN ANALYZE VERBOSE

* chore: bump databases-on-aws plugin version to 1.4.0

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pcrai-aws and others added 6 commits June 30, 2026 15:44
  - Add formulas for deriving MaxConcurrency, MemorySize, and
    MinExecutionEnvironments
    from Lambda Insights metrics (cpu_total_time, memory_utilization,
ConcurrentExecutions)
  - Add fallback guidance when Lambda Insights is not available
  - Add Lambda Insights enablement instructions
  - Fix default memory-to-vCPU ratio from 4:1 to 2:1 (matches public
    docs and CDK defaults)
  - Fix weighted alias traffic shifting claim (not currently supported
    for LMI)
  - Add testing phase troubleshooting guidance (CPUThrottles,
    MemoryThrottles,
    DiskThrottles, ConcurrencyThrottles, low CPU utilization)
  - Update Best Practices to align with corrected defaults
… formatting

Follow-up to the migration-assessment PR: correct the broken Lambda Insights versions doc URL and add blank lines around lists in troubleshooting.md so dprint/markdownlint pass.
Region expansion + scheduled scaling + migration-assessment guidance are backward-compatible feature additions to the LMI skill (minor bump). Updated plugin.json, .codex-plugin/plugin.json, and marketplace.json.
Address review feedback: the MemorySize derivation had a floor (max with 2048) but no ceiling, so it could exceed the 32 GB LMI limit. Wrap in min(32768, ...) to cap at the maximum.
main already advanced aws-serverless to 1.2.0 via the aws-lambda-microvms skill (awslabs#202). Bump this PR to 1.3.0 to avoid a duplicate-version collision; the LMI region/scheduled-scaling additions are backward-compatible features (minor bump from 1.2.0).
@sbbhimji sbbhimji closed this Jun 30, 2026
@sbbhimji sbbhimji deleted the lmi-scheduled-scaling-region-expansion branch June 30, 2026 22:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants