rds-operation-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited rds-operation-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Conduct a comprehensive operational review of Amazon RDS instances and Amazon Aurora clusters aligned with the AWS Well-Architected Framework and the Amazon RDS and Aurora best-practices guides.
This skill uses the AWS RDS, Aurora, CloudWatch, CloudWatch Logs, EC2, and Cost Explorer APIs only — no Kubernetes (k8s) or eks MCP tools. All data is collected through native AWS APIs available to the DevOps Agent's primary cloud source role.
Activate this skill when the user asks to:
Ask the user which databases to review. Accept:
If no scope is given, default to all configured account regions.
Per region (skip empty regions):
rds.DescribeDBInstances # RDS instances + Aurora cluster member instances
rds.DescribeDBClusters # Aurora clusters (skip if user said "Provisioned only")
rds.DescribeDBClusterEndpoints # Aurora reader/writer endpoints
rds.DescribeGlobalClusters # Aurora Global Database (cross-region)
rds.DescribeDBProxies # RDS ProxyCapture per resource:
rds.ListTagsForResource — param name is ResourceName and value is the resource ARN)For each database, collect:
rds.DescribeDBParameterGroups # custom vs default
rds.DescribeDBClusterParameterGroups # Aurora
rds.DescribeOptionGroups # RDS option groups
rds.DescribeDBSubnetGroups # subnet AZ spread
ec2.DescribeSecurityGroups # vpcSecurityGroupIds → ingress rules
kms.DescribeKey # for KmsKeyId (encryption at rest)rds.DescribeDBSnapshots # manual + automated, per instance
rds.DescribeDBClusterSnapshots # Aurora
rds.DescribeDBInstanceAutomatedBackups
rds.DescribeDBClusterAutomatedBackups
rds.DescribeDBEngineVersions # current vs latest minor/major
rds.DescribePendingMaintenanceActions
rds.DescribeEvents # last 14 days; duration in MINUTES (20160)
rds.DescribeEventSubscriptionsFor each instance/cluster, also fetch:
rds.DescribeDBLogFiles — list of logs available locally on the DBlogs.DescribeLogGroups with prefix:/aws/rds/instance/<dbInstanceIdentifier>//aws/rds/cluster/<dbClusterIdentifier>/One cloudwatch.GetMetricData call per resource. Period: 21600 (6 hours). StartTime: 7 days ago. EndTime: now.
DBInstanceIdentifier)| id | metricName | stat | unit |
|---|---|---|---|
cpu | CPUUtilization | Average | % |
freeMem | FreeableMemory | Minimum | bytes |
freeSpace | FreeStorageSpace | Minimum | bytes |
readIops | ReadIOPS | Average | count/s |
writeIops | WriteIOPS | Average | count/s |
readLat | ReadLatency | Average | s |
writeLat | WriteLatency | Average | s |
dbConn | DatabaseConnections | Maximum | count |
swap | SwapUsage | Average | bytes |
netIn | NetworkReceiveThroughput | Average | bytes/s |
netOut | NetworkTransmitThroughput | Average | bytes/s |
binLog | BinLogDiskUsage | Average | bytes |
replLag | ReplicaLag | Maximum | s |
DBClusterIdentifier)| id | metricName | stat | unit |
|---|---|---|---|
cpu | CPUUtilization | Average | % |
freeMem | FreeableMemory | Minimum | bytes |
dbConn | DatabaseConnections | Maximum | count |
replLag | AuroraReplicaLag | Maximum | ms |
bufCache | BufferCacheHitRatio | Average | % |
commitLat | CommitLatency | Average | ms |
readLat | ReadLatency | Average | s |
writeLat | WriteLatency | Average | s |
volReadIops | VolumeReadIOPs | Sum | count |
volWriteIops | VolumeWriteIOPs | Sum | count |
serverlessAcu | ServerlessDatabaseCapacity | Average | ACU |
Same instance metrics as 5.1, dimensioned by DBInstanceIdentifier of each cluster member.
Fetch cloudwatch.DescribeAlarmsForMetric for the key metrics (CPUUtilization, FreeStorageSpace, DatabaseConnections, ReadLatency, WriteLatency, ReplicaLag / AuroraReplicaLag) per resource so the report can flag missing alarms.
Per database log group, scan with logs.FilterLogEvents for:
| Pattern | What it indicates |
|---|---|
ERROR / FATAL | engine errors |
Out of memory / OOM | memory pressure |
connection limit exceeded / too many connections | connection saturation |
deadlock / lock wait timeout | contention |
slow query / duration: (Postgres slow log) | query performance |
aborted connection (MySQL) | client/network issues |
replication has stopped / IO_THREAD errors | replication health |
checkpoint warnings / archiver failed | I/O / WAL issues |
failed to connect / authentication failed | auth/network |
Record occurrence counts per pattern over the 7-day window.
Use rds.DescribeEvents (last 14 days) per resource — covers the same operational signal as CloudTrail for RDS without an extra API permission. Look for: failover, restart, parameter group apply, out-of-memory, storage-full, low-storage, automated-backup-failed, maintenance-related events, read replica error, instance stopped.
Once per review (not per resource):
costexplorer.GetCostAndUsage # 3 months, by USAGE_TYPE,
# filter Service = "Amazon Relational Database Service"
rds.DescribeReservedDBInstances # RI inventoryEstimate per-database monthly cost as a proportional split of the latest month total (Cost Explorer doesn't break down per DB):
vCPUs(instance class) × (Multi-AZ ? 2 : 1) + allocatedStorageGB.Evaluate ALL collected data across the five Well-Architected pillars and assign a severity to every finding: CRITICAL, HIGH, MEDIUM, LOW, or INFO.
PubliclyAccessible=true → CRITICAL for production. Security groups with 0.0.0.0/0 ingress on the DB port → CRITICAL.StorageEncrypted=false → HIGH (or CRITICAL for regulated workloads). Customer-managed KMS key preferred over AWS-managed.rds.force_ssl=1 (Postgres) / require_secure_transport=ON (MySQL/MariaDB) → MEDIUM if not set.IAMDatabaseAuthenticationEnabled=false → MEDIUM. Master password in app code instead of Secrets Manager → HIGH.EnabledCloudwatchLogsExports → MEDIUM (HIGH for PCI/HIPAA scope).Ref: High Availability for Amazon RDS
BackupRetentionPeriod=0 → CRITICAL. <7 days for production → HIGH.DeletionProtection=false → HIGH.AutoMinorVersionUpgrade=false for non-prod → MEDIUM.default.<engine> parameter group → MEDIUM (can't tune).ReplicaLag 7-day max > 30s → HIGH; > 300s → CRITICAL.7-day metric thresholds (full table in references/metrics-thresholds.md):
CPUUtilization avg > 70% → MEDIUM, > 90% → HIGH.FreeStorageSpace < 20% allocated → HIGH, < 10% → CRITICAL.FreeableMemory < 10% instance class memory → HIGH; sustained SwapUsage > 0 → MEDIUM.DatabaseConnections max > 80% of max_connections parameter → HIGH.ReadLatency / WriteLatency avg > 20ms (10ms for io1/io2) → MEDIUM.BufferCacheHitRatio (Aurora) < 95% → MEDIUM, < 90% → HIGH.BinLogDiskUsage growth without retention bounds → MEDIUM.Ref: Cost-Optimized Architectures
DBInstanceStatus=stopped (still pays storage) → HIGH.db.m4 / db.r4 / db.t2 → MEDIUM.StorageType=gp2 → MEDIUM (≈20% cheaper, equal/better performance).io1/io2 with avg IOPS used / IOPS provisioned < 50% → MEDIUM.MaxAllocatedStorage not set → LOW, increases stockout risk.DatabaseConnections 7-day max < 5 + CPUUtilization 7-day avg < 5% → MEDIUM (candidate to stop / delete).Environment, Owner, CostCenter → LOW.db.r5, db.m5, db.t3) where Graviton is supported → MEDIUM (~20% saving).CPUUtilization, FreeStorageSpace, DatabaseConnections, FreeableMemory, ReplicaLag → MEDIUM each.rds.DescribeEventSubscriptions covering this resource → MEDIUM.Environment, Owner, Runbook, OnCall) → LOW.Generate a separate shareable report artifact for each resource reviewed.
Artifact naming: rds-review-<resource-name>-<YYYY-MM-DD>.md Example: rds-review-prod-aurora-2026-04-29.md
For each resource, create the artifact as a Markdown document with:
# RDS / Aurora Operational Review — <resource-name>
Account: <account-id> | Region: <region> | Date: <YYYY-MM-DD>
Engine: <engine> <engineVersion> | Class: <dbInstanceClass / serverlessV2 ACU> | Multi-AZ: <yes/no>| Item | Value | | Engine / version | … | | Storage | type, allocated, max, IOPS, throughput, encrypted (KMS) | | Network | VPC, subnet group, AZs, public access, security groups | | Backup | retention, window, automated, deletion protection | | HA / DR | Multi-AZ, replicas, Global DB | | Auth | IAM auth, Secrets Manager, master user | | Observability | Performance Insights, Enhanced Monitoring, log exports |
For each of Security, Reliability, Performance, Cost, Operational Excellence:
| # | Finding | Severity | Current State | Recommendation |
| Metric | Stat | 7-Day Avg | 7-Day Max / Min | Status | Finding |
| Pattern | Occurrences | Severity | Finding |
Notable events (failovers, restarts, low-storage, OOM, maintenance) with timestamps.
List from rds.DescribePendingMaintenanceActions with action type, target window, age.
Current vs latest minor / latest major. Flag EOL.
| # | Finding | Severity | Pillar | Effort | Impact |
| Severity | Definition | SLA |
|---|---|---|
| CRITICAL | Immediate risk to availability, security, or data integrity | Fix within 24–48 hours |
| HIGH | Significant gap that could lead to incidents | Fix within 1 week |
| MEDIUM | Notable improvement opportunity | Plan within 30 days |
| LOW | Minor optimization or hardening | Address when convenient |
| INFO | Observation, no action required | N/A |
innodb_buffer_pool_size, max_connections, slow query log,binlog retention, deprecated query_cache_type on 8.0+.
shared_buffers, work_mem, autovacuum, pg_stat_statements,log_min_duration_statement, replication slots.
parallelism, Always On AGs vs Multi-AZ.
Backtrack (MySQL only), cluster cache management.
rds.ListTagsForResource — parameter is ResourceName, value is the resource ARN.rds.DescribeEvents — Duration is in minutes (20160 = 14 days).applicationautoscaling.DescribeScalableTargets — ServiceNamespace="rds" covers Aurora replica autoscaling.logs.DescribeLogGroups prefix differs:/aws/rds/instance/<id>//aws/rds/cluster/<id>/AuroraReplicaLag, BufferCacheHitRatio,VolumeReadIOPs), others are instance-only (FreeableMemory, CPUUtilization per member). Query the right dimension or both.
rds.DescribeDBSnapshots requires pagination for accounts with many snapshots —use MaxRecords and Marker.
This skill explicitly does not call:
k8s MCP — RDS is fully managed; no cluster API exists.eks MCP — outside scope.If a customer needs deeper SQL-level analysis (e.g. Performance Insights db.load breakdowns, top SQL by wait event), call pi.GetResourceMetrics and pi.DescribeDimensionKeys directly — both are in the same rds permission family when Performance Insights is enabled.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.