Install any skill in seconds. Free to start, no credit card required.
Get Started Free →AWS RDS relational database service for managed databases. Use when provisioning databases, configuring backups, managing replicas, troubleshooting connectivity, or optimizing performance.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 216% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 170% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 303% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 187% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 433% | 0% |
Amazon Relational Database Service (RDS) provides managed relational databases including MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, and Aurora. RDS handles provisioning, patching, backups, and failover.
| Category | Example | Use Case | |----------|---------|----------| | Standard | db.m6g.large | General purpose | | Memory Optimized | db.r6g.large | High memory workloads | | Burstable | db.t3.medium | Variable workloads, dev/test |
| Type | IOPS | Use Case | |------|------|----------| | gp3 | 3,000-16,000 | Most workloads | | io1/io2 | Up to 256,000 | High-performance OLTP | | magnetic | N/A | Legacy, avoid |
Asynchronous copies for read scaling. Can be cross-region.
AWS CLI:
bash# Create DB subnet group aws rds create-db-subnet-group \ --db-subnet-group-name my-db-subnet-group \ --db-subnet-group-description "Private subnets for RDS" \ --subnet-ids subnet-12345678 subnet-87654321 # Create security group (allow PostgreSQL from app) aws ec2 create-security-group \ --group-name rds-postgres-sg \ --description "RDS PostgreSQL access" \ --vpc-id vpc-12345678 aws ec2 authorize-security-group-ingress \ --group-id sg-rds12345 \ --protocol tcp \ --port 5432 \ --source-group sg-app12345 # Create RDS instance aws rds create-db-instance \ --db-instance-identifier my-postgres \ --db-instance-class db.t3.medium \ --engine postgres \ --engine-version 16.1 \ --master-username admin \ --master-user-password 'SecurePassword123!' \ --allocated-storage 100 \ --storage-type gp3 \ --db-subnet-group-name my-db-subnet-group \ --vpc-security-group-ids sg-rds12345 \ --multi-az \ --backup-retention-period 7 \ --storage-encrypted \ --no-publicly-accessible
boto3:
pythonimport boto3 rds = boto3.client('rds') response = rds.create_db_instance( DBInstanceIdentifier='my-postgres', DBInstanceClass='db.t3.medium', Engine='postgres', EngineVersion='16.1', MasterUsername='admin', MasterUserPassword='SecurePassword123!', AllocatedStorage=100, StorageType='gp3', DBSubnetGroupName='my-db-subnet-group', VpcSecurityGroupIds=['sg-rds12345'], MultiAZ=True, BackupRetentionPeriod=7, StorageEncrypted=True, PubliclyAccessible=False )
bashaws rds create-db-instance-read-replica \ --db-instance-identifier my-postgres-replica \ --source-db-instance-identifier my-postgres \ --db-instance-class db.t3.medium \ --availability-zone us-east-1b
bashaws rds create-db-snapshot \ --db-snapshot-identifier my-postgres-snapshot-2024-01-15 \ --db-instance-identifier my-postgres
bashaws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier my-postgres-restored \ --db-snapshot-identifier my-postgres-snapshot-2024-01-15 \ --db-instance-class db.t3.medium \ --db-subnet-group-name my-db-subnet-group \ --vpc-security-group-ids sg-rds12345
bashaws rds restore-db-instance-to-point-in-time \ --source-db-instance-identifier my-postgres \ --target-db-instance-identifier my-postgres-pitr \ --restore-time 2024-01-15T10:30:00Z \ --db-instance-class db.t3.medium
bash# Change instance class (with downtime) aws rds modify-db-instance \ --db-instance-identifier my-postgres \ --db-instance-class db.m6g.large \ --apply-immediately # Scale storage (no downtime) aws rds modify-db-instance \ --db-instance-identifier my-postgres \ --allocated-storage 200 \ --apply-immediately
pythonimport boto3 import psycopg2 rds = boto3.client('rds') # Generate auth token token = rds.generate_db_auth_token( DBHostname='my-postgres.abc123.us-east-1.rds.amazonaws.com', Port=5432, DBUsername='iam_user', Region='us-east-1' ) # Connect conn = psycopg2.connect( host='my-postgres.abc123.us-east-1.rds.amazonaws.com', port=5432, database='mydb', user='iam_user', password=token, sslmode='require' )
| Command | Description | |---------|-------------| | aws rds create-db-instance | Create instance | | aws rds describe-db-instances | List instances | | aws rds modify-db-instance | Modify settings | | aws rds delete-db-instance | Delete instance | | aws rds reboot-db-instance | Reboot instance | | aws rds start-db-instance | Start stopped instance | | aws rds stop-db-instance | Stop instance |
| Command | Description | |---------|-------------| | aws rds create-db-snapshot | Manual snapshot | | aws rds describe-db-snapshots | List snapshots | | aws rds restore-db-instance-from-db-snapshot | Restore from snapshot | | aws rds restore-db-instance-to-point-in-time | Point-in-time restore | | aws rds copy-db-snapshot | Copy snapshot |
| Command | Description | |---------|-------------| | aws rds create-db-instance-read-replica | Create read replica | | aws rds promote-read-replica | Promote to standalone |
bash# Enforce SSL in PostgreSQL aws rds modify-db-parameter-group \ --db-parameter-group-name my-pg-params \ --parameters "ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=pending-reboot"
Causes:
Debug:
bash# Check security group aws ec2 describe-security-groups --group-ids sg-rds12345 # Check instance status aws rds describe-db-instances \ --db-instance-identifier my-postgres \ --query "DBInstances[0].{Status:DBInstanceStatus,Endpoint:Endpoint}" # Test connectivity from EC2 nc -zv my-postgres.abc123.us-east-1.rds.amazonaws.com 5432
Debug:
bash# Enable Enhanced Monitoring aws rds modify-db-instance \ --db-instance-identifier my-postgres \ --monitoring-interval 60 \ --monitoring-role-arn arn:aws:iam::123456789012:role/rds-monitoring-role # Enable Performance Insights aws rds modify-db-instance \ --db-instance-identifier my-postgres \ --enable-performance-insights \ --performance-insights-retention-period 7
Solutions:
Symptom: Instance becomes unavailable
Prevention:
bash# Enable storage autoscaling aws rds modify-db-instance \ --db-instance-identifier my-postgres \ --max-allocated-storage 500 # Set CloudWatch alarm aws cloudwatch put-metric-alarm \ --alarm-name "RDS-Storage-Low" \ --metric-name FreeStorageSpace \ --namespace AWS/RDS \ --dimensions Name=DBInstanceIdentifier,Value=my-postgres \ --statistic Average \ --period 300 \ --threshold 10000000000 \ --comparison-operator LessThanThreshold \ --evaluation-periods 2 \ --alarm-actions arn:aws:sns:us-east-1:123456789012:alerts
Monitor:
bashaws cloudwatch get-metric-statistics \ --namespace AWS/RDS \ --metric-name ReplicaLag \ --dimensions Name=DBInstanceIdentifier,Value=my-postgres-replica \ --start-time $(date -d '1 hour ago' -u +%Y-%m-%dT%H:%M:%SZ) \ --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \ --period 60 \ --statistics Average
Causes:
Other measured skills in the registry, with their headline benchmark lift.