Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Provides AWS CloudFormation patterns for Amazon RDS databases. Use when creating RDS instances (MySQL, PostgreSQL, Aurora), DB clusters, multi-AZ deployments, parameter groups, subnet groups, and implementing template structure with Parameters, Outputs, Mappings, Conditions, and cross-stack references.
.claude/skills/giuseppe-trisciuoglio-aws-cloudformation-rds/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 228% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 288% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 814% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 579% | 0% |
Create production-ready Amazon RDS infrastructure using AWS CloudFormation templates. Covers RDS instances (MySQL, PostgreSQL, Aurora), DB clusters, multi-AZ deployments, parameter groups, subnet groups, security groups, and cross-stack references.
| Component | CloudFormation Type | Use Case | |-----------|-------------------|----------| | DB Instance | AWS::RDS::DBInstance | Single database instance | | DB Cluster | AWS::RDS::DBCluster | Aurora cluster | | DB Subnet Group | AWS::RDS::DBSubnetGroup | VPC deployment | | Parameter Group | AWS::RDS::DBParameterGroup | Database configuration | | Security Group | AWS::EC2::SecurityGroup | Network access control | | Secrets Manager | AWS::SecretsManager::Secret | Credential storage |
Use AWS-specific parameter types for validation.
yamlParameters: DBInstanceClass: Type: AWS::RDS::DBInstance::InstanceType Default: db.t3.micro AllowedValues: [db.t3.micro, db.t3.small, db.t3.medium] Engine: Type: String Default: mysql AllowedValues: [mysql, postgres, aurora-mysql, aurora-postgresql] MasterUsername: Type: String Default: admin AllowedPattern: "^[a-zA-Z][a-zA-Z0-9]*$" MinLength: 1 MaxLength: 16 MasterUserPassword: Type: String NoEcho: true MinLength: 8 MaxLength: 41
See template-structure.md for advanced parameter patterns, mappings, conditions, and cross-stack references.
Required for VPC deployment with subnets in different AZs.
yamlDBSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupDescription: Subnet group for RDS SubnetIds: - !Ref PrivateSubnet1 - !Ref PrivateSubnet2
See database-components.md for parameter groups, option groups, and engine-specific configurations.
Restrict access to application tier only.
yamlDBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Security group for RDS VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 3306 ToPort: 3306 SourceSecurityGroupId: !Ref AppSecurityGroup
See security-secrets.md for VPC security groups, encryption, Secrets Manager integration, and IAM authentication.
Configure instance with subnet group, security group, and settings.
yamlDBInstance: Type: AWS::RDS::DBInstance Properties: DBInstanceIdentifier: !Sub "${AWS::StackName}-mysql" DBInstanceClass: !Ref DBInstanceClass Engine: !Ref Engine MasterUsername: !Ref MasterUsername MasterUserPassword: !Ref MasterUserPassword AllocatedStorage: 20 StorageType: gp3 DBSubnetGroupName: !Ref DBSubnetGroup VPCSecurityGroups: [!Ref DBSecurityGroup] StorageEncrypted: true MultiAZ: true BackupRetentionPeriod: 7 DeletionProtection: false
See database-components.md for MySQL, PostgreSQL, Aurora cluster configurations, and parameter groups.
Configure multi-AZ deployment for production.
yamlConditions: IsProduction: !Equals [!Ref Environment, production] Resources: DBInstance: Type: AWS::RDS::DBInstance Properties: MultiAZ: !If [IsProduction, true, false] BackupRetentionPeriod: !If [IsProduction, 35, 7] DeletionProtection: !If [IsProduction, true, false] EnablePerformanceInsights: !If [IsProduction, true, false]
See high-availability.md for multi-AZ deployments, read replicas, Aurora auto-scaling, enhanced monitoring, and disaster recovery.
Export connection details for application stacks.
yamlOutputs: DBInstanceEndpoint: Description: Database endpoint address Value: !GetAtt DBInstance.Endpoint.Address Export: Name: !Sub ${AWS::StackName}-DBEndpoint DBInstancePort: Description: Database port Value: !GetAtt DBInstance.Endpoint.Port Export: Name: !Sub ${AWS::StackName}-DBPort DBConnectionString: Description: Connection string Value: !Sub jdbc:mysql://${DBInstance.Endpoint.Address}:${DBInstance.Endpoint.Port}/${DBName}
See template-structure.md for cross-stack reference patterns and import/export strategies.
Always validate before deploying, especially to production.
bash# Validate the template syntax aws cloudformation validate-template --template-body file://template.yaml # Review the change set before applying updates aws cloudformation create-change-set \ --stack-name my-rds-stack \ --template-body file://template.yaml \ --change-set-type UPDATE aws cloudformation describe-change-set --change-set-name <arn> # Execute the change set if the preview looks correct aws cloudformation execute-change-set --change-set-name <arn>
| Category | Practice | Implementation | |----------|----------|----------------| | Security | Encryption at rest | StorageEncrypted: true with KMS key | | Security | Credential management | Use Secrets Manager integration | | Security | Network isolation | Private subnets, restrictive SG rules | | Security | IAM authentication | Enable IAMDatabaseAuthentication | | HA | Multi-AZ deployment | MultiAZ: true for production | | HA | Deletion protection | DeletionProtection: true for production | | HA | Backup retention | 35 days for production, 7 for dev | | HA | Read replicas | Use for read-heavy workloads | | Cost | Storage type | Use gp3 for cost efficiency | | Cost | Instance sizing | Right-size based on workload | | Cost | Serverless | Consider Aurora Serverless for variable loads | | Operations | Change sets | Always review before applying updates | | Operations | Drift detection | Enable for template compliance | | Operations | Monitoring | Configure CloudWatch alarms |
See operational-practices.md for detailed guidance on stack policies, termination protection, and backup strategies.
Complete production-ready RDS instance with MultiAZ, encryption, and Secrets Manager integration:
yamlAWSTemplateFormatVersion: '2010-09-09' Description: Production RDS Instance Parameters: VpcId: Type: AWS::EC2::VPC::Identifier SubnetIds: Type: List<AWS::EC2::Subnet::Identifier> AppSecurityGroupId: Type: AWS::EC2::SecurityGroup::Id Environment: Type: String AllowedValues: [dev, staging, production] MasterUsername: Type: String Default: dbadmin Conditions: IsProduction: !Equals [!Ref Environment, production] Resources: DBSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupDescription: !Sub "${AWS::StackName} subnet group" SubnetIds: !Ref SubnetIds DBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: !Sub "${AWS::StackName} RDS security group" VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 3306 ToPort: 3306 SourceSecurityGroupId: !Ref AppSecurityGroupId DBInstance: Type: AWS::RDS::DBInstance DeletionPolicy: Snapshot UpdateReplacePolicy: Snapshot Properties: DBInstanceIdentifier: !Sub "${AWS::StackName}-mysql" DBInstanceClass: db.t3.medium Engine: mysql EngineVersion: '8.0' MasterUsername: !Ref MasterUsername MasterUserPassword: !Ref MasterUserPassword AllocatedStorage: 50 StorageType: gp3 StorageEncrypted: true KmsKeyId: !Ref KmsKeyId DBSubnetGroupName: !Ref DBSubnetGroup VPCSecurityGroups: [!Ref DBSecurityGroup] MultiAZ: !If [IsProduction, true, false] BackupRetentionPeriod: !If [IsProduction, 35, 7] DeletionProtection: !If [IsProduction, true, false] EnablePerformanceInsights: !If [IsProduction, true, false] PerformanceInsightsRetentionPeriod: !If [IsProduction, 731, 7] KmsKeyId: Type: AWS::KMS::Key Condition: IsProduction Properties: Description: KMS key for RDS encryption EnableKeyRotation: true KeyPolicy: Version: '2012-10-17' Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: !Sub arn:aws:iam::${AWS::AccountId}:root Action: kms:* Resource: '*' Outputs: DBEndpoint: Description: Database endpoint Value: !GetAtt DBInstance.Endpoint.Address Export: Name: !Sub ${AWS::StackName}-DBEndpoint DBPort: Description: Database port Value: !GetAtt DBInstance.Endpoint.Port Export: Name: !Sub ${AWS::StackName}-DBPort
See examples.md for additional examples including Aurora clusters, read replicas, and multi-region setups.
See constraints.md for complete constraints, troubleshooting guides, and performance considerations.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 19,738 | 3,776 | -81% | 1 | 1 | 0% | 3,643 | 3,576 | -2% | 0 | 0 | — |
case-02 | pass→pass | 5,512 | 3,648 | -34% | 1 | 1 | 0% | 923 | 3,578 | +288% | 0 | 0 | — |
case-03 | pass→pass | 2,147 | 3,334 | +55% | 1 | 1 | 0% | 382 | 3,493 | +814% | 0 | 0 | — |
case-04 | pass→pass | 2,920 | 4,478 | +53% | 1 | 1 | 0% | 548 | 3,723 | +579% | 0 | 0 | — |
case-05 | pass→pass | 3,104 | 3,225 | +4% | 1 | 1 | 0% | 530 | 3,446 | +550% | 0 | 0 | — |
case-06 | pass→pass | 2,697 | 2,138 | -21% | 1 | 1 | 0% | 436 | 3,285 | +653% | 0 | 0 | — |
case-07 | pass→pass | 5,351 | 3,591 | -33% | 1 | 1 | 0% | 725 | 3,612 | +398% | 0 | 0 | — |
case-08 | pass→pass | 3,718 | 3,722 | +0% | 1 | 1 | 0% | 659 | 3,527 | +435% | 0 | 0 | — |
case-09 | pass→pass | 3,666 | 3,363 | -8% | 1 | 1 | 0% | 627 | 3,512 | +460% | 0 | 0 | — |
case-10 | pass→pass | 3,617 | 3,615 | -0% | 1 | 1 | 0% | 550 | 3,434 | +524% | 0 | 0 | — |
case-11 | pass→pass | 3,730 | 3,163 | -15% | 1 | 1 | 0% | 599 | 3,525 | +488% | 0 | 0 | — |
case-12 | pass→pass | 3,800 | 3,879 | +2% | 1 | 1 | 0% | 686 | 3,598 | +424% | 0 | 0 | — |
case-13 | pass→pass | 4,715 | 4,688 | -1% | 1 | 1 | 0% | 775 | 3,498 | +351% | 0 | 0 | — |
case-14 | pass→pass | 3,046 | 2,182 | -28% | 1 | 1 | 0% | 567 | 3,327 | +487% | 0 | 0 | — |
case-15 | pass→pass | 3,778 | 2,410 | -36% | 1 | 1 | 0% | 664 | 3,386 | +410% | 0 | 0 | — |
case-16 | fail→pass | 5,879 | 4,037 | -31% | 1 | 1 | 0% | 1,092 | 3,578 | +228% | 0 | 0 | — |
case-17 | pass→pass | 5,998 | 2,755 | -54% | 1 | 1 | 0% | 524 | 3,319 | +533% | 0 | 0 | — |
case-18 | pass→pass | 6,041 | 5,070 | -16% | 1 | 1 | 0% | 1,075 | 3,887 | +262% | 0 | 0 | — |
case-19 | pass→pass | 3,729 | 2,859 | -23% | 1 | 1 | 0% | 500 | 3,403 | +581% | 0 | 0 | — |
case-20 | pass→pass | 6,199 | 5,477 | -12% | 1 | 1 | 0% | 1,116 | 4,013 | +260% | 0 | 0 | — |
case-21 | pass→pass | 5,340 | 6,818 | +28% | 1 | 1 | 0% | 852 | 3,827 | +349% | 0 | 0 | — |
case-22 | pass→pass | 9,130 | 19,135 | +110% | 1 | 1 | 0% | 1,645 | 4,838 | +194% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.