Skip to content

Conversation

@scorbiere
Copy link
Contributor

Issue #22103

Closes #22103.

Reason for this change

When configuring S3 bucket lifecycle rules with transitions, CloudFormation requires exactly one of TransitionDate or TransitionInDays to be specified. However, the CDK currently allows configurations where neither or both properties are specified, which leads to deployment failures. This change adds validation during synthesis to catch these invalid configurations earlier in the development process.

Description of changes

This change adds validation during synthesis to ensure that exactly one of transitionDate or transitionAfter is specified in S3 bucket lifecycle rule transitions. Previously, this validation was only performed during deployment, leading to failed deployments when neither or both properties were specified.

The validation is added to the parseLifecycleRule function in the S3 bucket implementation, which checks each transition in the lifecycle rules.

Describe any new or updated permissions being added

No new or updated IAM permissions are required for this change. This is purely a validation improvement in the CDK synthesis process.

Description of how you validated changes

Added two unit tests to verify the validation:

  1. A test that verifies an error is thrown when neither transitionDate nor transitionAfter is specified
  2. A test that verifies an error is thrown when both transitionDate and transitionAfter are specified

Also ran integration tests to ensure that the change doesn't affect existing valid configurations. No snapshots were updated, confirming that the change only adds validation and doesn't modify the CloudFormation output for valid configurations.

Checklist


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

…tly one of transitionDate or transitionAfter is specified

Fixes aws#22103

This change adds validation during synthesis to ensure that exactly one of transitionDate or transitionAfter is specified in S3 bucket lifecycle rule transitions. Previously, this validation was only performed during deployment, leading to failed deployments when neither or both properties were specified.
@aws-cdk-automation aws-cdk-automation requested a review from a team March 11, 2025 04:01
@github-actions github-actions bot added bug This issue is a bug. effort/small Small work item – less than a day of effort p1 labels Mar 11, 2025
@mergify mergify bot added the contribution/core This is a PR that came from AWS. label Mar 11, 2025
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(This review is outdated)

@codecov
Copy link

codecov bot commented Mar 11, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 82.38%. Comparing base (c00e647) to head (2bdfcb9).
Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #33731   +/-   ##
=======================================
  Coverage   82.38%   82.38%           
=======================================
  Files         120      120           
  Lines        6937     6937           
  Branches     1170     1170           
=======================================
  Hits         5715     5715           
  Misses       1119     1119           
  Partials      103      103           
Flag Coverage Δ
suite.unit 82.38% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
packages/aws-cdk ∅ <ø> (∅)
packages/aws-cdk-lib/core 82.38% <ø> (ø)
🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

}

// Validate transitions: exactly one of transitionDate or transitionAfter must be specified
if (rule.transitions) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: It will be good to update the README with the correct example here

…er must be specified

Updates the README.md to make it clear that exactly one of transitionDate or transitionAfter must be specified in lifecycle rule transitions.
@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: 2bdfcb9
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@scorbiere
Copy link
Contributor Author

Exemption Request: This change adds validation during synthesis to ensure that exactly one of transitionDate or transitionAfter is specified in S3 bucket lifecycle rule transitions. Previously, this validation was only performed during deployment, leading to failed deployments when neither or both properties were specified.

@aws-cdk-automation aws-cdk-automation added the pr-linter/exemption-requested The contributor has requested an exemption to the PR Linter feedback. label Mar 13, 2025
@godwingrs22 godwingrs22 added pr-linter/exempt-integ-test The PR linter will not require integ test changes and removed pr-linter/exemption-requested The contributor has requested an exemption to the PR Linter feedback. labels Mar 13, 2025
@aws-cdk-automation aws-cdk-automation dismissed their stale review March 13, 2025 22:13

✅ Updated pull request passes all PRLinter validations. Dismissing previous PRLinter review.

@mergify
Copy link
Contributor

mergify bot commented Mar 13, 2025

Thank you for contributing! Your pull request will be updated from main and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork).

@mergify mergify bot merged commit 4128ff4 into aws:main Mar 13, 2025
36 checks passed
@github-actions
Copy link
Contributor

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 13, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

bug This issue is a bug. contribution/core This is a PR that came from AWS. effort/small Small work item – less than a day of effort p1 pr-linter/exempt-integ-test The PR linter will not require integ test changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

(@aws-cdk/aws-s3): Add validation for lifecycleRules

4 participants