[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-documentdb-well-architected-review":3,"mdc-fi1jy9-key":40,"related-org-aws-labs-documentdb-well-architected-review":3502,"related-repo-aws-labs-documentdb-well-architected-review":3680},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"documentdb-well-architected-review","perform Well-Architected reviews for Amazon DocumentDB","Performs a comprehensive Well-Architected review of Amazon DocumentDB clusters. Evaluates cluster configuration against 6 pillars (Reliability, Security, Operational Excellence, Performance Efficiency, Cost Optimization, Sustainability), generates findings with remediation guidance, and produces a universal JSON export + interactive HTML dashboard.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Performance","performance",{"name":21,"slug":22,"type":16},"Architecture","architecture",{"name":24,"slug":25,"type":16},"Database","database",{"name":27,"slug":28,"type":16},"AWS","aws",157,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Famazon-documentdb-tools","2026-08-07T05:03:40.486376",null,86,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"Tools for use with the Amazon DocumentDB managed document database service.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Famazon-documentdb-tools\u002Ftree\u002FHEAD\u002Fperformance\u002Fprism\u002Fdocumentdb-well-architected-review","---\nname: documentdb-well-architected-review\ndisplay_name: DocumentDB Well-Architected Review\ndescription: \"Performs a comprehensive Well-Architected review of Amazon DocumentDB clusters. Evaluates cluster configuration against 6 pillars (Reliability, Security, Operational Excellence, Performance Efficiency, Cost Optimization, Sustainability), generates findings with remediation guidance, and produces a universal JSON export + interactive HTML dashboard.\"\nicon: \"🏗️\"\ntrigger: I need to do a DocumentDB well-architected review\ninputs:\n  - name: cluster_identifier\n    description: \"The DocumentDB cluster identifier to review\"\n    type: string\n    required: true\n  - name: aws_region\n    description: \"AWS region where the cluster resides\"\n    type: string\n    required: true\n    default: us-east-1\ndepends-on:\n  - aws-api\ntools:\n  - call_aws\n  - run_python\n  - file_write\n---\n\n## 1. Overview\n\nPerforms a comprehensive Well-Architected review of an Amazon DocumentDB cluster across 6 AWS Well-Architected pillars: Reliability, Security, Operational Excellence, Performance Efficiency, Cost Optimization, and Sustainability. Evaluates **38 automated checks** against live cluster configuration, CloudWatch metrics, and security posture. Produces a health score, prioritized findings with remediation CLI commands, Bedrock-generated pillar recommendations, a Universal WAR Export JSON file, an interactive HTML dashboard, and (inside Prism) a PDF export.\n\nThis is a **sub-skill** of the Prism platform (see the top-level `prism-dash`\nskill). It owns cluster assessment and pillar scoring. Conversational advice and\nper-query tuning are owned by the `documentdb-advisor` skill — defer chat\u002Fadvisory\nquestions there.\n\n### Two execution modes\n\n1. **Prism Dash plugin execution** — the live app runs the checks via the\n   `wa_checks\u002F` plugin registry (Section 4a) and renders results in the UI, with\n   Bedrock recommendations and PDF export. This is the primary mode.\n2. **Standalone manual execution** — an agent with AWS CLI access can perform the\n   review directly using the 13-step workflow in Section 3 and the check catalog in\n   Section 4. Both modes share the **same check IDs** so findings are traceable.\n\n## 2. DocumentDB Engine Context\n\nThe reviewing agent MUST know these facts:\n\n- DocumentDB is NOT MongoDB — API-compatible but purpose-built storage engine with B-tree indexes\n- Only 2\u002F3 of instance RAM is available for buffer cache (1\u002F3 reserved by DocumentDB)\n- Connection limits by instance type: db.t3\u002Ft4g.medium=1000, db.r5\u002Fr6g.large=3400, db.r5\u002Fr6g.xlarge=7000, db.r5\u002Fr6g.2xlarge=14200, db.r5\u002Fr6g.4xlarge=28400, db.r5\u002Fr6g.8xlarge+=60000\n- Compression: LZ4 available all versions; ZSTD available 8.0+ only; NOT enabled by default on 5.0 (must set default_compression parameter)\n- IAM authentication: available on 5.0+ instance-based clusters only; primary user always uses password auth\n- Query Planner: v1 (3.6\u002F4.0), v2 (5.0 — up to 10x improvement), v3 (8.0)\n- retryWrites must be false in connection strings\n- I\u002FO-Optimized storage: no per-operation I\u002FO charges; beneficial when I\u002FO cost exceeds ~25% of total cluster bill\n- Graviton instances (r6g, r7g, r8g, t4g, r6gd): better price-performance; r8g is latest generation (Graviton4, engine 5.0\u002F8.0 only)\n- 6-way replication across 3 AZs regardless of instance count\n- Automatic failover requires minimum 2 instances; typical RTO ~30 seconds with multi-AZ\n- Global clusters: cross-region RPO less than 1 second, RTO ~1 minute\n- Backup: continuous to S3, point-in-time recovery to any second within retention window\n- Index best practices: \u003C=5 indexes per collection, compound indexes \u003C=3 fields, follow ESR (Equality-Sort-Range) rule\n- Long-running queries (>30 min) block MVCC garbage collection causing cascading bloat and CPU pressure\n- MVCC total capacity: 1.4 billion IDs\n\n## 3. Workflow\n\n### Step 1: Discover cluster configuration\n- call_aws: `aws docdb describe-db-clusters --db-cluster-identifier {cluster_identifier} --region {aws_region}`\n- Extract: EngineVersion, BackupRetentionPeriod, DeletionProtection, StorageEncrypted, StorageType, DBClusterParameterGroup, DBSubnetGroup, VpcSecurityGroups, EnabledCloudwatchLogsExports, DBClusterMembers, DBClusterArn, Endpoint\n\n### Step 2: Fetch instance details\n- call_aws: `aws docdb describe-db-instances --filters Name=db-cluster-id,Values={cluster_identifier} --region {aws_region}`\n- Extract: DBInstanceIdentifier, DBInstanceClass, AvailabilityZone, IsClusterWriter (from DBClusterMembers)\n\n### Step 3: Fetch parameter group settings\n- call_aws: `aws docdb describe-db-cluster-parameters --db-cluster-parameter-group-name {parameter_group_name} --region {aws_region}`\n- Extract: tls (enabled\u002Fdisabled), tls_version\n\n### Step 4: Fetch security groups\n- For each VpcSecurityGroupId from Step 1:\n- call_aws: `aws ec2 describe-security-groups --group-ids {sg_id} --region {aws_region}`\n- Check: IpPermissions for 0.0.0.0\u002F0 or ::\u002F0 CidrIp rules\n\n### Step 5: Fetch CloudWatch metrics (7-day window, 1-hour period)\n- For each instance from Step 2, fetch these metrics with Dimensions=[{Name=DBInstanceIdentifier, Value={instance_id}}]:\n  - CPUUtilization (Statistics: Average)\n  - FreeableMemory (Statistics: Minimum)\n  - BufferCacheHitRatio (Statistics: Average)\n  - DatabaseConnections (Statistics: Maximum)\n  - SwapUsage (Statistics: Maximum)\n  - DiskQueueDepth (Statistics: Average)\n  - IndexBufferCacheHitRatio (Statistics: Average)\n  - DatabaseCursorsTimedOut (Statistics: Sum, Period: 86400)\n  - AvailableMVCCIds (Statistics: Minimum) — writer instance only\n  - ReadIOPS (Statistics: Average) — reader instances only\n- For cluster-level: DBClusterReplicaLagMaximum with Dimensions=[{Name=DBClusterIdentifier, Value={cluster_identifier}}]\n\n### Step 6: Fetch events (last 13 days)\n- call_aws: `aws docdb describe-events --source-identifier {cluster_identifier} --source-type db-cluster --start-time {13_days_ago} --region {aws_region}`\n- Filter for: \"failover\" in Message or EventCategories\n\n### Step 7: Check Secrets Manager\n- call_aws: `aws secretsmanager list-secrets --region {aws_region}`\n- Search: cluster_identifier or cluster endpoint in secret Name or Description\n\n### Step 8: Check CloudWatch alarms\n- call_aws: `aws cloudwatch describe-alarms --alarm-name-prefix {cluster_identifier} --region {aws_region}`\n- Count: MetricAlarms\n\n### Step 9: Evaluate all checks against collected data\n- Apply each check from the Check Catalog (Section 4) against the data collected in Steps 1-8\n- For per-instance checks: iterate over each instance, identify writer vs reader role\n\n### Step 10: Score results\n- health_score = pass_count \u002F (pass_count + warn_count + fail_count) * 100\n- Exclude \"info\" status from scoring\n- Color: >=80% green, 60-79% warning, \u003C60% red\n\n### Step 11: Generate Universal WAR Export JSON\n- Use the schema defined in Section 6\n- Write to file: `war_export_{cluster_identifier}_{timestamp}.json`\n\n### Step 12: Generate interactive HTML dashboard\n- Self-contained HTML with embedded CSS\n- 6-pillar grid layout with pillar colors\n- Health score header bar\n- Per-pillar panels grouped by status (fail first, then warn, then pass)\n- Write to file: `war_dashboard_{cluster_identifier}_{timestamp}.html`\n\n### Step 13: Present findings summary\n- Report health score\n- List all CRITICAL and HIGH severity findings\n- Provide top 3 remediation actions\n\n## 4. Check Catalog\n\n**38 checks across 6 pillars.** Of these, **37 are registered in the `wa_checks\u002F`\nplugin registry** via the `@register_check` decorator; **PERF1b** is contributed by\nthe Prism database-level path (`tabs\u002Fwell_architected._run_db_checks`) and merged\ninto the same result set. All check IDs are **stable** — use exactly what the code\ndefines (e.g. `REL1a` not `REL-1`, `PERF1b` not `PERF-1b`).\n\nThe complete catalog is broken down by pillar in the `pillars\u002F` directory. Each file\ncontains the full check table with IDs, thresholds, API calls, and remediation commands.\n\n- **[pillars\u002Freliability.md](pillars\u002Freliability.md)** — 9 checks: REL1a, REL1b, REL1c, REL5a, REL5b, REL5c, REL7, REL8, REL9\n- **[pillars\u002Fsecurity.md](pillars\u002Fsecurity.md)** — 7 checks: SEC1a, SEC1b, SEC2, SEC3, SEC5, SEC6, SEC8\n- **[pillars\u002Foperational-excellence.md](pillars\u002Foperational-excellence.md)** — 6 checks: OPS2, OPS5a, OPS5b, OPS5c, OPS7, OPS8\n- **[pillars\u002Fperformance-efficiency.md](pillars\u002Fperformance-efficiency.md)** — 9 checks: PERF5, PERF6, PERF8, PERF9, PERF11, PERF12, PERF13, PERF15, PERF1b\n- **[pillars\u002Fcost-optimization.md](pillars\u002Fcost-optimization.md)** — 5 checks: COST1, COST3, COST6, COST7, COST9\n- **[pillars\u002Fsustainability.md](pillars\u002Fsustainability.md)** — 2 checks: SUST1, SUST2\n\nRead each pillar file for the detailed evaluation logic.\n\n> Note: the Prism UI may surface *additional* exploratory checks beyond this\n> canonical catalog (e.g. `PERF1`, `PERF1c`, `PERF10`, `PERF16`, `COST4`, plus\n> `tabs\u002Fwa_v2\u002F` checks) from the legacy\u002Fnext-gen paths. Those are app extras; the\n> **38-check catalog above is the source of truth** for exports and scoring.\n\n### 4a. The `wa_checks\u002F` Plugin Registry (`wa_checks\u002Fregistry.py`)\n\nIn Prism, checks self-register with a decorator and are executed by `run_checks()`.\nThis is the authoritative implementation of the catalog.\n\n**Registration** — `@register_check(check_id, pillar, label, source=..., ...)`:\n\n```python\n@register_check(\"REL1a\", \"Reliability\", \"Backup retention period\",\n                source=\"infrastructure\", priority=10)\ndef check_backup_retention(ctx: CheckContext) -> list[dict]:\n    retention = ctx.cluster.get(\"BackupRetentionPeriod\", 1)\n    return [{\"pillar\": \"Reliability\", \"id\": \"REL1a\",\n             \"label\": f\"Backup retention period ({retention} days)\",\n             \"status\": \"pass\" if retention >= 7 else \"warn\" if retention >= 3 else \"fail\",\n             \"detail\": \"\"}]\n```\n\n**`CheckDefinition`** fields: `check_id`, `pillar`, `label`, `description`, `source`\n(`\"infrastructure\" | \"database\" | \"cloudwatch\"`), `func`, `per_instance`,\n`writer_only`, `reader_only`, `requires_analysis`, `priority`.\n\n**`CheckContext`** fields passed to every check: `cluster_id`, `region`, `cluster`\n(describe_db_clusters dict), `instances` (describe_db_instances list), `analysis_data`,\n`conn_str`, shared boto3 clients `docdb_client` \u002F `cw_client` \u002F `ec2_client`, and the\nper-instance fields `current_instance` and `is_writer`.\n\n**`run_checks(...)` execution model:**\n1. Determines writer instance IDs from `cluster[\"DBClusterMembers\"]` where\n   `IsClusterWriter` is true.\n2. Runs all **non-per-instance** checks first, pillar by pillar (in fixed pillar order),\n   sorted by `priority`. A check with `requires_analysis=True` and no `analysis_data`\n   emits an `info` row (\"requires Analyze\") instead of running.\n3. Then iterates each instance, setting `ctx.current_instance` \u002F `ctx.is_writer`, and\n   runs **per-instance** checks, honoring `writer_only` (e.g. REL9 MVCC) and\n   `reader_only` (e.g. COST9 idle readers).\n4. A check that raises is caught and recorded as a `warn` row rather than aborting the\n   run.\n\nReturns a flat list of result dicts: `{\"pillar\", \"id\", \"label\", \"status\", \"detail\"}`\nwith `status ∈ {pass, warn, fail, info}`.\n\n`tabs\u002Fwell_architected._run_wa_checks` calls `run_checks()` (plugin path), then appends\nthe database-level checks from `_run_db_checks(analysis_data)` (which contributes\n`PERF1b` plus app extras), then triggers AI recommendations (Section 4b). If the plugin\nimport fails, it falls back to a legacy inline path producing the same IDs.\n\n### 4b. Bedrock Recommendation Generation\n\nAfter checks run, `_generate_ai_recommendations(check_results, cluster_id, region,\nanalysis_data)` sends the failing\u002Fwarning checks to Bedrock using the system prompt in\n**`wa-advisor-prompt.md`** (loaded via `_load_wa_advisor_prompt()`). Models:\n`us.anthropic.claude-sonnet-4-20250514-v1:0` (primary) →\n`us.anthropic.claude-haiku-4-5-20251001-v1:0` (fallback). The prompt returns **JSON\nkeyed by pillar**, each entry `{check_id, action, why, impact, priority}` where\n`priority ∈ {Critical, High, Medium, Low}`. Only pillars with failing\u002Fwarning checks\nappear; the model must not invent checks not present in the input. Recommendations are\ngenerated asynchronously and stored in `_wa[\"ai_md\"]`.\n## 5. Reference Constants\n\n### CONN_LIMITS (instance type → max connections)\n```\ndb.t3.medium: 1000      db.t4g.medium: 1000\ndb.r5.large: 3400       db.r6g.large: 3400       db.r6gd.large: 3400       db.r8g.large: 3400\ndb.r5.xlarge: 7000      db.r6g.xlarge: 7000      db.r6gd.xlarge: 7000      db.r8g.xlarge: 7000\ndb.r5.2xlarge: 14200    db.r6g.2xlarge: 14200    db.r6gd.2xlarge: 14200    db.r8g.2xlarge: 14200\ndb.r5.4xlarge: 28400    db.r6g.4xlarge: 28400    db.r6gd.4xlarge: 28400    db.r8g.4xlarge: 28400\ndb.r5.8xlarge: 60000    db.r6g.8xlarge: 60000    db.r6gd.8xlarge: 60000    db.r8g.8xlarge: 60000\ndb.r5.12xlarge: 60000   db.r6g.12xlarge: 60000   db.r6gd.12xlarge: 60000   db.r8g.12xlarge: 60000\ndb.r5.16xlarge: 60000   db.r6g.16xlarge: 60000   db.r6gd.16xlarge: 60000   db.r8g.16xlarge: 60000\ndb.r5.24xlarge: 60000\n```\n\n### INSTANCE_RAM_GIB (instance type → RAM in GiB)\n```\ndb.t3.medium: 4         db.t4g.medium: 4\ndb.r5.large: 16         db.r6g.large: 16         db.r6gd.large: 16         db.r8g.large: 16\ndb.r5.xlarge: 32        db.r6g.xlarge: 32        db.r6gd.xlarge: 32        db.r8g.xlarge: 32\ndb.r5.2xlarge: 64       db.r6g.2xlarge: 64       db.r6gd.2xlarge: 64       db.r8g.2xlarge: 64\ndb.r5.4xlarge: 128      db.r6g.4xlarge: 128      db.r6gd.4xlarge: 128      db.r8g.4xlarge: 128\ndb.r5.8xlarge: 256      db.r6g.8xlarge: 256      db.r6gd.8xlarge: 256      db.r8g.8xlarge: 256\ndb.r5.12xlarge: 384     db.r6g.12xlarge: 384     db.r6gd.12xlarge: 384     db.r8g.12xlarge: 384\ndb.r5.16xlarge: 512     db.r6g.16xlarge: 512     db.r6gd.16xlarge: 512     db.r8g.16xlarge: 512\ndb.r5.24xlarge: 768\n```\n\n### GRAVITON_FAMILIES\n```\nr6g, r7g, r8g, t4g, r6gd\n```\n\n### Other Constants\n- MVCC total capacity: 1,400,000,000 IDs\n- Engine version classification: deprecated (3.x, 4.x), current (5.0), latest (8.0)\n- CloudWatch lookback: 7 days for all metrics, 13 days for failover events\n- CloudWatch period: 3600 seconds (1 hour) for all metrics except DatabaseCursorsTimedOut (86400 = daily)\n\n## 6. Universal WAR Export Schema\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"metadata\": {\n    \"service\": \"documentdb\",\n    \"cluster_id\": \"\",\n    \"account_id\": \"\",\n    \"region\": \"\",\n    \"engine_version\": \"\",\n    \"timestamp\": \"\",\n    \"skill_name\": \"documentdb-well-architected-review\",\n    \"checks_evaluated\": 0,\n    \"instances_reviewed\": 0\n  },\n  \"scoring\": {\n    \"overall_health_score\": 0,\n    \"by_status\": {\"pass\": 0, \"warn\": 0, \"fail\": 0, \"info\": 0},\n    \"by_pillar\": {}\n  },\n  \"findings\": [\n    {\n      \"finding_id\": \"\u003Cunique UUID>\",\n      \"check_id\": \"REL1a\",\n      \"pillar\": \"reliability\",\n      \"check_name\": \"Backup retention period\",\n      \"status\": \"pass|warn|fail|info\",\n      \"severity\": \"CRITICAL|HIGH|MEDIUM|LOW\",\n      \"detail\": \"Human-readable finding with actual values\",\n      \"instance_id\": null,\n      \"remediation_cli\": \"aws docdb modify-db-cluster ...\",\n      \"recommendations\": []\n    }\n  ]\n}\n```\n\nNote: check_id uses the SAME IDs as the Dash app (REL1a, SEC2, PERF5, etc.). The pillar field uses lowercase with underscores (reliability, security, operational_excellence, performance_efficiency, cost_optimization, sustainability).\n\n## 7. Dashboard Specification\n\n- Self-contained HTML file with embedded CSS (no external dependencies except CDN-loaded Plotly)\n- Dark theme with AWS-inspired color palette\n- Header: cluster_id, region, engine version, timestamp, health score (large, colored)\n- 6-pillar grid (2 columns x 3 rows)\n- Pillar colors: Reliability=#d45b07, Security=#dd344c, Operational Excellence=#5e6b7a, Performance Efficiency=#8c4fff, Cost Optimization=#067f68, Sustainability=#0972d3\n- Each pillar panel: header with icon + name + status counts, body grouped by status (fail first with red left border, warn with orange, pass with green)\n- Each finding row: status symbol + check_id (monospace) + label + detail (muted)\n- Responsive layout (collapses to single column on mobile)\n\n## 8. Priority Criteria (shared Prism severity schema)\n\nThese four levels are used consistently across all Prism skills. The Bedrock\nrecommendation output (Section 4b) uses these exact `priority` values.\n\n- **Critical**: Data loss risk, security breach risk, cluster unavailability (e.g. deletion protection off, encryption disabled, single instance with no failover, MVCC IDs \u003C25%)\n- **High**: Significant performance degradation or cost waste actively occurring (e.g. buffer cache \u003C95%, no CloudWatch alarms, swap usage, TLS disabled)\n- **Medium**: Best practice gap with moderate risk (e.g. missing Secrets Manager, non-Graviton instances, no profiler logging, oversized instances)\n- **Low**: Optimization opportunity with low urgency (e.g. compression not enabled, cost allocation tags missing, engine upgrade available, storage type informational)\n\nSeparately, each check **row** carries a `status` of `pass | warn | fail | info`. The\nhealth score (Section 3, Step 10) excludes `info` rows from the denominator.\n\n## 9. Lessons Learned \u002F Anti-Patterns\n\n- Always check engine version before recommending ZSTD compression (8.0+ only; use LZ4 for 5.0)\n- Connection limit checks must match the EXACT instance type (db.r6g.large ≠ db.r6g.xlarge)\n- BufferCacheHitRatio below 99% does NOT automatically mean the instance is undersized — check if the working set genuinely exceeds available cache\n- NEVER recommend dropping the _id index\n- Per-instance checks MUST identify writer vs reader roles. In the registry this is the `writer_only` \u002F `reader_only` flags on `@register_check`, resolved from `DBClusterMembers.IsClusterWriter` (REL9\u002FMVCC is `writer_only`, COST9\u002Fidle is `reader_only`)\n- Use EXACT check IDs from the code — never invent new numbering (REL1a not REL-1, PERF1b not PERF-1b)\n- Silent checks (REL7, REL8) should only produce findings when problems are detected — do not emit a \"pass\" row\n- FreeableMemory is compared against INSTANCE_RAM_GIB lookup — not a fixed threshold\n- The health score formula excludes \"info\" status findings from the denominator\n- `requires_analysis=True` checks (COST3, PERF8, PERF9, PERF15, SUST2) emit an `info` \"requires Analyze\" row when no `analysis_data` is present — they do not fail\n- PERF1b is not a registry check — it comes from the database-level path; keep it in the catalog but don't expect a `@register_check(\"PERF1b\", ...)` decorator\n\n## 10. Relation to Prism Dash App\n\nThis skill is executed by the Prism Dash app through the `wa_checks\u002F` plugin\nregistry (Section 4a), which is the authoritative implementation of the check catalog.\nThe app adds capabilities on top of the raw checks:\n\n- **Live database-level analysis** (index health, compression, bloat) feeds\n  `analysis_data`, enabling `requires_analysis` checks (COST3, PERF8, PERF9, PERF15,\n  SUST2) and the `PERF1b` redundant-index check.\n- **AI recommendations** via Amazon Bedrock and `wa-advisor-prompt.md` (Section 4b).\n- **Historical trend tracking** via `agent_memory` (`wa_results.json` + `.v1`\u002F`.v2`\n  versions, compared by `load_wa_results_previous`).\n- **PDF export** via `wa_pdf.generate_wa_pdf(results, ai_data, cluster_id, region)` —\n  a cover page with health score, per-pillar sections grouped by status, and an AI\n  recommendations section.\n- Optional **Universal WAR Export** (Section 6) for cross-tool interoperability.\n\nThe autonomous agent (top-level `prism-dash` skill) runs this review as its\n`well_architected` module. Both the standalone skill and the Dash app share the same\ncheck IDs (REL1a, SEC1b, PERF5, …) so findings are traceable across execution modes.\n\n\u003C!-- Check catalog must stay in sync with: wa_checks\u002F*.py implementations -->\n\u003C!-- IDs are stable — use exactly what @register_check defines; PERF1b comes from tabs\u002Fwell_architected._run_db_checks -->\n\nConsult the `references\u002F` directory for detailed DocumentDB-specific knowledge when generating recommendations. (These are the same reference docs used by the `documentdb-advisor` skill; do not duplicate their content here.)\n\n## 11. Required IAM Permissions\n\n```json\n{\n  \"Effect\": \"Allow\",\n  \"Action\": [\n    \"rds:DescribeDBClusters\",\n    \"rds:DescribeDBInstances\",\n    \"rds:DescribeDBClusterParameters\",\n    \"rds:DescribeDBSubnetGroups\",\n    \"rds:DescribeEvents\",\n    \"rds:ListTagsForResource\",\n    \"ec2:DescribeSecurityGroups\",\n    \"cloudwatch:GetMetricStatistics\",\n    \"cloudwatch:DescribeAlarms\",\n    \"secretsmanager:ListSecrets\",\n    \"backup:ListBackupPlans\",\n    \"backup:ListBackupSelections\",\n    \"backup:GetBackupSelection\",\n    \"backup:GetBackupPlan\"\n  ],\n  \"Resource\": \"*\"\n}\n```\n\nNote: DocumentDB uses the `rds` namespace for API calls (not a separate `docdb` namespace in IAM).\n",{"data":41,"body":61},{"name":4,"display_name":42,"description":6,"icon":43,"trigger":44,"inputs":45,"depends-on":55,"tools":57},"DocumentDB Well-Architected Review","🏗️","I need to do a DocumentDB well-architected review",[46,51],{"name":47,"description":48,"type":49,"required":50},"cluster_identifier","The DocumentDB cluster identifier to review","string",true,{"name":52,"description":53,"type":49,"required":50,"default":54},"aws_region","AWS region where the cluster resides","us-east-1",[56],"aws-api",[58,59,60],"call_aws","run_python","file_write",{"type":62,"children":63},"root",[64,73,87,116,123,163,169,174,258,264,270,289,295,313,319,337,343,366,372,451,457,475,481,499,505,523,529,542,548,566,572,591,597,630,636,654,660,744,757,839,844,912,933,946,964,1048,1150,1247,1261,1381,1401,1434,1440,1517,1523,1529,1539,1545,1554,1560,1569,1575,1598,1604,2601,2606,2612,2655,2661,2673,2716,2750,2756,2882,2888,2900,3029,3049,3069,3075,3475,3496],{"type":65,"tag":66,"props":67,"children":69},"element","h2",{"id":68},"_1-overview",[70],{"type":71,"value":72},"text","1. Overview",{"type":65,"tag":74,"props":75,"children":76},"p",{},[77,79,85],{"type":71,"value":78},"Performs a comprehensive Well-Architected review of an Amazon DocumentDB cluster across 6 AWS Well-Architected pillars: Reliability, Security, Operational Excellence, Performance Efficiency, Cost Optimization, and Sustainability. Evaluates ",{"type":65,"tag":80,"props":81,"children":82},"strong",{},[83],{"type":71,"value":84},"38 automated checks",{"type":71,"value":86}," against live cluster configuration, CloudWatch metrics, and security posture. Produces a health score, prioritized findings with remediation CLI commands, Bedrock-generated pillar recommendations, a Universal WAR Export JSON file, an interactive HTML dashboard, and (inside Prism) a PDF export.",{"type":65,"tag":74,"props":88,"children":89},{},[90,92,97,99,106,108,114],{"type":71,"value":91},"This is a ",{"type":65,"tag":80,"props":93,"children":94},{},[95],{"type":71,"value":96},"sub-skill",{"type":71,"value":98}," of the Prism platform (see the top-level ",{"type":65,"tag":100,"props":101,"children":103},"code",{"className":102},[],[104],{"type":71,"value":105},"prism-dash",{"type":71,"value":107},"\nskill). It owns cluster assessment and pillar scoring. Conversational advice and\nper-query tuning are owned by the ",{"type":65,"tag":100,"props":109,"children":111},{"className":110},[],[112],{"type":71,"value":113},"documentdb-advisor",{"type":71,"value":115}," skill — defer chat\u002Fadvisory\nquestions there.",{"type":65,"tag":117,"props":118,"children":120},"h3",{"id":119},"two-execution-modes",[121],{"type":71,"value":122},"Two execution modes",{"type":65,"tag":124,"props":125,"children":126},"ol",{},[127,146],{"type":65,"tag":128,"props":129,"children":130},"li",{},[131,136,138,144],{"type":65,"tag":80,"props":132,"children":133},{},[134],{"type":71,"value":135},"Prism Dash plugin execution",{"type":71,"value":137}," — the live app runs the checks via the\n",{"type":65,"tag":100,"props":139,"children":141},{"className":140},[],[142],{"type":71,"value":143},"wa_checks\u002F",{"type":71,"value":145}," plugin registry (Section 4a) and renders results in the UI, with\nBedrock recommendations and PDF export. This is the primary mode.",{"type":65,"tag":128,"props":147,"children":148},{},[149,154,156,161],{"type":65,"tag":80,"props":150,"children":151},{},[152],{"type":71,"value":153},"Standalone manual execution",{"type":71,"value":155}," — an agent with AWS CLI access can perform the\nreview directly using the 13-step workflow in Section 3 and the check catalog in\nSection 4. Both modes share the ",{"type":65,"tag":80,"props":157,"children":158},{},[159],{"type":71,"value":160},"same check IDs",{"type":71,"value":162}," so findings are traceable.",{"type":65,"tag":66,"props":164,"children":166},{"id":165},"_2-documentdb-engine-context",[167],{"type":71,"value":168},"2. DocumentDB Engine Context",{"type":65,"tag":74,"props":170,"children":171},{},[172],{"type":71,"value":173},"The reviewing agent MUST know these facts:",{"type":65,"tag":175,"props":176,"children":177},"ul",{},[178,183,188,193,198,203,208,213,218,223,228,233,238,243,248,253],{"type":65,"tag":128,"props":179,"children":180},{},[181],{"type":71,"value":182},"DocumentDB is NOT MongoDB — API-compatible but purpose-built storage engine with B-tree indexes",{"type":65,"tag":128,"props":184,"children":185},{},[186],{"type":71,"value":187},"Only 2\u002F3 of instance RAM is available for buffer cache (1\u002F3 reserved by DocumentDB)",{"type":65,"tag":128,"props":189,"children":190},{},[191],{"type":71,"value":192},"Connection limits by instance type: db.t3\u002Ft4g.medium=1000, db.r5\u002Fr6g.large=3400, db.r5\u002Fr6g.xlarge=7000, db.r5\u002Fr6g.2xlarge=14200, db.r5\u002Fr6g.4xlarge=28400, db.r5\u002Fr6g.8xlarge+=60000",{"type":65,"tag":128,"props":194,"children":195},{},[196],{"type":71,"value":197},"Compression: LZ4 available all versions; ZSTD available 8.0+ only; NOT enabled by default on 5.0 (must set default_compression parameter)",{"type":65,"tag":128,"props":199,"children":200},{},[201],{"type":71,"value":202},"IAM authentication: available on 5.0+ instance-based clusters only; primary user always uses password auth",{"type":65,"tag":128,"props":204,"children":205},{},[206],{"type":71,"value":207},"Query Planner: v1 (3.6\u002F4.0), v2 (5.0 — up to 10x improvement), v3 (8.0)",{"type":65,"tag":128,"props":209,"children":210},{},[211],{"type":71,"value":212},"retryWrites must be false in connection strings",{"type":65,"tag":128,"props":214,"children":215},{},[216],{"type":71,"value":217},"I\u002FO-Optimized storage: no per-operation I\u002FO charges; beneficial when I\u002FO cost exceeds ~25% of total cluster bill",{"type":65,"tag":128,"props":219,"children":220},{},[221],{"type":71,"value":222},"Graviton instances (r6g, r7g, r8g, t4g, r6gd): better price-performance; r8g is latest generation (Graviton4, engine 5.0\u002F8.0 only)",{"type":65,"tag":128,"props":224,"children":225},{},[226],{"type":71,"value":227},"6-way replication across 3 AZs regardless of instance count",{"type":65,"tag":128,"props":229,"children":230},{},[231],{"type":71,"value":232},"Automatic failover requires minimum 2 instances; typical RTO ~30 seconds with multi-AZ",{"type":65,"tag":128,"props":234,"children":235},{},[236],{"type":71,"value":237},"Global clusters: cross-region RPO less than 1 second, RTO ~1 minute",{"type":65,"tag":128,"props":239,"children":240},{},[241],{"type":71,"value":242},"Backup: continuous to S3, point-in-time recovery to any second within retention window",{"type":65,"tag":128,"props":244,"children":245},{},[246],{"type":71,"value":247},"Index best practices: \u003C=5 indexes per collection, compound indexes \u003C=3 fields, follow ESR (Equality-Sort-Range) rule",{"type":65,"tag":128,"props":249,"children":250},{},[251],{"type":71,"value":252},"Long-running queries (>30 min) block MVCC garbage collection causing cascading bloat and CPU pressure",{"type":65,"tag":128,"props":254,"children":255},{},[256],{"type":71,"value":257},"MVCC total capacity: 1.4 billion IDs",{"type":65,"tag":66,"props":259,"children":261},{"id":260},"_3-workflow",[262],{"type":71,"value":263},"3. Workflow",{"type":65,"tag":117,"props":265,"children":267},{"id":266},"step-1-discover-cluster-configuration",[268],{"type":71,"value":269},"Step 1: Discover cluster configuration",{"type":65,"tag":175,"props":271,"children":272},{},[273,284],{"type":65,"tag":128,"props":274,"children":275},{},[276,278],{"type":71,"value":277},"call_aws: ",{"type":65,"tag":100,"props":279,"children":281},{"className":280},[],[282],{"type":71,"value":283},"aws docdb describe-db-clusters --db-cluster-identifier {cluster_identifier} --region {aws_region}",{"type":65,"tag":128,"props":285,"children":286},{},[287],{"type":71,"value":288},"Extract: EngineVersion, BackupRetentionPeriod, DeletionProtection, StorageEncrypted, StorageType, DBClusterParameterGroup, DBSubnetGroup, VpcSecurityGroups, EnabledCloudwatchLogsExports, DBClusterMembers, DBClusterArn, Endpoint",{"type":65,"tag":117,"props":290,"children":292},{"id":291},"step-2-fetch-instance-details",[293],{"type":71,"value":294},"Step 2: Fetch instance details",{"type":65,"tag":175,"props":296,"children":297},{},[298,308],{"type":65,"tag":128,"props":299,"children":300},{},[301,302],{"type":71,"value":277},{"type":65,"tag":100,"props":303,"children":305},{"className":304},[],[306],{"type":71,"value":307},"aws docdb describe-db-instances --filters Name=db-cluster-id,Values={cluster_identifier} --region {aws_region}",{"type":65,"tag":128,"props":309,"children":310},{},[311],{"type":71,"value":312},"Extract: DBInstanceIdentifier, DBInstanceClass, AvailabilityZone, IsClusterWriter (from DBClusterMembers)",{"type":65,"tag":117,"props":314,"children":316},{"id":315},"step-3-fetch-parameter-group-settings",[317],{"type":71,"value":318},"Step 3: Fetch parameter group settings",{"type":65,"tag":175,"props":320,"children":321},{},[322,332],{"type":65,"tag":128,"props":323,"children":324},{},[325,326],{"type":71,"value":277},{"type":65,"tag":100,"props":327,"children":329},{"className":328},[],[330],{"type":71,"value":331},"aws docdb describe-db-cluster-parameters --db-cluster-parameter-group-name {parameter_group_name} --region {aws_region}",{"type":65,"tag":128,"props":333,"children":334},{},[335],{"type":71,"value":336},"Extract: tls (enabled\u002Fdisabled), tls_version",{"type":65,"tag":117,"props":338,"children":340},{"id":339},"step-4-fetch-security-groups",[341],{"type":71,"value":342},"Step 4: Fetch security groups",{"type":65,"tag":175,"props":344,"children":345},{},[346,351,361],{"type":65,"tag":128,"props":347,"children":348},{},[349],{"type":71,"value":350},"For each VpcSecurityGroupId from Step 1:",{"type":65,"tag":128,"props":352,"children":353},{},[354,355],{"type":71,"value":277},{"type":65,"tag":100,"props":356,"children":358},{"className":357},[],[359],{"type":71,"value":360},"aws ec2 describe-security-groups --group-ids {sg_id} --region {aws_region}",{"type":65,"tag":128,"props":362,"children":363},{},[364],{"type":71,"value":365},"Check: IpPermissions for 0.0.0.0\u002F0 or ::\u002F0 CidrIp rules",{"type":65,"tag":117,"props":367,"children":369},{"id":368},"step-5-fetch-cloudwatch-metrics-7-day-window-1-hour-period",[370],{"type":71,"value":371},"Step 5: Fetch CloudWatch metrics (7-day window, 1-hour period)",{"type":65,"tag":175,"props":373,"children":374},{},[375,441],{"type":65,"tag":128,"props":376,"children":377},{},[378,380,386,388],{"type":71,"value":379},"For each instance from Step 2, fetch these metrics with Dimensions=",{"type":65,"tag":381,"props":382,"children":383},"span",{},[384],{"type":71,"value":385},"{Name=DBInstanceIdentifier, Value={instance_id}}",{"type":71,"value":387},":\n",{"type":65,"tag":175,"props":389,"children":390},{},[391,396,401,406,411,416,421,426,431,436],{"type":65,"tag":128,"props":392,"children":393},{},[394],{"type":71,"value":395},"CPUUtilization (Statistics: Average)",{"type":65,"tag":128,"props":397,"children":398},{},[399],{"type":71,"value":400},"FreeableMemory (Statistics: Minimum)",{"type":65,"tag":128,"props":402,"children":403},{},[404],{"type":71,"value":405},"BufferCacheHitRatio (Statistics: Average)",{"type":65,"tag":128,"props":407,"children":408},{},[409],{"type":71,"value":410},"DatabaseConnections (Statistics: Maximum)",{"type":65,"tag":128,"props":412,"children":413},{},[414],{"type":71,"value":415},"SwapUsage (Statistics: Maximum)",{"type":65,"tag":128,"props":417,"children":418},{},[419],{"type":71,"value":420},"DiskQueueDepth (Statistics: Average)",{"type":65,"tag":128,"props":422,"children":423},{},[424],{"type":71,"value":425},"IndexBufferCacheHitRatio (Statistics: Average)",{"type":65,"tag":128,"props":427,"children":428},{},[429],{"type":71,"value":430},"DatabaseCursorsTimedOut (Statistics: Sum, Period: 86400)",{"type":65,"tag":128,"props":432,"children":433},{},[434],{"type":71,"value":435},"AvailableMVCCIds (Statistics: Minimum) — writer instance only",{"type":65,"tag":128,"props":437,"children":438},{},[439],{"type":71,"value":440},"ReadIOPS (Statistics: Average) — reader instances only",{"type":65,"tag":128,"props":442,"children":443},{},[444,446],{"type":71,"value":445},"For cluster-level: DBClusterReplicaLagMaximum with Dimensions=",{"type":65,"tag":381,"props":447,"children":448},{},[449],{"type":71,"value":450},"{Name=DBClusterIdentifier, Value={cluster_identifier}}",{"type":65,"tag":117,"props":452,"children":454},{"id":453},"step-6-fetch-events-last-13-days",[455],{"type":71,"value":456},"Step 6: Fetch events (last 13 days)",{"type":65,"tag":175,"props":458,"children":459},{},[460,470],{"type":65,"tag":128,"props":461,"children":462},{},[463,464],{"type":71,"value":277},{"type":65,"tag":100,"props":465,"children":467},{"className":466},[],[468],{"type":71,"value":469},"aws docdb describe-events --source-identifier {cluster_identifier} --source-type db-cluster --start-time {13_days_ago} --region {aws_region}",{"type":65,"tag":128,"props":471,"children":472},{},[473],{"type":71,"value":474},"Filter for: \"failover\" in Message or EventCategories",{"type":65,"tag":117,"props":476,"children":478},{"id":477},"step-7-check-secrets-manager",[479],{"type":71,"value":480},"Step 7: Check Secrets Manager",{"type":65,"tag":175,"props":482,"children":483},{},[484,494],{"type":65,"tag":128,"props":485,"children":486},{},[487,488],{"type":71,"value":277},{"type":65,"tag":100,"props":489,"children":491},{"className":490},[],[492],{"type":71,"value":493},"aws secretsmanager list-secrets --region {aws_region}",{"type":65,"tag":128,"props":495,"children":496},{},[497],{"type":71,"value":498},"Search: cluster_identifier or cluster endpoint in secret Name or Description",{"type":65,"tag":117,"props":500,"children":502},{"id":501},"step-8-check-cloudwatch-alarms",[503],{"type":71,"value":504},"Step 8: Check CloudWatch alarms",{"type":65,"tag":175,"props":506,"children":507},{},[508,518],{"type":65,"tag":128,"props":509,"children":510},{},[511,512],{"type":71,"value":277},{"type":65,"tag":100,"props":513,"children":515},{"className":514},[],[516],{"type":71,"value":517},"aws cloudwatch describe-alarms --alarm-name-prefix {cluster_identifier} --region {aws_region}",{"type":65,"tag":128,"props":519,"children":520},{},[521],{"type":71,"value":522},"Count: MetricAlarms",{"type":65,"tag":117,"props":524,"children":526},{"id":525},"step-9-evaluate-all-checks-against-collected-data",[527],{"type":71,"value":528},"Step 9: Evaluate all checks against collected data",{"type":65,"tag":175,"props":530,"children":531},{},[532,537],{"type":65,"tag":128,"props":533,"children":534},{},[535],{"type":71,"value":536},"Apply each check from the Check Catalog (Section 4) against the data collected in Steps 1-8",{"type":65,"tag":128,"props":538,"children":539},{},[540],{"type":71,"value":541},"For per-instance checks: iterate over each instance, identify writer vs reader role",{"type":65,"tag":117,"props":543,"children":545},{"id":544},"step-10-score-results",[546],{"type":71,"value":547},"Step 10: Score results",{"type":65,"tag":175,"props":549,"children":550},{},[551,556,561],{"type":65,"tag":128,"props":552,"children":553},{},[554],{"type":71,"value":555},"health_score = pass_count \u002F (pass_count + warn_count + fail_count) * 100",{"type":65,"tag":128,"props":557,"children":558},{},[559],{"type":71,"value":560},"Exclude \"info\" status from scoring",{"type":65,"tag":128,"props":562,"children":563},{},[564],{"type":71,"value":565},"Color: >=80% green, 60-79% warning, \u003C60% red",{"type":65,"tag":117,"props":567,"children":569},{"id":568},"step-11-generate-universal-war-export-json",[570],{"type":71,"value":571},"Step 11: Generate Universal WAR Export JSON",{"type":65,"tag":175,"props":573,"children":574},{},[575,580],{"type":65,"tag":128,"props":576,"children":577},{},[578],{"type":71,"value":579},"Use the schema defined in Section 6",{"type":65,"tag":128,"props":581,"children":582},{},[583,585],{"type":71,"value":584},"Write to file: ",{"type":65,"tag":100,"props":586,"children":588},{"className":587},[],[589],{"type":71,"value":590},"war_export_{cluster_identifier}_{timestamp}.json",{"type":65,"tag":117,"props":592,"children":594},{"id":593},"step-12-generate-interactive-html-dashboard",[595],{"type":71,"value":596},"Step 12: Generate interactive HTML dashboard",{"type":65,"tag":175,"props":598,"children":599},{},[600,605,610,615,620],{"type":65,"tag":128,"props":601,"children":602},{},[603],{"type":71,"value":604},"Self-contained HTML with embedded CSS",{"type":65,"tag":128,"props":606,"children":607},{},[608],{"type":71,"value":609},"6-pillar grid layout with pillar colors",{"type":65,"tag":128,"props":611,"children":612},{},[613],{"type":71,"value":614},"Health score header bar",{"type":65,"tag":128,"props":616,"children":617},{},[618],{"type":71,"value":619},"Per-pillar panels grouped by status (fail first, then warn, then pass)",{"type":65,"tag":128,"props":621,"children":622},{},[623,624],{"type":71,"value":584},{"type":65,"tag":100,"props":625,"children":627},{"className":626},[],[628],{"type":71,"value":629},"war_dashboard_{cluster_identifier}_{timestamp}.html",{"type":65,"tag":117,"props":631,"children":633},{"id":632},"step-13-present-findings-summary",[634],{"type":71,"value":635},"Step 13: Present findings summary",{"type":65,"tag":175,"props":637,"children":638},{},[639,644,649],{"type":65,"tag":128,"props":640,"children":641},{},[642],{"type":71,"value":643},"Report health score",{"type":65,"tag":128,"props":645,"children":646},{},[647],{"type":71,"value":648},"List all CRITICAL and HIGH severity findings",{"type":65,"tag":128,"props":650,"children":651},{},[652],{"type":71,"value":653},"Provide top 3 remediation actions",{"type":65,"tag":66,"props":655,"children":657},{"id":656},"_4-check-catalog",[658],{"type":71,"value":659},"4. Check Catalog",{"type":65,"tag":74,"props":661,"children":662},{},[663,668,670,682,684,690,692,697,699,705,707,712,714,720,722,728,730,735,736,742],{"type":65,"tag":80,"props":664,"children":665},{},[666],{"type":71,"value":667},"38 checks across 6 pillars.",{"type":71,"value":669}," Of these, ",{"type":65,"tag":80,"props":671,"children":672},{},[673,675,680],{"type":71,"value":674},"37 are registered in the ",{"type":65,"tag":100,"props":676,"children":678},{"className":677},[],[679],{"type":71,"value":143},{"type":71,"value":681},"\nplugin registry",{"type":71,"value":683}," via the ",{"type":65,"tag":100,"props":685,"children":687},{"className":686},[],[688],{"type":71,"value":689},"@register_check",{"type":71,"value":691}," decorator; ",{"type":65,"tag":80,"props":693,"children":694},{},[695],{"type":71,"value":696},"PERF1b",{"type":71,"value":698}," is contributed by\nthe Prism database-level path (",{"type":65,"tag":100,"props":700,"children":702},{"className":701},[],[703],{"type":71,"value":704},"tabs\u002Fwell_architected._run_db_checks",{"type":71,"value":706},") and merged\ninto the same result set. All check IDs are ",{"type":65,"tag":80,"props":708,"children":709},{},[710],{"type":71,"value":711},"stable",{"type":71,"value":713}," — use exactly what the code\ndefines (e.g. ",{"type":65,"tag":100,"props":715,"children":717},{"className":716},[],[718],{"type":71,"value":719},"REL1a",{"type":71,"value":721}," not ",{"type":65,"tag":100,"props":723,"children":725},{"className":724},[],[726],{"type":71,"value":727},"REL-1",{"type":71,"value":729},", ",{"type":65,"tag":100,"props":731,"children":733},{"className":732},[],[734],{"type":71,"value":696},{"type":71,"value":721},{"type":65,"tag":100,"props":737,"children":739},{"className":738},[],[740],{"type":71,"value":741},"PERF-1b",{"type":71,"value":743},").",{"type":65,"tag":74,"props":745,"children":746},{},[747,749,755],{"type":71,"value":748},"The complete catalog is broken down by pillar in the ",{"type":65,"tag":100,"props":750,"children":752},{"className":751},[],[753],{"type":71,"value":754},"pillars\u002F",{"type":71,"value":756}," directory. Each file\ncontains the full check table with IDs, thresholds, API calls, and remediation commands.",{"type":65,"tag":175,"props":758,"children":759},{},[760,774,787,800,813,826],{"type":65,"tag":128,"props":761,"children":762},{},[763,772],{"type":65,"tag":80,"props":764,"children":765},{},[766],{"type":65,"tag":767,"props":768,"children":770},"a",{"href":769},"pillars\u002Freliability.md",[771],{"type":71,"value":769},{"type":71,"value":773}," — 9 checks: REL1a, REL1b, REL1c, REL5a, REL5b, REL5c, REL7, REL8, REL9",{"type":65,"tag":128,"props":775,"children":776},{},[777,785],{"type":65,"tag":80,"props":778,"children":779},{},[780],{"type":65,"tag":767,"props":781,"children":783},{"href":782},"pillars\u002Fsecurity.md",[784],{"type":71,"value":782},{"type":71,"value":786}," — 7 checks: SEC1a, SEC1b, SEC2, SEC3, SEC5, SEC6, SEC8",{"type":65,"tag":128,"props":788,"children":789},{},[790,798],{"type":65,"tag":80,"props":791,"children":792},{},[793],{"type":65,"tag":767,"props":794,"children":796},{"href":795},"pillars\u002Foperational-excellence.md",[797],{"type":71,"value":795},{"type":71,"value":799}," — 6 checks: OPS2, OPS5a, OPS5b, OPS5c, OPS7, OPS8",{"type":65,"tag":128,"props":801,"children":802},{},[803,811],{"type":65,"tag":80,"props":804,"children":805},{},[806],{"type":65,"tag":767,"props":807,"children":809},{"href":808},"pillars\u002Fperformance-efficiency.md",[810],{"type":71,"value":808},{"type":71,"value":812}," — 9 checks: PERF5, PERF6, PERF8, PERF9, PERF11, PERF12, PERF13, PERF15, PERF1b",{"type":65,"tag":128,"props":814,"children":815},{},[816,824],{"type":65,"tag":80,"props":817,"children":818},{},[819],{"type":65,"tag":767,"props":820,"children":822},{"href":821},"pillars\u002Fcost-optimization.md",[823],{"type":71,"value":821},{"type":71,"value":825}," — 5 checks: COST1, COST3, COST6, COST7, COST9",{"type":65,"tag":128,"props":827,"children":828},{},[829,837],{"type":65,"tag":80,"props":830,"children":831},{},[832],{"type":65,"tag":767,"props":833,"children":835},{"href":834},"pillars\u002Fsustainability.md",[836],{"type":71,"value":834},{"type":71,"value":838}," — 2 checks: SUST1, SUST2",{"type":65,"tag":74,"props":840,"children":841},{},[842],{"type":71,"value":843},"Read each pillar file for the detailed evaluation logic.",{"type":65,"tag":845,"props":846,"children":847},"blockquote",{},[848],{"type":65,"tag":74,"props":849,"children":850},{},[851,853,859,861,867,868,874,875,881,882,888,889,895,897,903,905,910],{"type":71,"value":852},"Note: the Prism UI may surface ",{"type":65,"tag":854,"props":855,"children":856},"em",{},[857],{"type":71,"value":858},"additional",{"type":71,"value":860}," exploratory checks beyond this\ncanonical catalog (e.g. ",{"type":65,"tag":100,"props":862,"children":864},{"className":863},[],[865],{"type":71,"value":866},"PERF1",{"type":71,"value":729},{"type":65,"tag":100,"props":869,"children":871},{"className":870},[],[872],{"type":71,"value":873},"PERF1c",{"type":71,"value":729},{"type":65,"tag":100,"props":876,"children":878},{"className":877},[],[879],{"type":71,"value":880},"PERF10",{"type":71,"value":729},{"type":65,"tag":100,"props":883,"children":885},{"className":884},[],[886],{"type":71,"value":887},"PERF16",{"type":71,"value":729},{"type":65,"tag":100,"props":890,"children":892},{"className":891},[],[893],{"type":71,"value":894},"COST4",{"type":71,"value":896},", plus\n",{"type":65,"tag":100,"props":898,"children":900},{"className":899},[],[901],{"type":71,"value":902},"tabs\u002Fwa_v2\u002F",{"type":71,"value":904}," checks) from the legacy\u002Fnext-gen paths. Those are app extras; the\n",{"type":65,"tag":80,"props":906,"children":907},{},[908],{"type":71,"value":909},"38-check catalog above is the source of truth",{"type":71,"value":911}," for exports and scoring.",{"type":65,"tag":117,"props":913,"children":915},{"id":914},"_4a-the-wa_checks-plugin-registry-wa_checksregistrypy",[916,918,923,925,931],{"type":71,"value":917},"4a. The ",{"type":65,"tag":100,"props":919,"children":921},{"className":920},[],[922],{"type":71,"value":143},{"type":71,"value":924}," Plugin Registry (",{"type":65,"tag":100,"props":926,"children":928},{"className":927},[],[929],{"type":71,"value":930},"wa_checks\u002Fregistry.py",{"type":71,"value":932},")",{"type":65,"tag":74,"props":934,"children":935},{},[936,938,944],{"type":71,"value":937},"In Prism, checks self-register with a decorator and are executed by ",{"type":65,"tag":100,"props":939,"children":941},{"className":940},[],[942],{"type":71,"value":943},"run_checks()",{"type":71,"value":945},".\nThis is the authoritative implementation of the catalog.",{"type":65,"tag":74,"props":947,"children":948},{},[949,954,956,962],{"type":65,"tag":80,"props":950,"children":951},{},[952],{"type":71,"value":953},"Registration",{"type":71,"value":955}," — ",{"type":65,"tag":100,"props":957,"children":959},{"className":958},[],[960],{"type":71,"value":961},"@register_check(check_id, pillar, label, source=..., ...)",{"type":71,"value":963},":",{"type":65,"tag":965,"props":966,"children":971},"pre",{"className":967,"code":968,"language":969,"meta":970,"style":970},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@register_check(\"REL1a\", \"Reliability\", \"Backup retention period\",\n                source=\"infrastructure\", priority=10)\ndef check_backup_retention(ctx: CheckContext) -> list[dict]:\n    retention = ctx.cluster.get(\"BackupRetentionPeriod\", 1)\n    return [{\"pillar\": \"Reliability\", \"id\": \"REL1a\",\n             \"label\": f\"Backup retention period ({retention} days)\",\n             \"status\": \"pass\" if retention >= 7 else \"warn\" if retention >= 3 else \"fail\",\n             \"detail\": \"\"}]\n","python","",[972],{"type":65,"tag":100,"props":973,"children":974},{"__ignoreMap":970},[975,985,994,1003,1012,1021,1030,1039],{"type":65,"tag":381,"props":976,"children":979},{"class":977,"line":978},"line",1,[980],{"type":65,"tag":381,"props":981,"children":982},{},[983],{"type":71,"value":984},"@register_check(\"REL1a\", \"Reliability\", \"Backup retention period\",\n",{"type":65,"tag":381,"props":986,"children":988},{"class":977,"line":987},2,[989],{"type":65,"tag":381,"props":990,"children":991},{},[992],{"type":71,"value":993},"                source=\"infrastructure\", priority=10)\n",{"type":65,"tag":381,"props":995,"children":997},{"class":977,"line":996},3,[998],{"type":65,"tag":381,"props":999,"children":1000},{},[1001],{"type":71,"value":1002},"def check_backup_retention(ctx: CheckContext) -> list[dict]:\n",{"type":65,"tag":381,"props":1004,"children":1006},{"class":977,"line":1005},4,[1007],{"type":65,"tag":381,"props":1008,"children":1009},{},[1010],{"type":71,"value":1011},"    retention = ctx.cluster.get(\"BackupRetentionPeriod\", 1)\n",{"type":65,"tag":381,"props":1013,"children":1015},{"class":977,"line":1014},5,[1016],{"type":65,"tag":381,"props":1017,"children":1018},{},[1019],{"type":71,"value":1020},"    return [{\"pillar\": \"Reliability\", \"id\": \"REL1a\",\n",{"type":65,"tag":381,"props":1022,"children":1024},{"class":977,"line":1023},6,[1025],{"type":65,"tag":381,"props":1026,"children":1027},{},[1028],{"type":71,"value":1029},"             \"label\": f\"Backup retention period ({retention} days)\",\n",{"type":65,"tag":381,"props":1031,"children":1033},{"class":977,"line":1032},7,[1034],{"type":65,"tag":381,"props":1035,"children":1036},{},[1037],{"type":71,"value":1038},"             \"status\": \"pass\" if retention >= 7 else \"warn\" if retention >= 3 else \"fail\",\n",{"type":65,"tag":381,"props":1040,"children":1042},{"class":977,"line":1041},8,[1043],{"type":65,"tag":381,"props":1044,"children":1045},{},[1046],{"type":71,"value":1047},"             \"detail\": \"\"}]\n",{"type":65,"tag":74,"props":1049,"children":1050},{},[1051,1060,1062,1068,1069,1075,1076,1082,1083,1089,1090,1096,1098,1104,1106,1112,1113,1119,1121,1127,1128,1134,1135,1141,1142,1148],{"type":65,"tag":80,"props":1052,"children":1053},{},[1054],{"type":65,"tag":100,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":71,"value":1059},"CheckDefinition",{"type":71,"value":1061}," fields: ",{"type":65,"tag":100,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":71,"value":1067},"check_id",{"type":71,"value":729},{"type":65,"tag":100,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":71,"value":1074},"pillar",{"type":71,"value":729},{"type":65,"tag":100,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":71,"value":1081},"label",{"type":71,"value":729},{"type":65,"tag":100,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":71,"value":1088},"description",{"type":71,"value":729},{"type":65,"tag":100,"props":1091,"children":1093},{"className":1092},[],[1094],{"type":71,"value":1095},"source",{"type":71,"value":1097},"\n(",{"type":65,"tag":100,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":71,"value":1103},"\"infrastructure\" | \"database\" | \"cloudwatch\"",{"type":71,"value":1105},"), ",{"type":65,"tag":100,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":71,"value":1111},"func",{"type":71,"value":729},{"type":65,"tag":100,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":71,"value":1118},"per_instance",{"type":71,"value":1120},",\n",{"type":65,"tag":100,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":71,"value":1126},"writer_only",{"type":71,"value":729},{"type":65,"tag":100,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":71,"value":1133},"reader_only",{"type":71,"value":729},{"type":65,"tag":100,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":71,"value":1140},"requires_analysis",{"type":71,"value":729},{"type":65,"tag":100,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":71,"value":1147},"priority",{"type":71,"value":1149},".",{"type":65,"tag":74,"props":1151,"children":1152},{},[1153,1162,1164,1170,1171,1177,1178,1184,1186,1192,1194,1200,1201,1207,1209,1215,1217,1223,1224,1230,1232,1238,1240,1246],{"type":65,"tag":80,"props":1154,"children":1155},{},[1156],{"type":65,"tag":100,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":71,"value":1161},"CheckContext",{"type":71,"value":1163}," fields passed to every check: ",{"type":65,"tag":100,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":71,"value":1169},"cluster_id",{"type":71,"value":729},{"type":65,"tag":100,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":71,"value":1176},"region",{"type":71,"value":729},{"type":65,"tag":100,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":71,"value":1183},"cluster",{"type":71,"value":1185},"\n(describe_db_clusters dict), ",{"type":65,"tag":100,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":71,"value":1191},"instances",{"type":71,"value":1193}," (describe_db_instances list), ",{"type":65,"tag":100,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":71,"value":1199},"analysis_data",{"type":71,"value":1120},{"type":65,"tag":100,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":71,"value":1206},"conn_str",{"type":71,"value":1208},", shared boto3 clients ",{"type":65,"tag":100,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":71,"value":1214},"docdb_client",{"type":71,"value":1216}," \u002F ",{"type":65,"tag":100,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":71,"value":1222},"cw_client",{"type":71,"value":1216},{"type":65,"tag":100,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":71,"value":1229},"ec2_client",{"type":71,"value":1231},", and the\nper-instance fields ",{"type":65,"tag":100,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":71,"value":1237},"current_instance",{"type":71,"value":1239}," and ",{"type":65,"tag":100,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":71,"value":1245},"is_writer",{"type":71,"value":1149},{"type":65,"tag":74,"props":1248,"children":1249},{},[1250],{"type":65,"tag":80,"props":1251,"children":1252},{},[1253,1259],{"type":65,"tag":100,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":71,"value":1258},"run_checks(...)",{"type":71,"value":1260}," execution model:",{"type":65,"tag":124,"props":1262,"children":1263},{},[1264,1285,1327,1368],{"type":65,"tag":128,"props":1265,"children":1266},{},[1267,1269,1275,1277,1283],{"type":71,"value":1268},"Determines writer instance IDs from ",{"type":65,"tag":100,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":71,"value":1274},"cluster[\"DBClusterMembers\"]",{"type":71,"value":1276}," where\n",{"type":65,"tag":100,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":71,"value":1282},"IsClusterWriter",{"type":71,"value":1284}," is true.",{"type":65,"tag":128,"props":1286,"children":1287},{},[1288,1290,1295,1297,1302,1304,1310,1312,1317,1319,1325],{"type":71,"value":1289},"Runs all ",{"type":65,"tag":80,"props":1291,"children":1292},{},[1293],{"type":71,"value":1294},"non-per-instance",{"type":71,"value":1296}," checks first, pillar by pillar (in fixed pillar order),\nsorted by ",{"type":65,"tag":100,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":71,"value":1147},{"type":71,"value":1303},". A check with ",{"type":65,"tag":100,"props":1305,"children":1307},{"className":1306},[],[1308],{"type":71,"value":1309},"requires_analysis=True",{"type":71,"value":1311}," and no ",{"type":65,"tag":100,"props":1313,"children":1315},{"className":1314},[],[1316],{"type":71,"value":1199},{"type":71,"value":1318},"\nemits an ",{"type":65,"tag":100,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":71,"value":1324},"info",{"type":71,"value":1326}," row (\"requires Analyze\") instead of running.",{"type":65,"tag":128,"props":1328,"children":1329},{},[1330,1332,1338,1339,1345,1347,1352,1354,1359,1361,1366],{"type":71,"value":1331},"Then iterates each instance, setting ",{"type":65,"tag":100,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":71,"value":1337},"ctx.current_instance",{"type":71,"value":1216},{"type":65,"tag":100,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":71,"value":1344},"ctx.is_writer",{"type":71,"value":1346},", and\nruns ",{"type":65,"tag":80,"props":1348,"children":1349},{},[1350],{"type":71,"value":1351},"per-instance",{"type":71,"value":1353}," checks, honoring ",{"type":65,"tag":100,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":71,"value":1126},{"type":71,"value":1360}," (e.g. REL9 MVCC) and\n",{"type":65,"tag":100,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":71,"value":1133},{"type":71,"value":1367}," (e.g. COST9 idle readers).",{"type":65,"tag":128,"props":1369,"children":1370},{},[1371,1373,1379],{"type":71,"value":1372},"A check that raises is caught and recorded as a ",{"type":65,"tag":100,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":71,"value":1378},"warn",{"type":71,"value":1380}," row rather than aborting the\nrun.",{"type":65,"tag":74,"props":1382,"children":1383},{},[1384,1386,1392,1394,1400],{"type":71,"value":1385},"Returns a flat list of result dicts: ",{"type":65,"tag":100,"props":1387,"children":1389},{"className":1388},[],[1390],{"type":71,"value":1391},"{\"pillar\", \"id\", \"label\", \"status\", \"detail\"}",{"type":71,"value":1393},"\nwith ",{"type":65,"tag":100,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":71,"value":1399},"status ∈ {pass, warn, fail, info}",{"type":71,"value":1149},{"type":65,"tag":74,"props":1402,"children":1403},{},[1404,1410,1412,1417,1419,1425,1427,1432],{"type":65,"tag":100,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":71,"value":1409},"tabs\u002Fwell_architected._run_wa_checks",{"type":71,"value":1411}," calls ",{"type":65,"tag":100,"props":1413,"children":1415},{"className":1414},[],[1416],{"type":71,"value":943},{"type":71,"value":1418}," (plugin path), then appends\nthe database-level checks from ",{"type":65,"tag":100,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":71,"value":1424},"_run_db_checks(analysis_data)",{"type":71,"value":1426}," (which contributes\n",{"type":65,"tag":100,"props":1428,"children":1430},{"className":1429},[],[1431],{"type":71,"value":696},{"type":71,"value":1433}," plus app extras), then triggers AI recommendations (Section 4b). If the plugin\nimport fails, it falls back to a legacy inline path producing the same IDs.",{"type":65,"tag":117,"props":1435,"children":1437},{"id":1436},"_4b-bedrock-recommendation-generation",[1438],{"type":71,"value":1439},"4b. Bedrock Recommendation Generation",{"type":65,"tag":74,"props":1441,"children":1442},{},[1443,1445,1451,1453,1462,1464,1470,1472,1478,1480,1486,1488,1493,1495,1501,1502,1508,1510,1516],{"type":71,"value":1444},"After checks run, ",{"type":65,"tag":100,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":71,"value":1450},"_generate_ai_recommendations(check_results, cluster_id, region, analysis_data)",{"type":71,"value":1452}," sends the failing\u002Fwarning checks to Bedrock using the system prompt in\n",{"type":65,"tag":80,"props":1454,"children":1455},{},[1456],{"type":65,"tag":100,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":71,"value":1461},"wa-advisor-prompt.md",{"type":71,"value":1463}," (loaded via ",{"type":65,"tag":100,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":71,"value":1469},"_load_wa_advisor_prompt()",{"type":71,"value":1471},"). Models:\n",{"type":65,"tag":100,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":71,"value":1477},"us.anthropic.claude-sonnet-4-20250514-v1:0",{"type":71,"value":1479}," (primary) →\n",{"type":65,"tag":100,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":71,"value":1485},"us.anthropic.claude-haiku-4-5-20251001-v1:0",{"type":71,"value":1487}," (fallback). The prompt returns ",{"type":65,"tag":80,"props":1489,"children":1490},{},[1491],{"type":71,"value":1492},"JSON\nkeyed by pillar",{"type":71,"value":1494},", each entry ",{"type":65,"tag":100,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":71,"value":1500},"{check_id, action, why, impact, priority}",{"type":71,"value":1276},{"type":65,"tag":100,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":71,"value":1507},"priority ∈ {Critical, High, Medium, Low}",{"type":71,"value":1509},". Only pillars with failing\u002Fwarning checks\nappear; the model must not invent checks not present in the input. Recommendations are\ngenerated asynchronously and stored in ",{"type":65,"tag":100,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":71,"value":1515},"_wa[\"ai_md\"]",{"type":71,"value":1149},{"type":65,"tag":66,"props":1518,"children":1520},{"id":1519},"_5-reference-constants",[1521],{"type":71,"value":1522},"5. Reference Constants",{"type":65,"tag":117,"props":1524,"children":1526},{"id":1525},"conn_limits-instance-type-max-connections",[1527],{"type":71,"value":1528},"CONN_LIMITS (instance type → max connections)",{"type":65,"tag":965,"props":1530,"children":1534},{"className":1531,"code":1533,"language":71},[1532],"language-text","db.t3.medium: 1000      db.t4g.medium: 1000\ndb.r5.large: 3400       db.r6g.large: 3400       db.r6gd.large: 3400       db.r8g.large: 3400\ndb.r5.xlarge: 7000      db.r6g.xlarge: 7000      db.r6gd.xlarge: 7000      db.r8g.xlarge: 7000\ndb.r5.2xlarge: 14200    db.r6g.2xlarge: 14200    db.r6gd.2xlarge: 14200    db.r8g.2xlarge: 14200\ndb.r5.4xlarge: 28400    db.r6g.4xlarge: 28400    db.r6gd.4xlarge: 28400    db.r8g.4xlarge: 28400\ndb.r5.8xlarge: 60000    db.r6g.8xlarge: 60000    db.r6gd.8xlarge: 60000    db.r8g.8xlarge: 60000\ndb.r5.12xlarge: 60000   db.r6g.12xlarge: 60000   db.r6gd.12xlarge: 60000   db.r8g.12xlarge: 60000\ndb.r5.16xlarge: 60000   db.r6g.16xlarge: 60000   db.r6gd.16xlarge: 60000   db.r8g.16xlarge: 60000\ndb.r5.24xlarge: 60000\n",[1535],{"type":65,"tag":100,"props":1536,"children":1537},{"__ignoreMap":970},[1538],{"type":71,"value":1533},{"type":65,"tag":117,"props":1540,"children":1542},{"id":1541},"instance_ram_gib-instance-type-ram-in-gib",[1543],{"type":71,"value":1544},"INSTANCE_RAM_GIB (instance type → RAM in GiB)",{"type":65,"tag":965,"props":1546,"children":1549},{"className":1547,"code":1548,"language":71},[1532],"db.t3.medium: 4         db.t4g.medium: 4\ndb.r5.large: 16         db.r6g.large: 16         db.r6gd.large: 16         db.r8g.large: 16\ndb.r5.xlarge: 32        db.r6g.xlarge: 32        db.r6gd.xlarge: 32        db.r8g.xlarge: 32\ndb.r5.2xlarge: 64       db.r6g.2xlarge: 64       db.r6gd.2xlarge: 64       db.r8g.2xlarge: 64\ndb.r5.4xlarge: 128      db.r6g.4xlarge: 128      db.r6gd.4xlarge: 128      db.r8g.4xlarge: 128\ndb.r5.8xlarge: 256      db.r6g.8xlarge: 256      db.r6gd.8xlarge: 256      db.r8g.8xlarge: 256\ndb.r5.12xlarge: 384     db.r6g.12xlarge: 384     db.r6gd.12xlarge: 384     db.r8g.12xlarge: 384\ndb.r5.16xlarge: 512     db.r6g.16xlarge: 512     db.r6gd.16xlarge: 512     db.r8g.16xlarge: 512\ndb.r5.24xlarge: 768\n",[1550],{"type":65,"tag":100,"props":1551,"children":1552},{"__ignoreMap":970},[1553],{"type":71,"value":1548},{"type":65,"tag":117,"props":1555,"children":1557},{"id":1556},"graviton_families",[1558],{"type":71,"value":1559},"GRAVITON_FAMILIES",{"type":65,"tag":965,"props":1561,"children":1564},{"className":1562,"code":1563,"language":71},[1532],"r6g, r7g, r8g, t4g, r6gd\n",[1565],{"type":65,"tag":100,"props":1566,"children":1567},{"__ignoreMap":970},[1568],{"type":71,"value":1563},{"type":65,"tag":117,"props":1570,"children":1572},{"id":1571},"other-constants",[1573],{"type":71,"value":1574},"Other Constants",{"type":65,"tag":175,"props":1576,"children":1577},{},[1578,1583,1588,1593],{"type":65,"tag":128,"props":1579,"children":1580},{},[1581],{"type":71,"value":1582},"MVCC total capacity: 1,400,000,000 IDs",{"type":65,"tag":128,"props":1584,"children":1585},{},[1586],{"type":71,"value":1587},"Engine version classification: deprecated (3.x, 4.x), current (5.0), latest (8.0)",{"type":65,"tag":128,"props":1589,"children":1590},{},[1591],{"type":71,"value":1592},"CloudWatch lookback: 7 days for all metrics, 13 days for failover events",{"type":65,"tag":128,"props":1594,"children":1595},{},[1596],{"type":71,"value":1597},"CloudWatch period: 3600 seconds (1 hour) for all metrics except DatabaseCursorsTimedOut (86400 = daily)",{"type":65,"tag":66,"props":1599,"children":1601},{"id":1600},"_6-universal-war-export-schema",[1602],{"type":71,"value":1603},"6. Universal WAR Export Schema",{"type":65,"tag":965,"props":1605,"children":1609},{"className":1606,"code":1607,"language":1608,"meta":970,"style":970},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"schema_version\": \"1.0\",\n  \"metadata\": {\n    \"service\": \"documentdb\",\n    \"cluster_id\": \"\",\n    \"account_id\": \"\",\n    \"region\": \"\",\n    \"engine_version\": \"\",\n    \"timestamp\": \"\",\n    \"skill_name\": \"documentdb-well-architected-review\",\n    \"checks_evaluated\": 0,\n    \"instances_reviewed\": 0\n  },\n  \"scoring\": {\n    \"overall_health_score\": 0,\n    \"by_status\": {\"pass\": 0, \"warn\": 0, \"fail\": 0, \"info\": 0},\n    \"by_pillar\": {}\n  },\n  \"findings\": [\n    {\n      \"finding_id\": \"\u003Cunique UUID>\",\n      \"check_id\": \"REL1a\",\n      \"pillar\": \"reliability\",\n      \"check_name\": \"Backup retention period\",\n      \"status\": \"pass|warn|fail|info\",\n      \"severity\": \"CRITICAL|HIGH|MEDIUM|LOW\",\n      \"detail\": \"Human-readable finding with actual values\",\n      \"instance_id\": null,\n      \"remediation_cli\": \"aws docdb modify-db-cluster ...\",\n      \"recommendations\": []\n    }\n  ]\n}\n","json",[1610],{"type":65,"tag":100,"props":1611,"children":1612},{"__ignoreMap":970},[1613,1622,1664,1689,1728,1756,1784,1811,1839,1868,1905,1936,1962,1971,1996,2025,2151,2177,2185,2211,2220,2259,2295,2332,2370,2408,2446,2484,2510,2548,2574,2583,2592],{"type":65,"tag":381,"props":1614,"children":1615},{"class":977,"line":978},[1616],{"type":65,"tag":381,"props":1617,"children":1619},{"style":1618},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1620],{"type":71,"value":1621},"{\n",{"type":65,"tag":381,"props":1623,"children":1624},{"class":977,"line":987},[1625,1630,1636,1641,1645,1650,1656,1660],{"type":65,"tag":381,"props":1626,"children":1627},{"style":1618},[1628],{"type":71,"value":1629},"  \"",{"type":65,"tag":381,"props":1631,"children":1633},{"style":1632},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1634],{"type":71,"value":1635},"schema_version",{"type":65,"tag":381,"props":1637,"children":1638},{"style":1618},[1639],{"type":71,"value":1640},"\"",{"type":65,"tag":381,"props":1642,"children":1643},{"style":1618},[1644],{"type":71,"value":963},{"type":65,"tag":381,"props":1646,"children":1647},{"style":1618},[1648],{"type":71,"value":1649}," \"",{"type":65,"tag":381,"props":1651,"children":1653},{"style":1652},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1654],{"type":71,"value":1655},"1.0",{"type":65,"tag":381,"props":1657,"children":1658},{"style":1618},[1659],{"type":71,"value":1640},{"type":65,"tag":381,"props":1661,"children":1662},{"style":1618},[1663],{"type":71,"value":1120},{"type":65,"tag":381,"props":1665,"children":1666},{"class":977,"line":996},[1667,1671,1676,1680,1684],{"type":65,"tag":381,"props":1668,"children":1669},{"style":1618},[1670],{"type":71,"value":1629},{"type":65,"tag":381,"props":1672,"children":1673},{"style":1632},[1674],{"type":71,"value":1675},"metadata",{"type":65,"tag":381,"props":1677,"children":1678},{"style":1618},[1679],{"type":71,"value":1640},{"type":65,"tag":381,"props":1681,"children":1682},{"style":1618},[1683],{"type":71,"value":963},{"type":65,"tag":381,"props":1685,"children":1686},{"style":1618},[1687],{"type":71,"value":1688}," {\n",{"type":65,"tag":381,"props":1690,"children":1691},{"class":977,"line":1005},[1692,1697,1703,1707,1711,1715,1720,1724],{"type":65,"tag":381,"props":1693,"children":1694},{"style":1618},[1695],{"type":71,"value":1696},"    \"",{"type":65,"tag":381,"props":1698,"children":1700},{"style":1699},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1701],{"type":71,"value":1702},"service",{"type":65,"tag":381,"props":1704,"children":1705},{"style":1618},[1706],{"type":71,"value":1640},{"type":65,"tag":381,"props":1708,"children":1709},{"style":1618},[1710],{"type":71,"value":963},{"type":65,"tag":381,"props":1712,"children":1713},{"style":1618},[1714],{"type":71,"value":1649},{"type":65,"tag":381,"props":1716,"children":1717},{"style":1652},[1718],{"type":71,"value":1719},"documentdb",{"type":65,"tag":381,"props":1721,"children":1722},{"style":1618},[1723],{"type":71,"value":1640},{"type":65,"tag":381,"props":1725,"children":1726},{"style":1618},[1727],{"type":71,"value":1120},{"type":65,"tag":381,"props":1729,"children":1730},{"class":977,"line":1014},[1731,1735,1739,1743,1747,1752],{"type":65,"tag":381,"props":1732,"children":1733},{"style":1618},[1734],{"type":71,"value":1696},{"type":65,"tag":381,"props":1736,"children":1737},{"style":1699},[1738],{"type":71,"value":1169},{"type":65,"tag":381,"props":1740,"children":1741},{"style":1618},[1742],{"type":71,"value":1640},{"type":65,"tag":381,"props":1744,"children":1745},{"style":1618},[1746],{"type":71,"value":963},{"type":65,"tag":381,"props":1748,"children":1749},{"style":1618},[1750],{"type":71,"value":1751}," \"\"",{"type":65,"tag":381,"props":1753,"children":1754},{"style":1618},[1755],{"type":71,"value":1120},{"type":65,"tag":381,"props":1757,"children":1758},{"class":977,"line":1023},[1759,1763,1768,1772,1776,1780],{"type":65,"tag":381,"props":1760,"children":1761},{"style":1618},[1762],{"type":71,"value":1696},{"type":65,"tag":381,"props":1764,"children":1765},{"style":1699},[1766],{"type":71,"value":1767},"account_id",{"type":65,"tag":381,"props":1769,"children":1770},{"style":1618},[1771],{"type":71,"value":1640},{"type":65,"tag":381,"props":1773,"children":1774},{"style":1618},[1775],{"type":71,"value":963},{"type":65,"tag":381,"props":1777,"children":1778},{"style":1618},[1779],{"type":71,"value":1751},{"type":65,"tag":381,"props":1781,"children":1782},{"style":1618},[1783],{"type":71,"value":1120},{"type":65,"tag":381,"props":1785,"children":1786},{"class":977,"line":1032},[1787,1791,1795,1799,1803,1807],{"type":65,"tag":381,"props":1788,"children":1789},{"style":1618},[1790],{"type":71,"value":1696},{"type":65,"tag":381,"props":1792,"children":1793},{"style":1699},[1794],{"type":71,"value":1176},{"type":65,"tag":381,"props":1796,"children":1797},{"style":1618},[1798],{"type":71,"value":1640},{"type":65,"tag":381,"props":1800,"children":1801},{"style":1618},[1802],{"type":71,"value":963},{"type":65,"tag":381,"props":1804,"children":1805},{"style":1618},[1806],{"type":71,"value":1751},{"type":65,"tag":381,"props":1808,"children":1809},{"style":1618},[1810],{"type":71,"value":1120},{"type":65,"tag":381,"props":1812,"children":1813},{"class":977,"line":1041},[1814,1818,1823,1827,1831,1835],{"type":65,"tag":381,"props":1815,"children":1816},{"style":1618},[1817],{"type":71,"value":1696},{"type":65,"tag":381,"props":1819,"children":1820},{"style":1699},[1821],{"type":71,"value":1822},"engine_version",{"type":65,"tag":381,"props":1824,"children":1825},{"style":1618},[1826],{"type":71,"value":1640},{"type":65,"tag":381,"props":1828,"children":1829},{"style":1618},[1830],{"type":71,"value":963},{"type":65,"tag":381,"props":1832,"children":1833},{"style":1618},[1834],{"type":71,"value":1751},{"type":65,"tag":381,"props":1836,"children":1837},{"style":1618},[1838],{"type":71,"value":1120},{"type":65,"tag":381,"props":1840,"children":1842},{"class":977,"line":1841},9,[1843,1847,1852,1856,1860,1864],{"type":65,"tag":381,"props":1844,"children":1845},{"style":1618},[1846],{"type":71,"value":1696},{"type":65,"tag":381,"props":1848,"children":1849},{"style":1699},[1850],{"type":71,"value":1851},"timestamp",{"type":65,"tag":381,"props":1853,"children":1854},{"style":1618},[1855],{"type":71,"value":1640},{"type":65,"tag":381,"props":1857,"children":1858},{"style":1618},[1859],{"type":71,"value":963},{"type":65,"tag":381,"props":1861,"children":1862},{"style":1618},[1863],{"type":71,"value":1751},{"type":65,"tag":381,"props":1865,"children":1866},{"style":1618},[1867],{"type":71,"value":1120},{"type":65,"tag":381,"props":1869,"children":1871},{"class":977,"line":1870},10,[1872,1876,1881,1885,1889,1893,1897,1901],{"type":65,"tag":381,"props":1873,"children":1874},{"style":1618},[1875],{"type":71,"value":1696},{"type":65,"tag":381,"props":1877,"children":1878},{"style":1699},[1879],{"type":71,"value":1880},"skill_name",{"type":65,"tag":381,"props":1882,"children":1883},{"style":1618},[1884],{"type":71,"value":1640},{"type":65,"tag":381,"props":1886,"children":1887},{"style":1618},[1888],{"type":71,"value":963},{"type":65,"tag":381,"props":1890,"children":1891},{"style":1618},[1892],{"type":71,"value":1649},{"type":65,"tag":381,"props":1894,"children":1895},{"style":1652},[1896],{"type":71,"value":4},{"type":65,"tag":381,"props":1898,"children":1899},{"style":1618},[1900],{"type":71,"value":1640},{"type":65,"tag":381,"props":1902,"children":1903},{"style":1618},[1904],{"type":71,"value":1120},{"type":65,"tag":381,"props":1906,"children":1908},{"class":977,"line":1907},11,[1909,1913,1918,1922,1926,1932],{"type":65,"tag":381,"props":1910,"children":1911},{"style":1618},[1912],{"type":71,"value":1696},{"type":65,"tag":381,"props":1914,"children":1915},{"style":1699},[1916],{"type":71,"value":1917},"checks_evaluated",{"type":65,"tag":381,"props":1919,"children":1920},{"style":1618},[1921],{"type":71,"value":1640},{"type":65,"tag":381,"props":1923,"children":1924},{"style":1618},[1925],{"type":71,"value":963},{"type":65,"tag":381,"props":1927,"children":1929},{"style":1928},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1930],{"type":71,"value":1931}," 0",{"type":65,"tag":381,"props":1933,"children":1934},{"style":1618},[1935],{"type":71,"value":1120},{"type":65,"tag":381,"props":1937,"children":1939},{"class":977,"line":1938},12,[1940,1944,1949,1953,1957],{"type":65,"tag":381,"props":1941,"children":1942},{"style":1618},[1943],{"type":71,"value":1696},{"type":65,"tag":381,"props":1945,"children":1946},{"style":1699},[1947],{"type":71,"value":1948},"instances_reviewed",{"type":65,"tag":381,"props":1950,"children":1951},{"style":1618},[1952],{"type":71,"value":1640},{"type":65,"tag":381,"props":1954,"children":1955},{"style":1618},[1956],{"type":71,"value":963},{"type":65,"tag":381,"props":1958,"children":1959},{"style":1928},[1960],{"type":71,"value":1961}," 0\n",{"type":65,"tag":381,"props":1963,"children":1965},{"class":977,"line":1964},13,[1966],{"type":65,"tag":381,"props":1967,"children":1968},{"style":1618},[1969],{"type":71,"value":1970},"  },\n",{"type":65,"tag":381,"props":1972,"children":1974},{"class":977,"line":1973},14,[1975,1979,1984,1988,1992],{"type":65,"tag":381,"props":1976,"children":1977},{"style":1618},[1978],{"type":71,"value":1629},{"type":65,"tag":381,"props":1980,"children":1981},{"style":1632},[1982],{"type":71,"value":1983},"scoring",{"type":65,"tag":381,"props":1985,"children":1986},{"style":1618},[1987],{"type":71,"value":1640},{"type":65,"tag":381,"props":1989,"children":1990},{"style":1618},[1991],{"type":71,"value":963},{"type":65,"tag":381,"props":1993,"children":1994},{"style":1618},[1995],{"type":71,"value":1688},{"type":65,"tag":381,"props":1997,"children":1999},{"class":977,"line":1998},15,[2000,2004,2009,2013,2017,2021],{"type":65,"tag":381,"props":2001,"children":2002},{"style":1618},[2003],{"type":71,"value":1696},{"type":65,"tag":381,"props":2005,"children":2006},{"style":1699},[2007],{"type":71,"value":2008},"overall_health_score",{"type":65,"tag":381,"props":2010,"children":2011},{"style":1618},[2012],{"type":71,"value":1640},{"type":65,"tag":381,"props":2014,"children":2015},{"style":1618},[2016],{"type":71,"value":963},{"type":65,"tag":381,"props":2018,"children":2019},{"style":1928},[2020],{"type":71,"value":1931},{"type":65,"tag":381,"props":2022,"children":2023},{"style":1618},[2024],{"type":71,"value":1120},{"type":65,"tag":381,"props":2026,"children":2028},{"class":977,"line":2027},16,[2029,2033,2038,2042,2046,2051,2055,2060,2064,2068,2072,2077,2081,2085,2089,2093,2097,2101,2105,2110,2114,2118,2122,2126,2130,2134,2138,2142,2146],{"type":65,"tag":381,"props":2030,"children":2031},{"style":1618},[2032],{"type":71,"value":1696},{"type":65,"tag":381,"props":2034,"children":2035},{"style":1699},[2036],{"type":71,"value":2037},"by_status",{"type":65,"tag":381,"props":2039,"children":2040},{"style":1618},[2041],{"type":71,"value":1640},{"type":65,"tag":381,"props":2043,"children":2044},{"style":1618},[2045],{"type":71,"value":963},{"type":65,"tag":381,"props":2047,"children":2048},{"style":1618},[2049],{"type":71,"value":2050}," {",{"type":65,"tag":381,"props":2052,"children":2053},{"style":1618},[2054],{"type":71,"value":1640},{"type":65,"tag":381,"props":2056,"children":2057},{"style":1928},[2058],{"type":71,"value":2059},"pass",{"type":65,"tag":381,"props":2061,"children":2062},{"style":1618},[2063],{"type":71,"value":1640},{"type":65,"tag":381,"props":2065,"children":2066},{"style":1618},[2067],{"type":71,"value":963},{"type":65,"tag":381,"props":2069,"children":2070},{"style":1928},[2071],{"type":71,"value":1931},{"type":65,"tag":381,"props":2073,"children":2074},{"style":1618},[2075],{"type":71,"value":2076},",",{"type":65,"tag":381,"props":2078,"children":2079},{"style":1618},[2080],{"type":71,"value":1649},{"type":65,"tag":381,"props":2082,"children":2083},{"style":1928},[2084],{"type":71,"value":1378},{"type":65,"tag":381,"props":2086,"children":2087},{"style":1618},[2088],{"type":71,"value":1640},{"type":65,"tag":381,"props":2090,"children":2091},{"style":1618},[2092],{"type":71,"value":963},{"type":65,"tag":381,"props":2094,"children":2095},{"style":1928},[2096],{"type":71,"value":1931},{"type":65,"tag":381,"props":2098,"children":2099},{"style":1618},[2100],{"type":71,"value":2076},{"type":65,"tag":381,"props":2102,"children":2103},{"style":1618},[2104],{"type":71,"value":1649},{"type":65,"tag":381,"props":2106,"children":2107},{"style":1928},[2108],{"type":71,"value":2109},"fail",{"type":65,"tag":381,"props":2111,"children":2112},{"style":1618},[2113],{"type":71,"value":1640},{"type":65,"tag":381,"props":2115,"children":2116},{"style":1618},[2117],{"type":71,"value":963},{"type":65,"tag":381,"props":2119,"children":2120},{"style":1928},[2121],{"type":71,"value":1931},{"type":65,"tag":381,"props":2123,"children":2124},{"style":1618},[2125],{"type":71,"value":2076},{"type":65,"tag":381,"props":2127,"children":2128},{"style":1618},[2129],{"type":71,"value":1649},{"type":65,"tag":381,"props":2131,"children":2132},{"style":1928},[2133],{"type":71,"value":1324},{"type":65,"tag":381,"props":2135,"children":2136},{"style":1618},[2137],{"type":71,"value":1640},{"type":65,"tag":381,"props":2139,"children":2140},{"style":1618},[2141],{"type":71,"value":963},{"type":65,"tag":381,"props":2143,"children":2144},{"style":1928},[2145],{"type":71,"value":1931},{"type":65,"tag":381,"props":2147,"children":2148},{"style":1618},[2149],{"type":71,"value":2150},"},\n",{"type":65,"tag":381,"props":2152,"children":2154},{"class":977,"line":2153},17,[2155,2159,2164,2168,2172],{"type":65,"tag":381,"props":2156,"children":2157},{"style":1618},[2158],{"type":71,"value":1696},{"type":65,"tag":381,"props":2160,"children":2161},{"style":1699},[2162],{"type":71,"value":2163},"by_pillar",{"type":65,"tag":381,"props":2165,"children":2166},{"style":1618},[2167],{"type":71,"value":1640},{"type":65,"tag":381,"props":2169,"children":2170},{"style":1618},[2171],{"type":71,"value":963},{"type":65,"tag":381,"props":2173,"children":2174},{"style":1618},[2175],{"type":71,"value":2176}," {}\n",{"type":65,"tag":381,"props":2178,"children":2180},{"class":977,"line":2179},18,[2181],{"type":65,"tag":381,"props":2182,"children":2183},{"style":1618},[2184],{"type":71,"value":1970},{"type":65,"tag":381,"props":2186,"children":2188},{"class":977,"line":2187},19,[2189,2193,2198,2202,2206],{"type":65,"tag":381,"props":2190,"children":2191},{"style":1618},[2192],{"type":71,"value":1629},{"type":65,"tag":381,"props":2194,"children":2195},{"style":1632},[2196],{"type":71,"value":2197},"findings",{"type":65,"tag":381,"props":2199,"children":2200},{"style":1618},[2201],{"type":71,"value":1640},{"type":65,"tag":381,"props":2203,"children":2204},{"style":1618},[2205],{"type":71,"value":963},{"type":65,"tag":381,"props":2207,"children":2208},{"style":1618},[2209],{"type":71,"value":2210}," [\n",{"type":65,"tag":381,"props":2212,"children":2214},{"class":977,"line":2213},20,[2215],{"type":65,"tag":381,"props":2216,"children":2217},{"style":1618},[2218],{"type":71,"value":2219},"    {\n",{"type":65,"tag":381,"props":2221,"children":2223},{"class":977,"line":2222},21,[2224,2229,2234,2238,2242,2246,2251,2255],{"type":65,"tag":381,"props":2225,"children":2226},{"style":1618},[2227],{"type":71,"value":2228},"      \"",{"type":65,"tag":381,"props":2230,"children":2231},{"style":1699},[2232],{"type":71,"value":2233},"finding_id",{"type":65,"tag":381,"props":2235,"children":2236},{"style":1618},[2237],{"type":71,"value":1640},{"type":65,"tag":381,"props":2239,"children":2240},{"style":1618},[2241],{"type":71,"value":963},{"type":65,"tag":381,"props":2243,"children":2244},{"style":1618},[2245],{"type":71,"value":1649},{"type":65,"tag":381,"props":2247,"children":2248},{"style":1652},[2249],{"type":71,"value":2250},"\u003Cunique UUID>",{"type":65,"tag":381,"props":2252,"children":2253},{"style":1618},[2254],{"type":71,"value":1640},{"type":65,"tag":381,"props":2256,"children":2257},{"style":1618},[2258],{"type":71,"value":1120},{"type":65,"tag":381,"props":2260,"children":2262},{"class":977,"line":2261},22,[2263,2267,2271,2275,2279,2283,2287,2291],{"type":65,"tag":381,"props":2264,"children":2265},{"style":1618},[2266],{"type":71,"value":2228},{"type":65,"tag":381,"props":2268,"children":2269},{"style":1699},[2270],{"type":71,"value":1067},{"type":65,"tag":381,"props":2272,"children":2273},{"style":1618},[2274],{"type":71,"value":1640},{"type":65,"tag":381,"props":2276,"children":2277},{"style":1618},[2278],{"type":71,"value":963},{"type":65,"tag":381,"props":2280,"children":2281},{"style":1618},[2282],{"type":71,"value":1649},{"type":65,"tag":381,"props":2284,"children":2285},{"style":1652},[2286],{"type":71,"value":719},{"type":65,"tag":381,"props":2288,"children":2289},{"style":1618},[2290],{"type":71,"value":1640},{"type":65,"tag":381,"props":2292,"children":2293},{"style":1618},[2294],{"type":71,"value":1120},{"type":65,"tag":381,"props":2296,"children":2298},{"class":977,"line":2297},23,[2299,2303,2307,2311,2315,2319,2324,2328],{"type":65,"tag":381,"props":2300,"children":2301},{"style":1618},[2302],{"type":71,"value":2228},{"type":65,"tag":381,"props":2304,"children":2305},{"style":1699},[2306],{"type":71,"value":1074},{"type":65,"tag":381,"props":2308,"children":2309},{"style":1618},[2310],{"type":71,"value":1640},{"type":65,"tag":381,"props":2312,"children":2313},{"style":1618},[2314],{"type":71,"value":963},{"type":65,"tag":381,"props":2316,"children":2317},{"style":1618},[2318],{"type":71,"value":1649},{"type":65,"tag":381,"props":2320,"children":2321},{"style":1652},[2322],{"type":71,"value":2323},"reliability",{"type":65,"tag":381,"props":2325,"children":2326},{"style":1618},[2327],{"type":71,"value":1640},{"type":65,"tag":381,"props":2329,"children":2330},{"style":1618},[2331],{"type":71,"value":1120},{"type":65,"tag":381,"props":2333,"children":2335},{"class":977,"line":2334},24,[2336,2340,2345,2349,2353,2357,2362,2366],{"type":65,"tag":381,"props":2337,"children":2338},{"style":1618},[2339],{"type":71,"value":2228},{"type":65,"tag":381,"props":2341,"children":2342},{"style":1699},[2343],{"type":71,"value":2344},"check_name",{"type":65,"tag":381,"props":2346,"children":2347},{"style":1618},[2348],{"type":71,"value":1640},{"type":65,"tag":381,"props":2350,"children":2351},{"style":1618},[2352],{"type":71,"value":963},{"type":65,"tag":381,"props":2354,"children":2355},{"style":1618},[2356],{"type":71,"value":1649},{"type":65,"tag":381,"props":2358,"children":2359},{"style":1652},[2360],{"type":71,"value":2361},"Backup retention period",{"type":65,"tag":381,"props":2363,"children":2364},{"style":1618},[2365],{"type":71,"value":1640},{"type":65,"tag":381,"props":2367,"children":2368},{"style":1618},[2369],{"type":71,"value":1120},{"type":65,"tag":381,"props":2371,"children":2373},{"class":977,"line":2372},25,[2374,2378,2383,2387,2391,2395,2400,2404],{"type":65,"tag":381,"props":2375,"children":2376},{"style":1618},[2377],{"type":71,"value":2228},{"type":65,"tag":381,"props":2379,"children":2380},{"style":1699},[2381],{"type":71,"value":2382},"status",{"type":65,"tag":381,"props":2384,"children":2385},{"style":1618},[2386],{"type":71,"value":1640},{"type":65,"tag":381,"props":2388,"children":2389},{"style":1618},[2390],{"type":71,"value":963},{"type":65,"tag":381,"props":2392,"children":2393},{"style":1618},[2394],{"type":71,"value":1649},{"type":65,"tag":381,"props":2396,"children":2397},{"style":1652},[2398],{"type":71,"value":2399},"pass|warn|fail|info",{"type":65,"tag":381,"props":2401,"children":2402},{"style":1618},[2403],{"type":71,"value":1640},{"type":65,"tag":381,"props":2405,"children":2406},{"style":1618},[2407],{"type":71,"value":1120},{"type":65,"tag":381,"props":2409,"children":2411},{"class":977,"line":2410},26,[2412,2416,2421,2425,2429,2433,2438,2442],{"type":65,"tag":381,"props":2413,"children":2414},{"style":1618},[2415],{"type":71,"value":2228},{"type":65,"tag":381,"props":2417,"children":2418},{"style":1699},[2419],{"type":71,"value":2420},"severity",{"type":65,"tag":381,"props":2422,"children":2423},{"style":1618},[2424],{"type":71,"value":1640},{"type":65,"tag":381,"props":2426,"children":2427},{"style":1618},[2428],{"type":71,"value":963},{"type":65,"tag":381,"props":2430,"children":2431},{"style":1618},[2432],{"type":71,"value":1649},{"type":65,"tag":381,"props":2434,"children":2435},{"style":1652},[2436],{"type":71,"value":2437},"CRITICAL|HIGH|MEDIUM|LOW",{"type":65,"tag":381,"props":2439,"children":2440},{"style":1618},[2441],{"type":71,"value":1640},{"type":65,"tag":381,"props":2443,"children":2444},{"style":1618},[2445],{"type":71,"value":1120},{"type":65,"tag":381,"props":2447,"children":2449},{"class":977,"line":2448},27,[2450,2454,2459,2463,2467,2471,2476,2480],{"type":65,"tag":381,"props":2451,"children":2452},{"style":1618},[2453],{"type":71,"value":2228},{"type":65,"tag":381,"props":2455,"children":2456},{"style":1699},[2457],{"type":71,"value":2458},"detail",{"type":65,"tag":381,"props":2460,"children":2461},{"style":1618},[2462],{"type":71,"value":1640},{"type":65,"tag":381,"props":2464,"children":2465},{"style":1618},[2466],{"type":71,"value":963},{"type":65,"tag":381,"props":2468,"children":2469},{"style":1618},[2470],{"type":71,"value":1649},{"type":65,"tag":381,"props":2472,"children":2473},{"style":1652},[2474],{"type":71,"value":2475},"Human-readable finding with actual values",{"type":65,"tag":381,"props":2477,"children":2478},{"style":1618},[2479],{"type":71,"value":1640},{"type":65,"tag":381,"props":2481,"children":2482},{"style":1618},[2483],{"type":71,"value":1120},{"type":65,"tag":381,"props":2485,"children":2487},{"class":977,"line":2486},28,[2488,2492,2497,2501,2505],{"type":65,"tag":381,"props":2489,"children":2490},{"style":1618},[2491],{"type":71,"value":2228},{"type":65,"tag":381,"props":2493,"children":2494},{"style":1699},[2495],{"type":71,"value":2496},"instance_id",{"type":65,"tag":381,"props":2498,"children":2499},{"style":1618},[2500],{"type":71,"value":1640},{"type":65,"tag":381,"props":2502,"children":2503},{"style":1618},[2504],{"type":71,"value":963},{"type":65,"tag":381,"props":2506,"children":2507},{"style":1618},[2508],{"type":71,"value":2509}," null,\n",{"type":65,"tag":381,"props":2511,"children":2513},{"class":977,"line":2512},29,[2514,2518,2523,2527,2531,2535,2540,2544],{"type":65,"tag":381,"props":2515,"children":2516},{"style":1618},[2517],{"type":71,"value":2228},{"type":65,"tag":381,"props":2519,"children":2520},{"style":1699},[2521],{"type":71,"value":2522},"remediation_cli",{"type":65,"tag":381,"props":2524,"children":2525},{"style":1618},[2526],{"type":71,"value":1640},{"type":65,"tag":381,"props":2528,"children":2529},{"style":1618},[2530],{"type":71,"value":963},{"type":65,"tag":381,"props":2532,"children":2533},{"style":1618},[2534],{"type":71,"value":1649},{"type":65,"tag":381,"props":2536,"children":2537},{"style":1652},[2538],{"type":71,"value":2539},"aws docdb modify-db-cluster ...",{"type":65,"tag":381,"props":2541,"children":2542},{"style":1618},[2543],{"type":71,"value":1640},{"type":65,"tag":381,"props":2545,"children":2546},{"style":1618},[2547],{"type":71,"value":1120},{"type":65,"tag":381,"props":2549,"children":2551},{"class":977,"line":2550},30,[2552,2556,2561,2565,2569],{"type":65,"tag":381,"props":2553,"children":2554},{"style":1618},[2555],{"type":71,"value":2228},{"type":65,"tag":381,"props":2557,"children":2558},{"style":1699},[2559],{"type":71,"value":2560},"recommendations",{"type":65,"tag":381,"props":2562,"children":2563},{"style":1618},[2564],{"type":71,"value":1640},{"type":65,"tag":381,"props":2566,"children":2567},{"style":1618},[2568],{"type":71,"value":963},{"type":65,"tag":381,"props":2570,"children":2571},{"style":1618},[2572],{"type":71,"value":2573}," []\n",{"type":65,"tag":381,"props":2575,"children":2577},{"class":977,"line":2576},31,[2578],{"type":65,"tag":381,"props":2579,"children":2580},{"style":1618},[2581],{"type":71,"value":2582},"    }\n",{"type":65,"tag":381,"props":2584,"children":2586},{"class":977,"line":2585},32,[2587],{"type":65,"tag":381,"props":2588,"children":2589},{"style":1618},[2590],{"type":71,"value":2591},"  ]\n",{"type":65,"tag":381,"props":2593,"children":2595},{"class":977,"line":2594},33,[2596],{"type":65,"tag":381,"props":2597,"children":2598},{"style":1618},[2599],{"type":71,"value":2600},"}\n",{"type":65,"tag":74,"props":2602,"children":2603},{},[2604],{"type":71,"value":2605},"Note: check_id uses the SAME IDs as the Dash app (REL1a, SEC2, PERF5, etc.). The pillar field uses lowercase with underscores (reliability, security, operational_excellence, performance_efficiency, cost_optimization, sustainability).",{"type":65,"tag":66,"props":2607,"children":2609},{"id":2608},"_7-dashboard-specification",[2610],{"type":71,"value":2611},"7. Dashboard Specification",{"type":65,"tag":175,"props":2613,"children":2614},{},[2615,2620,2625,2630,2635,2640,2645,2650],{"type":65,"tag":128,"props":2616,"children":2617},{},[2618],{"type":71,"value":2619},"Self-contained HTML file with embedded CSS (no external dependencies except CDN-loaded Plotly)",{"type":65,"tag":128,"props":2621,"children":2622},{},[2623],{"type":71,"value":2624},"Dark theme with AWS-inspired color palette",{"type":65,"tag":128,"props":2626,"children":2627},{},[2628],{"type":71,"value":2629},"Header: cluster_id, region, engine version, timestamp, health score (large, colored)",{"type":65,"tag":128,"props":2631,"children":2632},{},[2633],{"type":71,"value":2634},"6-pillar grid (2 columns x 3 rows)",{"type":65,"tag":128,"props":2636,"children":2637},{},[2638],{"type":71,"value":2639},"Pillar colors: Reliability=#d45b07, Security=#dd344c, Operational Excellence=#5e6b7a, Performance Efficiency=#8c4fff, Cost Optimization=#067f68, Sustainability=#0972d3",{"type":65,"tag":128,"props":2641,"children":2642},{},[2643],{"type":71,"value":2644},"Each pillar panel: header with icon + name + status counts, body grouped by status (fail first with red left border, warn with orange, pass with green)",{"type":65,"tag":128,"props":2646,"children":2647},{},[2648],{"type":71,"value":2649},"Each finding row: status symbol + check_id (monospace) + label + detail (muted)",{"type":65,"tag":128,"props":2651,"children":2652},{},[2653],{"type":71,"value":2654},"Responsive layout (collapses to single column on mobile)",{"type":65,"tag":66,"props":2656,"children":2658},{"id":2657},"_8-priority-criteria-shared-prism-severity-schema",[2659],{"type":71,"value":2660},"8. Priority Criteria (shared Prism severity schema)",{"type":65,"tag":74,"props":2662,"children":2663},{},[2664,2666,2671],{"type":71,"value":2665},"These four levels are used consistently across all Prism skills. The Bedrock\nrecommendation output (Section 4b) uses these exact ",{"type":65,"tag":100,"props":2667,"children":2669},{"className":2668},[],[2670],{"type":71,"value":1147},{"type":71,"value":2672}," values.",{"type":65,"tag":175,"props":2674,"children":2675},{},[2676,2686,2696,2706],{"type":65,"tag":128,"props":2677,"children":2678},{},[2679,2684],{"type":65,"tag":80,"props":2680,"children":2681},{},[2682],{"type":71,"value":2683},"Critical",{"type":71,"value":2685},": Data loss risk, security breach risk, cluster unavailability (e.g. deletion protection off, encryption disabled, single instance with no failover, MVCC IDs \u003C25%)",{"type":65,"tag":128,"props":2687,"children":2688},{},[2689,2694],{"type":65,"tag":80,"props":2690,"children":2691},{},[2692],{"type":71,"value":2693},"High",{"type":71,"value":2695},": Significant performance degradation or cost waste actively occurring (e.g. buffer cache \u003C95%, no CloudWatch alarms, swap usage, TLS disabled)",{"type":65,"tag":128,"props":2697,"children":2698},{},[2699,2704],{"type":65,"tag":80,"props":2700,"children":2701},{},[2702],{"type":71,"value":2703},"Medium",{"type":71,"value":2705},": Best practice gap with moderate risk (e.g. missing Secrets Manager, non-Graviton instances, no profiler logging, oversized instances)",{"type":65,"tag":128,"props":2707,"children":2708},{},[2709,2714],{"type":65,"tag":80,"props":2710,"children":2711},{},[2712],{"type":71,"value":2713},"Low",{"type":71,"value":2715},": Optimization opportunity with low urgency (e.g. compression not enabled, cost allocation tags missing, engine upgrade available, storage type informational)",{"type":65,"tag":74,"props":2717,"children":2718},{},[2719,2721,2726,2728,2733,2735,2741,2743,2748],{"type":71,"value":2720},"Separately, each check ",{"type":65,"tag":80,"props":2722,"children":2723},{},[2724],{"type":71,"value":2725},"row",{"type":71,"value":2727}," carries a ",{"type":65,"tag":100,"props":2729,"children":2731},{"className":2730},[],[2732],{"type":71,"value":2382},{"type":71,"value":2734}," of ",{"type":65,"tag":100,"props":2736,"children":2738},{"className":2737},[],[2739],{"type":71,"value":2740},"pass | warn | fail | info",{"type":71,"value":2742},". The\nhealth score (Section 3, Step 10) excludes ",{"type":65,"tag":100,"props":2744,"children":2746},{"className":2745},[],[2747],{"type":71,"value":1324},{"type":71,"value":2749}," rows from the denominator.",{"type":65,"tag":66,"props":2751,"children":2753},{"id":2752},"_9-lessons-learned-anti-patterns",[2754],{"type":71,"value":2755},"9. Lessons Learned \u002F Anti-Patterns",{"type":65,"tag":175,"props":2757,"children":2758},{},[2759,2764,2769,2774,2779,2825,2830,2835,2840,2845,2869],{"type":65,"tag":128,"props":2760,"children":2761},{},[2762],{"type":71,"value":2763},"Always check engine version before recommending ZSTD compression (8.0+ only; use LZ4 for 5.0)",{"type":65,"tag":128,"props":2765,"children":2766},{},[2767],{"type":71,"value":2768},"Connection limit checks must match the EXACT instance type (db.r6g.large ≠ db.r6g.xlarge)",{"type":65,"tag":128,"props":2770,"children":2771},{},[2772],{"type":71,"value":2773},"BufferCacheHitRatio below 99% does NOT automatically mean the instance is undersized — check if the working set genuinely exceeds available cache",{"type":65,"tag":128,"props":2775,"children":2776},{},[2777],{"type":71,"value":2778},"NEVER recommend dropping the _id index",{"type":65,"tag":128,"props":2780,"children":2781},{},[2782,2784,2789,2790,2795,2797,2802,2804,2810,2812,2817,2819,2824],{"type":71,"value":2783},"Per-instance checks MUST identify writer vs reader roles. In the registry this is the ",{"type":65,"tag":100,"props":2785,"children":2787},{"className":2786},[],[2788],{"type":71,"value":1126},{"type":71,"value":1216},{"type":65,"tag":100,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":71,"value":1133},{"type":71,"value":2796}," flags on ",{"type":65,"tag":100,"props":2798,"children":2800},{"className":2799},[],[2801],{"type":71,"value":689},{"type":71,"value":2803},", resolved from ",{"type":65,"tag":100,"props":2805,"children":2807},{"className":2806},[],[2808],{"type":71,"value":2809},"DBClusterMembers.IsClusterWriter",{"type":71,"value":2811}," (REL9\u002FMVCC is ",{"type":65,"tag":100,"props":2813,"children":2815},{"className":2814},[],[2816],{"type":71,"value":1126},{"type":71,"value":2818},", COST9\u002Fidle is ",{"type":65,"tag":100,"props":2820,"children":2822},{"className":2821},[],[2823],{"type":71,"value":1133},{"type":71,"value":932},{"type":65,"tag":128,"props":2826,"children":2827},{},[2828],{"type":71,"value":2829},"Use EXACT check IDs from the code — never invent new numbering (REL1a not REL-1, PERF1b not PERF-1b)",{"type":65,"tag":128,"props":2831,"children":2832},{},[2833],{"type":71,"value":2834},"Silent checks (REL7, REL8) should only produce findings when problems are detected — do not emit a \"pass\" row",{"type":65,"tag":128,"props":2836,"children":2837},{},[2838],{"type":71,"value":2839},"FreeableMemory is compared against INSTANCE_RAM_GIB lookup — not a fixed threshold",{"type":65,"tag":128,"props":2841,"children":2842},{},[2843],{"type":71,"value":2844},"The health score formula excludes \"info\" status findings from the denominator",{"type":65,"tag":128,"props":2846,"children":2847},{},[2848,2853,2855,2860,2862,2867],{"type":65,"tag":100,"props":2849,"children":2851},{"className":2850},[],[2852],{"type":71,"value":1309},{"type":71,"value":2854}," checks (COST3, PERF8, PERF9, PERF15, SUST2) emit an ",{"type":65,"tag":100,"props":2856,"children":2858},{"className":2857},[],[2859],{"type":71,"value":1324},{"type":71,"value":2861}," \"requires Analyze\" row when no ",{"type":65,"tag":100,"props":2863,"children":2865},{"className":2864},[],[2866],{"type":71,"value":1199},{"type":71,"value":2868}," is present — they do not fail",{"type":65,"tag":128,"props":2870,"children":2871},{},[2872,2874,2880],{"type":71,"value":2873},"PERF1b is not a registry check — it comes from the database-level path; keep it in the catalog but don't expect a ",{"type":65,"tag":100,"props":2875,"children":2877},{"className":2876},[],[2878],{"type":71,"value":2879},"@register_check(\"PERF1b\", ...)",{"type":71,"value":2881}," decorator",{"type":65,"tag":66,"props":2883,"children":2885},{"id":2884},"_10-relation-to-prism-dash-app",[2886],{"type":71,"value":2887},"10. Relation to Prism Dash App",{"type":65,"tag":74,"props":2889,"children":2890},{},[2891,2893,2898],{"type":71,"value":2892},"This skill is executed by the Prism Dash app through the ",{"type":65,"tag":100,"props":2894,"children":2896},{"className":2895},[],[2897],{"type":71,"value":143},{"type":71,"value":2899}," plugin\nregistry (Section 4a), which is the authoritative implementation of the check catalog.\nThe app adds capabilities on top of the raw checks:",{"type":65,"tag":175,"props":2901,"children":2902},{},[2903,2934,2951,3000,3017],{"type":65,"tag":128,"props":2904,"children":2905},{},[2906,2911,2913,2918,2920,2925,2927,2932],{"type":65,"tag":80,"props":2907,"children":2908},{},[2909],{"type":71,"value":2910},"Live database-level analysis",{"type":71,"value":2912}," (index health, compression, bloat) feeds\n",{"type":65,"tag":100,"props":2914,"children":2916},{"className":2915},[],[2917],{"type":71,"value":1199},{"type":71,"value":2919},", enabling ",{"type":65,"tag":100,"props":2921,"children":2923},{"className":2922},[],[2924],{"type":71,"value":1140},{"type":71,"value":2926}," checks (COST3, PERF8, PERF9, PERF15,\nSUST2) and the ",{"type":65,"tag":100,"props":2928,"children":2930},{"className":2929},[],[2931],{"type":71,"value":696},{"type":71,"value":2933}," redundant-index check.",{"type":65,"tag":128,"props":2935,"children":2936},{},[2937,2942,2944,2949],{"type":65,"tag":80,"props":2938,"children":2939},{},[2940],{"type":71,"value":2941},"AI recommendations",{"type":71,"value":2943}," via Amazon Bedrock and ",{"type":65,"tag":100,"props":2945,"children":2947},{"className":2946},[],[2948],{"type":71,"value":1461},{"type":71,"value":2950}," (Section 4b).",{"type":65,"tag":128,"props":2952,"children":2953},{},[2954,2959,2961,2967,2969,2975,2977,2983,2985,2991,2993,2999],{"type":65,"tag":80,"props":2955,"children":2956},{},[2957],{"type":71,"value":2958},"Historical trend tracking",{"type":71,"value":2960}," via ",{"type":65,"tag":100,"props":2962,"children":2964},{"className":2963},[],[2965],{"type":71,"value":2966},"agent_memory",{"type":71,"value":2968}," (",{"type":65,"tag":100,"props":2970,"children":2972},{"className":2971},[],[2973],{"type":71,"value":2974},"wa_results.json",{"type":71,"value":2976}," + ",{"type":65,"tag":100,"props":2978,"children":2980},{"className":2979},[],[2981],{"type":71,"value":2982},".v1",{"type":71,"value":2984},"\u002F",{"type":65,"tag":100,"props":2986,"children":2988},{"className":2987},[],[2989],{"type":71,"value":2990},".v2",{"type":71,"value":2992},"\nversions, compared by ",{"type":65,"tag":100,"props":2994,"children":2996},{"className":2995},[],[2997],{"type":71,"value":2998},"load_wa_results_previous",{"type":71,"value":743},{"type":65,"tag":128,"props":3001,"children":3002},{},[3003,3008,3009,3015],{"type":65,"tag":80,"props":3004,"children":3005},{},[3006],{"type":71,"value":3007},"PDF export",{"type":71,"value":2960},{"type":65,"tag":100,"props":3010,"children":3012},{"className":3011},[],[3013],{"type":71,"value":3014},"wa_pdf.generate_wa_pdf(results, ai_data, cluster_id, region)",{"type":71,"value":3016}," —\na cover page with health score, per-pillar sections grouped by status, and an AI\nrecommendations section.",{"type":65,"tag":128,"props":3018,"children":3019},{},[3020,3022,3027],{"type":71,"value":3021},"Optional ",{"type":65,"tag":80,"props":3023,"children":3024},{},[3025],{"type":71,"value":3026},"Universal WAR Export",{"type":71,"value":3028}," (Section 6) for cross-tool interoperability.",{"type":65,"tag":74,"props":3030,"children":3031},{},[3032,3034,3039,3041,3047],{"type":71,"value":3033},"The autonomous agent (top-level ",{"type":65,"tag":100,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":71,"value":105},{"type":71,"value":3040}," skill) runs this review as its\n",{"type":65,"tag":100,"props":3042,"children":3044},{"className":3043},[],[3045],{"type":71,"value":3046},"well_architected",{"type":71,"value":3048}," module. Both the standalone skill and the Dash app share the same\ncheck IDs (REL1a, SEC1b, PERF5, …) so findings are traceable across execution modes.",{"type":65,"tag":74,"props":3050,"children":3051},{},[3052,3054,3060,3062,3067],{"type":71,"value":3053},"Consult the ",{"type":65,"tag":100,"props":3055,"children":3057},{"className":3056},[],[3058],{"type":71,"value":3059},"references\u002F",{"type":71,"value":3061}," directory for detailed DocumentDB-specific knowledge when generating recommendations. (These are the same reference docs used by the ",{"type":65,"tag":100,"props":3063,"children":3065},{"className":3064},[],[3066],{"type":71,"value":113},{"type":71,"value":3068}," skill; do not duplicate their content here.)",{"type":65,"tag":66,"props":3070,"children":3072},{"id":3071},"_11-required-iam-permissions",[3073],{"type":71,"value":3074},"11. Required IAM Permissions",{"type":65,"tag":965,"props":3076,"children":3078},{"className":1606,"code":3077,"language":1608,"meta":970,"style":970},"{\n  \"Effect\": \"Allow\",\n  \"Action\": [\n    \"rds:DescribeDBClusters\",\n    \"rds:DescribeDBInstances\",\n    \"rds:DescribeDBClusterParameters\",\n    \"rds:DescribeDBSubnetGroups\",\n    \"rds:DescribeEvents\",\n    \"rds:ListTagsForResource\",\n    \"ec2:DescribeSecurityGroups\",\n    \"cloudwatch:GetMetricStatistics\",\n    \"cloudwatch:DescribeAlarms\",\n    \"secretsmanager:ListSecrets\",\n    \"backup:ListBackupPlans\",\n    \"backup:ListBackupSelections\",\n    \"backup:GetBackupSelection\",\n    \"backup:GetBackupPlan\"\n  ],\n  \"Resource\": \"*\"\n}\n",[3079],{"type":65,"tag":100,"props":3080,"children":3081},{"__ignoreMap":970},[3082,3089,3126,3150,3170,3190,3210,3230,3250,3270,3290,3310,3330,3350,3370,3390,3410,3427,3435,3468],{"type":65,"tag":381,"props":3083,"children":3084},{"class":977,"line":978},[3085],{"type":65,"tag":381,"props":3086,"children":3087},{"style":1618},[3088],{"type":71,"value":1621},{"type":65,"tag":381,"props":3090,"children":3091},{"class":977,"line":987},[3092,3096,3101,3105,3109,3113,3118,3122],{"type":65,"tag":381,"props":3093,"children":3094},{"style":1618},[3095],{"type":71,"value":1629},{"type":65,"tag":381,"props":3097,"children":3098},{"style":1632},[3099],{"type":71,"value":3100},"Effect",{"type":65,"tag":381,"props":3102,"children":3103},{"style":1618},[3104],{"type":71,"value":1640},{"type":65,"tag":381,"props":3106,"children":3107},{"style":1618},[3108],{"type":71,"value":963},{"type":65,"tag":381,"props":3110,"children":3111},{"style":1618},[3112],{"type":71,"value":1649},{"type":65,"tag":381,"props":3114,"children":3115},{"style":1652},[3116],{"type":71,"value":3117},"Allow",{"type":65,"tag":381,"props":3119,"children":3120},{"style":1618},[3121],{"type":71,"value":1640},{"type":65,"tag":381,"props":3123,"children":3124},{"style":1618},[3125],{"type":71,"value":1120},{"type":65,"tag":381,"props":3127,"children":3128},{"class":977,"line":996},[3129,3133,3138,3142,3146],{"type":65,"tag":381,"props":3130,"children":3131},{"style":1618},[3132],{"type":71,"value":1629},{"type":65,"tag":381,"props":3134,"children":3135},{"style":1632},[3136],{"type":71,"value":3137},"Action",{"type":65,"tag":381,"props":3139,"children":3140},{"style":1618},[3141],{"type":71,"value":1640},{"type":65,"tag":381,"props":3143,"children":3144},{"style":1618},[3145],{"type":71,"value":963},{"type":65,"tag":381,"props":3147,"children":3148},{"style":1618},[3149],{"type":71,"value":2210},{"type":65,"tag":381,"props":3151,"children":3152},{"class":977,"line":1005},[3153,3157,3162,3166],{"type":65,"tag":381,"props":3154,"children":3155},{"style":1618},[3156],{"type":71,"value":1696},{"type":65,"tag":381,"props":3158,"children":3159},{"style":1652},[3160],{"type":71,"value":3161},"rds:DescribeDBClusters",{"type":65,"tag":381,"props":3163,"children":3164},{"style":1618},[3165],{"type":71,"value":1640},{"type":65,"tag":381,"props":3167,"children":3168},{"style":1618},[3169],{"type":71,"value":1120},{"type":65,"tag":381,"props":3171,"children":3172},{"class":977,"line":1014},[3173,3177,3182,3186],{"type":65,"tag":381,"props":3174,"children":3175},{"style":1618},[3176],{"type":71,"value":1696},{"type":65,"tag":381,"props":3178,"children":3179},{"style":1652},[3180],{"type":71,"value":3181},"rds:DescribeDBInstances",{"type":65,"tag":381,"props":3183,"children":3184},{"style":1618},[3185],{"type":71,"value":1640},{"type":65,"tag":381,"props":3187,"children":3188},{"style":1618},[3189],{"type":71,"value":1120},{"type":65,"tag":381,"props":3191,"children":3192},{"class":977,"line":1023},[3193,3197,3202,3206],{"type":65,"tag":381,"props":3194,"children":3195},{"style":1618},[3196],{"type":71,"value":1696},{"type":65,"tag":381,"props":3198,"children":3199},{"style":1652},[3200],{"type":71,"value":3201},"rds:DescribeDBClusterParameters",{"type":65,"tag":381,"props":3203,"children":3204},{"style":1618},[3205],{"type":71,"value":1640},{"type":65,"tag":381,"props":3207,"children":3208},{"style":1618},[3209],{"type":71,"value":1120},{"type":65,"tag":381,"props":3211,"children":3212},{"class":977,"line":1032},[3213,3217,3222,3226],{"type":65,"tag":381,"props":3214,"children":3215},{"style":1618},[3216],{"type":71,"value":1696},{"type":65,"tag":381,"props":3218,"children":3219},{"style":1652},[3220],{"type":71,"value":3221},"rds:DescribeDBSubnetGroups",{"type":65,"tag":381,"props":3223,"children":3224},{"style":1618},[3225],{"type":71,"value":1640},{"type":65,"tag":381,"props":3227,"children":3228},{"style":1618},[3229],{"type":71,"value":1120},{"type":65,"tag":381,"props":3231,"children":3232},{"class":977,"line":1041},[3233,3237,3242,3246],{"type":65,"tag":381,"props":3234,"children":3235},{"style":1618},[3236],{"type":71,"value":1696},{"type":65,"tag":381,"props":3238,"children":3239},{"style":1652},[3240],{"type":71,"value":3241},"rds:DescribeEvents",{"type":65,"tag":381,"props":3243,"children":3244},{"style":1618},[3245],{"type":71,"value":1640},{"type":65,"tag":381,"props":3247,"children":3248},{"style":1618},[3249],{"type":71,"value":1120},{"type":65,"tag":381,"props":3251,"children":3252},{"class":977,"line":1841},[3253,3257,3262,3266],{"type":65,"tag":381,"props":3254,"children":3255},{"style":1618},[3256],{"type":71,"value":1696},{"type":65,"tag":381,"props":3258,"children":3259},{"style":1652},[3260],{"type":71,"value":3261},"rds:ListTagsForResource",{"type":65,"tag":381,"props":3263,"children":3264},{"style":1618},[3265],{"type":71,"value":1640},{"type":65,"tag":381,"props":3267,"children":3268},{"style":1618},[3269],{"type":71,"value":1120},{"type":65,"tag":381,"props":3271,"children":3272},{"class":977,"line":1870},[3273,3277,3282,3286],{"type":65,"tag":381,"props":3274,"children":3275},{"style":1618},[3276],{"type":71,"value":1696},{"type":65,"tag":381,"props":3278,"children":3279},{"style":1652},[3280],{"type":71,"value":3281},"ec2:DescribeSecurityGroups",{"type":65,"tag":381,"props":3283,"children":3284},{"style":1618},[3285],{"type":71,"value":1640},{"type":65,"tag":381,"props":3287,"children":3288},{"style":1618},[3289],{"type":71,"value":1120},{"type":65,"tag":381,"props":3291,"children":3292},{"class":977,"line":1907},[3293,3297,3302,3306],{"type":65,"tag":381,"props":3294,"children":3295},{"style":1618},[3296],{"type":71,"value":1696},{"type":65,"tag":381,"props":3298,"children":3299},{"style":1652},[3300],{"type":71,"value":3301},"cloudwatch:GetMetricStatistics",{"type":65,"tag":381,"props":3303,"children":3304},{"style":1618},[3305],{"type":71,"value":1640},{"type":65,"tag":381,"props":3307,"children":3308},{"style":1618},[3309],{"type":71,"value":1120},{"type":65,"tag":381,"props":3311,"children":3312},{"class":977,"line":1938},[3313,3317,3322,3326],{"type":65,"tag":381,"props":3314,"children":3315},{"style":1618},[3316],{"type":71,"value":1696},{"type":65,"tag":381,"props":3318,"children":3319},{"style":1652},[3320],{"type":71,"value":3321},"cloudwatch:DescribeAlarms",{"type":65,"tag":381,"props":3323,"children":3324},{"style":1618},[3325],{"type":71,"value":1640},{"type":65,"tag":381,"props":3327,"children":3328},{"style":1618},[3329],{"type":71,"value":1120},{"type":65,"tag":381,"props":3331,"children":3332},{"class":977,"line":1964},[3333,3337,3342,3346],{"type":65,"tag":381,"props":3334,"children":3335},{"style":1618},[3336],{"type":71,"value":1696},{"type":65,"tag":381,"props":3338,"children":3339},{"style":1652},[3340],{"type":71,"value":3341},"secretsmanager:ListSecrets",{"type":65,"tag":381,"props":3343,"children":3344},{"style":1618},[3345],{"type":71,"value":1640},{"type":65,"tag":381,"props":3347,"children":3348},{"style":1618},[3349],{"type":71,"value":1120},{"type":65,"tag":381,"props":3351,"children":3352},{"class":977,"line":1973},[3353,3357,3362,3366],{"type":65,"tag":381,"props":3354,"children":3355},{"style":1618},[3356],{"type":71,"value":1696},{"type":65,"tag":381,"props":3358,"children":3359},{"style":1652},[3360],{"type":71,"value":3361},"backup:ListBackupPlans",{"type":65,"tag":381,"props":3363,"children":3364},{"style":1618},[3365],{"type":71,"value":1640},{"type":65,"tag":381,"props":3367,"children":3368},{"style":1618},[3369],{"type":71,"value":1120},{"type":65,"tag":381,"props":3371,"children":3372},{"class":977,"line":1998},[3373,3377,3382,3386],{"type":65,"tag":381,"props":3374,"children":3375},{"style":1618},[3376],{"type":71,"value":1696},{"type":65,"tag":381,"props":3378,"children":3379},{"style":1652},[3380],{"type":71,"value":3381},"backup:ListBackupSelections",{"type":65,"tag":381,"props":3383,"children":3384},{"style":1618},[3385],{"type":71,"value":1640},{"type":65,"tag":381,"props":3387,"children":3388},{"style":1618},[3389],{"type":71,"value":1120},{"type":65,"tag":381,"props":3391,"children":3392},{"class":977,"line":2027},[3393,3397,3402,3406],{"type":65,"tag":381,"props":3394,"children":3395},{"style":1618},[3396],{"type":71,"value":1696},{"type":65,"tag":381,"props":3398,"children":3399},{"style":1652},[3400],{"type":71,"value":3401},"backup:GetBackupSelection",{"type":65,"tag":381,"props":3403,"children":3404},{"style":1618},[3405],{"type":71,"value":1640},{"type":65,"tag":381,"props":3407,"children":3408},{"style":1618},[3409],{"type":71,"value":1120},{"type":65,"tag":381,"props":3411,"children":3412},{"class":977,"line":2153},[3413,3417,3422],{"type":65,"tag":381,"props":3414,"children":3415},{"style":1618},[3416],{"type":71,"value":1696},{"type":65,"tag":381,"props":3418,"children":3419},{"style":1652},[3420],{"type":71,"value":3421},"backup:GetBackupPlan",{"type":65,"tag":381,"props":3423,"children":3424},{"style":1618},[3425],{"type":71,"value":3426},"\"\n",{"type":65,"tag":381,"props":3428,"children":3429},{"class":977,"line":2179},[3430],{"type":65,"tag":381,"props":3431,"children":3432},{"style":1618},[3433],{"type":71,"value":3434},"  ],\n",{"type":65,"tag":381,"props":3436,"children":3437},{"class":977,"line":2187},[3438,3442,3447,3451,3455,3459,3464],{"type":65,"tag":381,"props":3439,"children":3440},{"style":1618},[3441],{"type":71,"value":1629},{"type":65,"tag":381,"props":3443,"children":3444},{"style":1632},[3445],{"type":71,"value":3446},"Resource",{"type":65,"tag":381,"props":3448,"children":3449},{"style":1618},[3450],{"type":71,"value":1640},{"type":65,"tag":381,"props":3452,"children":3453},{"style":1618},[3454],{"type":71,"value":963},{"type":65,"tag":381,"props":3456,"children":3457},{"style":1618},[3458],{"type":71,"value":1649},{"type":65,"tag":381,"props":3460,"children":3461},{"style":1652},[3462],{"type":71,"value":3463},"*",{"type":65,"tag":381,"props":3465,"children":3466},{"style":1618},[3467],{"type":71,"value":3426},{"type":65,"tag":381,"props":3469,"children":3470},{"class":977,"line":2213},[3471],{"type":65,"tag":381,"props":3472,"children":3473},{"style":1618},[3474],{"type":71,"value":2600},{"type":65,"tag":74,"props":3476,"children":3477},{},[3478,3480,3486,3488,3494],{"type":71,"value":3479},"Note: DocumentDB uses the ",{"type":65,"tag":100,"props":3481,"children":3483},{"className":3482},[],[3484],{"type":71,"value":3485},"rds",{"type":71,"value":3487}," namespace for API calls (not a separate ",{"type":65,"tag":100,"props":3489,"children":3491},{"className":3490},[],[3492],{"type":71,"value":3493},"docdb",{"type":71,"value":3495}," namespace in IAM).",{"type":65,"tag":3497,"props":3498,"children":3499},"style",{},[3500],{"type":71,"value":3501},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3503,"total":3679},[3504,3523,3542,3552,3565,3578,3588,3598,3619,3634,3649,3664],{"slug":3505,"name":3505,"fn":3506,"description":3507,"org":3508,"tags":3509,"stars":3520,"repoUrl":3521,"updatedAt":3522},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3510,3511,3514,3517],{"name":27,"slug":28,"type":16},{"name":3512,"slug":3513,"type":16},"Debugging","debugging",{"name":3515,"slug":3516,"type":16},"Logs","logs",{"name":3518,"slug":3519,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":3524,"name":3525,"fn":3526,"description":3527,"org":3528,"tags":3529,"stars":3520,"repoUrl":3521,"updatedAt":3541},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3530,3533,3534,3535,3538],{"name":3531,"slug":3532,"type":16},"Aurora","aurora",{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3536,"slug":3537,"type":16},"Serverless","serverless",{"name":3539,"slug":3540,"type":16},"SQL","sql","2026-08-04T05:35:10.770847",{"slug":3543,"name":3544,"fn":3526,"description":3527,"org":3545,"tags":3546,"stars":3520,"repoUrl":3521,"updatedAt":3551},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3547,3548,3549,3550],{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3536,"slug":3537,"type":16},{"name":3539,"slug":3540,"type":16},"2026-08-04T05:35:05.694395",{"slug":3553,"name":3554,"fn":3526,"description":3527,"org":3555,"tags":3556,"stars":3520,"repoUrl":3521,"updatedAt":3564},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3557,3558,3559,3562,3563],{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3560,"slug":3561,"type":16},"Migration","migration",{"name":3536,"slug":3537,"type":16},{"name":3539,"slug":3540,"type":16},"2026-08-04T05:35:08.749669",{"slug":3566,"name":3567,"fn":3526,"description":3527,"org":3568,"tags":3569,"stars":3520,"repoUrl":3521,"updatedAt":3577},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3570,3571,3572,3575,3576],{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3573,"slug":3574,"type":16},"PostgreSQL","postgresql",{"name":3536,"slug":3537,"type":16},{"name":3539,"slug":3540,"type":16},"2026-08-04T05:35:06.713102",{"slug":3579,"name":3580,"fn":3526,"description":3527,"org":3581,"tags":3582,"stars":3520,"repoUrl":3521,"updatedAt":3587},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3583,3584,3585,3586],{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3536,"slug":3537,"type":16},{"name":3539,"slug":3540,"type":16},"2026-08-04T05:35:10.086942",{"slug":3589,"name":3589,"fn":3526,"description":3527,"org":3590,"tags":3591,"stars":3520,"repoUrl":3521,"updatedAt":3597},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3592,3593,3594,3595,3596],{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":3560,"slug":3561,"type":16},{"name":3536,"slug":3537,"type":16},{"name":3539,"slug":3540,"type":16},"2026-08-04T05:35:07.751779",{"slug":3599,"name":3599,"fn":3600,"description":3601,"org":3602,"tags":3603,"stars":3616,"repoUrl":3617,"updatedAt":3618},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3604,3607,3610,3613],{"name":3605,"slug":3606,"type":16},"Accounting","accounting",{"name":3608,"slug":3609,"type":16},"Analytics","analytics",{"name":3611,"slug":3612,"type":16},"Cost Optimization","cost-optimization",{"name":3614,"slug":3615,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":3620,"name":3620,"fn":3621,"description":3622,"org":3623,"tags":3624,"stars":3616,"repoUrl":3617,"updatedAt":3633},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3625,3626,3627,3630],{"name":27,"slug":28,"type":16},{"name":3614,"slug":3615,"type":16},{"name":3628,"slug":3629,"type":16},"Management","management",{"name":3631,"slug":3632,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":3635,"name":3635,"fn":3636,"description":3637,"org":3638,"tags":3639,"stars":3616,"repoUrl":3617,"updatedAt":3648},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3640,3641,3642,3645],{"name":3608,"slug":3609,"type":16},{"name":3614,"slug":3615,"type":16},{"name":3643,"slug":3644,"type":16},"Financial Statements","financial-statements",{"name":3646,"slug":3647,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":3650,"name":3650,"fn":3651,"description":3652,"org":3653,"tags":3654,"stars":3616,"repoUrl":3617,"updatedAt":3663},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3655,3658,3661],{"name":3656,"slug":3657,"type":16},"Automation","automation",{"name":3659,"slug":3660,"type":16},"Documents","documents",{"name":3662,"slug":3650,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":3665,"name":3665,"fn":3666,"description":3667,"org":3668,"tags":3669,"stars":3616,"repoUrl":3617,"updatedAt":3678},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3670,3671,3674,3675],{"name":3605,"slug":3606,"type":16},{"name":3672,"slug":3673,"type":16},"Data Analysis","data-analysis",{"name":3614,"slug":3615,"type":16},{"name":3676,"slug":3677,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",159,{"items":3681,"total":996},[3682,3694,3702],{"slug":113,"name":113,"fn":3683,"description":3684,"org":3685,"tags":3686,"stars":29,"repoUrl":30,"updatedAt":3693},"optimize Amazon DocumentDB performance and configuration","Amazon DocumentDB expert advisor for database optimization, query tuning, index management, instance sizing, cost analysis, anti-pattern detection, and migration guidance. Powers Prism's conversational advisor — agentic Bedrock tool-use, two-step classify→fetch→answer chat, topic-aware reference injection, safety-gated query execution, and per-slow-query AI recommendations. Use when asking about DocumentDB best practices, performance issues, query plans, supported operators, serverless vs provisioned, storage options, backup\u002Frestore, compression, or differences from MongoDB.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3687,3688,3689,3692],{"name":3611,"slug":3612,"type":16},{"name":24,"slug":25,"type":16},{"name":3690,"slug":3691,"type":16},"Engineering","engineering",{"name":18,"slug":19,"type":16},"2026-08-07T05:03:40.122457",{"slug":4,"name":4,"fn":5,"description":6,"org":3695,"tags":3696,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3697,3698,3699,3700,3701],{"name":21,"slug":22,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"slug":105,"name":105,"fn":3703,"description":3704,"org":3705,"tags":3706,"stars":29,"repoUrl":30,"updatedAt":3712},"analyze Amazon DocumentDB with Prism Dash","Top-level guide to the Prism Dash platform — an autonomous Amazon DocumentDB analysis and advisory tool built on Python\u002FDash. Covers the Observe→Reason→Decide→Act agent loop, the AnalyzerPlugin system, the 8-module analysis pipeline, cross-module correlation, cross-run memory, the Bedrock AI advisory stack, the code review engine, and Markdown report generation. Use when you need to understand how Prism works end-to-end, where a capability lives, or how the sub-skills (documentdb-advisor, documentdb-well-architected-review) plug in.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3707,3708,3709,3710],{"name":24,"slug":25,"type":16},{"name":3690,"slug":3691,"type":16},{"name":3518,"slug":3519,"type":16},{"name":3711,"slug":969,"type":16},"Python","2026-08-07T05:03:39.767088"]