Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Provides AWS CloudFormation patterns for Amazon S3. Use when creating S3 buckets, policies, versioning, lifecycle rules, and implementing template structure with Parameters, Outputs, Mappings, Conditions, and cross-stack references.
.claude/skills/giuseppe-trisciuoglio-aws-cloudformation-s3/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 161% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 151% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 130% | 0% |
Provides S3 bucket configurations, policies, versioning, lifecycle rules, and CloudFormation template structure best practices for production-ready infrastructure.
S3 bucket configurations, policies, versioning, lifecycle rules, and CloudFormation template structure for production-ready infrastructure.
AWS::S3::Bucket with versioning, encryption, PublicAccessBlockValidate before deploy:
bashaws cloudformation validate-template --template-body file://template.yaml
Deploy with rollback on failure:
bashaws cloudformation deploy \ --template-file template.yaml \ --stack-name my-s3-stack \ --capabilities CAPABILITY_IAM
If deployment fails, CloudFormation automatically rolls back. Check failures with:
bashaws cloudformation describe-stack-events --stack-name my-s3-stack
| Resource Type | Purpose | |---------------|---------| | AWS::S3::Bucket | Create S3 bucket | | AWS::S3::BucketPolicy | Set bucket-level policies | | AWS::S3::BucketReplication | Cross-region replication | | Parameters | Input values for customization | | Mappings | Static configuration tables | | Conditions | Conditional resource creation | | Outputs | Return values for cross-stack references |
yamlResources: DataBucket: Type: AWS::S3::Bucket Properties: BucketName: my-data-bucket
yamlDataBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub "${AWS::StackName}-data" VersioningConfiguration: Status: Enabled BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true
yamlDataBucket: Type: AWS::S3::Bucket Properties: LifecycleConfiguration: Rules: - Id: ArchiveOldData Status: Enabled Transitions: - StorageClass: GLACIER TransitionInDays: 365
yamlBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref DataBucket PolicyDocument: Statement: - Effect: Allow Principal: AWS: !Ref RoleArn Action: - s3:GetObject Resource: !Sub "${DataBucket.Arn}/*"
See references/complete-examples.md for more complete examples including CORS, static websites, replication, and production-ready configurations.
yamlAWSTemplateFormatVersion: 2010-09-09 Description: Template description Mappings: {} # Static configuration tables Metadata: {} # Additional information Parameters: {} # Input values Conditions: {} # Conditional creation Transform: {} # Macro processing Resources: {} # AWS resources (REQUIRED) Outputs: {} # Return values
yamlParameters: BucketName: Type: String Description: S3 bucket name Default: my-bucket MinLength: 3 MaxLength: 63 AllowedPattern: '^[a-z0-9-]+$'
yamlConditions: IsProduction: !Equals [!Ref Environment, prod] ShouldEnableVersioning: !Equals [!Ref EnableVersioning, 'true'] Resources: DataBucket: Type: AWS::S3::Bucket Properties: VersioningConfiguration: Status: !If [ShouldEnableVersioning, Enabled, Suspended]
yamlOutputs: BucketName: Description: Name of the S3 bucket Value: !Ref DataBucket Export: Name: !Sub '${AWS::StackName}-BucketName'
See references/advanced-configuration.md for detailed Mappings, Conditions, Parameters, and cross-stack references.
Bucket already exists: Use unique bucket names with CloudFormation stack name Access denied: Verify bucket policy and IAM permissions Versioning conflicts: Cannot suspend versioning once objects exist Lifecycle not working: Check rule status and prefix filters Cross-stack references: Ensure outputs are exported before importing
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 13,013 | 10,699 | -18% | 1 | 1 | 0% | 2,549 | 3,828 | +50% | 0 | 0 | — |
case-02 | pass→pass | 6,369 | 6,884 | +8% | 1 | 1 | 0% | 1,124 | 2,936 | +161% | 0 | 0 | — |
case-03 | pass→pass | 5,866 | 4,516 | -23% | 1 | 1 | 0% | 998 | 2,507 | +151% | 0 | 0 | — |
case-04 | pass→pass | 5,040 | 2,768 | -45% | 1 | 1 | 0% | 928 | 2,139 | +130% | 0 | 0 | — |
case-05 | fail→pass | 8,461 | 7,232 | -15% | 1 | 1 | 0% | 1,446 | 2,948 | +104% | 0 | 0 | — |
case-06 | pass→pass | 7,786 | 6,630 | -15% | 1 | 1 | 0% | 1,512 | 2,907 | +92% | 0 | 0 | — |
case-07 | fail→fail | 7,758 | 6,486 | -16% | 1 | 1 | 0% | 1,619 | 2,821 | +74% | 0 | 0 | — |
case-08 | pass→pass | 4,393 | 3,931 | -11% | 1 | 1 | 0% | 639 | 2,224 | +248% | 0 | 0 | — |
case-09 | pass→pass | 3,991 | 2,079 | -48% | 1 | 1 | 0% | 680 | 2,001 | +194% | 0 | 0 | — |
case-10 | pass→pass | 3,453 | 2,762 | -20% | 1 | 1 | 0% | 624 | 2,165 | +247% | 0 | 0 | — |
case-11 | pass→pass | 5,117 | 3,180 | -38% | 1 | 1 | 0% | 867 | 2,187 | +152% | 0 | 0 | — |
case-12 | pass→pass | 12,361 | 8,463 | -32% | 1 | 1 | 0% | 1,967 | 2,988 | +52% | 0 | 0 | — |
case-13 | pass→pass | 7,626 | 3,800 | -50% | 1 | 1 | 0% | 1,222 | 2,176 | +78% | 0 | 0 | — |
case-14 | pass→pass | 11,021 | 10,353 | -6% | 1 | 1 | 0% | 1,155 | 2,505 | +117% | 0 | 0 | — |
case-15 | pass→pass | 5,845 | 4,261 | -27% | 1 | 1 | 0% | 833 | 2,346 | +182% | 0 | 0 | — |
case-16 | pass→pass | 10,451 | 7,542 | -28% | 1 | 1 | 0% | 1,722 | 2,848 | +65% | 0 | 0 | — |
case-17 | pass→pass | 7,322 | 7,019 | -4% | 1 | 1 | 0% | 1,309 | 2,970 | +127% | 0 | 0 | — |
case-18 | pass→pass | 3,466 | 1,990 | -43% | 1 | 1 | 0% | 468 | 1,943 | +315% | 0 | 0 | — |
case-19 | pass→pass | 4,647 | 2,825 | -39% | 1 | 1 | 0% | 817 | 2,134 | +161% | 0 | 0 | — |
case-20 | pass→pass | 3,946 | 4,828 | +22% | 1 | 1 | 0% | 703 | 2,486 | +254% | 0 | 0 | — |
case-21 | pass→pass | 7,711 | 18,227 | +136% | 1 | 1 | 0% | 1,410 | 3,761 | +167% | 0 | 0 | — |
case-22 | pass→pass | 4,483 | 4,282 | -4% | 1 | 1 | 0% | 880 | 2,516 | +186% | 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.