Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(core): Ability to set Stack termination protection on Stage level (and inherit by Stacks within it) #31449

Open
1 of 2 tasks
aripalo opened this issue Sep 15, 2024 · 1 comment
Labels
@aws-cdk/core Related to core CDK functionality effort/medium Medium work item – several days of effort feature-request A feature should be added or improved. p2

Comments

@aripalo
Copy link

aripalo commented Sep 15, 2024

Describe the feature

Add ability to define Stack (default) termination protection via (parent) Stage, as demonstrated by an example test scenario:

test('Stack inherits termination protection from Stage', () => {
    // GIVEN
    const app = new App();
    const stage = new Stage(app, 'Stage', {
      terminationProtection: true,
    });

    // WHEN
    const stack1 = new Stack(stage, 'Stack1');

    // THEN
    expect(stack1.terminationProtection).toEqual(true);
});

Additionally any inner Stage and/or Stack within the (parent) Stage scope can override the inherited value.

Use Case

Stages are a mechanism to "group" Stacks together. There are multiple use cases / reasons to group stacks using Stages, but one of them is to define an "application environment" (not to be confused with cdk.Environment) via a Stage: Think of development or production Stage etc.

The specific Stage use case / reason, doesn't matter that much, but often it would be handy to be able to define Termination Protection for all Stacks within the scope of specific Stage.

One could make the statement, that this is achievable via Aspects, but as stacks default to having terminationProtection: false, there is no reasonable way (at least AFAIK) to detect on a stack level if termination protection is set to false explicitly through props or implicitly by the stack constructor. Hence the idea of a feature where one can define (the default) termination protection on Stage level, which is then inherited by all its child Stages (if any) and finally by the stacks within that Stage scope; Additionally one should be able to override the Stage-level (inherited) termination protection on Stack level.

Proposed Solution

  1. Introduce optional terminationProtection into StageProps
  2. In Stage constructor, either use the termination protection value from its props (if set) or inherit from parent stage
  3. In Stack constructor, either use the termination protection value from its props (if set), or inherit from parent stage, or finally default to false (as before)

Basically, allow this:

new Stage(app, 'Stage', {
  terminationProtection: true,
});

See PR #31450.

Other Information

I think this feature counts as a "non-breaking new feature", as this has not been possible before.

Acknowledgements

CDK version used

v2.158.0

Environment details (OS name and version, etc.)

macOS 14.6.1

@aripalo aripalo added feature-request A feature should be added or improved. needs-triage This issue or PR still needs to be triaged. labels Sep 15, 2024
@github-actions github-actions bot added the @aws-cdk/core Related to core CDK functionality label Sep 15, 2024
@pahud
Copy link
Contributor

pahud commented Sep 16, 2024

It seems to be a very handy feature. Thank you for your PR.

@pahud pahud added p2 effort/medium Medium work item – several days of effort and removed needs-triage This issue or PR still needs to be triaged. labels Sep 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
@aws-cdk/core Related to core CDK functionality effort/medium Medium work item – several days of effort feature-request A feature should be added or improved. p2
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants