class aws_cdk.Stage(scope, id, *, env=None, outdir=None, permissions_boundary=None, policy_validation_beta1=None, stage_name=None)

Bases: Construct

An abstract application modeling unit consisting of Stacks that should be deployed together.

Derive a subclass of Stage and use it to model a single instance of your application.

You can then instantiate your subclass multiple times to model multiple copies of your application which should be be deployed to different environments.




# pipeline: pipelines.CodePipeline

preprod = MyApplicationStage(self, "PreProd")
prod = MyApplicationStage(self, "Prod")

        pipelines.ShellStep("Validate Endpoint",
            commands=["curl -Ssf"]
  • scope (Construct) –

  • id (str) –

  • env (Union[Environment, Dict[str, Any], None]) – Default AWS environment (account/region) for Stack``s in this ``Stage. Stacks defined inside this Stage with either region or account missing from its env will use the corresponding field given here. If either region or account``is is not configured for ``Stack (either on the Stack itself or on the containing Stage), the Stack will be environment-agnostic. Environment-agnostic stacks can be deployed to any environment, may not be able to take advantage of all features of the CDK. For example, they will not be able to use environmental context lookups, will not automatically translate Service Principals to the right format based on the environment’s AWS partition, and other such enhancements. Default: - The environments should be configured on the ``Stack``s.

  • outdir (Optional[str]) – The output directory into which to emit synthesized artifacts. Can only be specified if this stage is the root stage (the app). If this is specified and this stage is nested within another stage, an error will be thrown. Default: - for nested stages, outdir will be determined as a relative directory to the outdir of the app. For apps, if outdir is not specified, a temporary directory will be created.

  • permissions_boundary (Optional[PermissionsBoundary]) – Options for applying a permissions boundary to all IAM Roles and Users created within this Stage. Default: - no permissions boundary is applied

  • policy_validation_beta1 (Optional[Sequence[IPolicyValidationPluginBeta1]]) – Validation plugins to run during synthesis. If any plugin reports any violation, synthesis will be interrupted and the report displayed to the user. Default: - no validation plugins are used

  • stage_name (Optional[str]) – Name of this stage. Default: - Derived from the id.


synth(*, force=None, skip_validation=None, validate_on_synthesis=None)

Synthesize this stage into a cloud assembly.

Once an assembly has been synthesized, it cannot be modified. Subsequent calls will return the same assembly.

  • force (Optional[bool]) – Force a re-synth, even if the stage has already been synthesized. This is used by tests to allow for incremental verification of the output. Do not use in production. Default: false

  • skip_validation (Optional[bool]) – Should we skip construct validation. Default: - false

  • validate_on_synthesis (Optional[bool]) – Whether the stack should be validated after synthesis to check for error metadata. Default: - false

Return type:



Returns a string representation of this construct.

Return type:




The default account for all resources defined within this stage.


Artifact ID of the assembly if it is a nested stage. The root stage (app) will return an empty string.

Derived from the construct path.


The cloud assembly asset output directory.


The tree node.


The cloud assembly output directory.


The parent stage or undefined if this is the app.


Validation plugins to run during synthesis.

If any plugin reports any violation, synthesis will be interrupted and the report displayed to the user.

  • no validation plugins are used


The default region for all resources defined within this stage.


The name of the stage.

Based on names of the parent stages separated by hypens.

Static Methods

classmethod is_construct(x)

Checks if x is a construct.

Use this method instead of instanceof to properly detect Construct instances, even when the construct library is symlinked.

Explanation: in JavaScript, multiple copies of the constructs library on disk are seen as independent, completely different libraries. As a consequence, the class Construct in each copy of the constructs library is seen as a different class, and an instance of one class will not test as instanceof the other class. npm install will not create installations like this, but users may manually symlink construct libraries together or use a monorepo tool: in those cases, multiple copies of the constructs library can be accidentally installed, and instanceof will behave unpredictably. It is safest to avoid using instanceof, and using this type-testing method instead.


x (Any) – Any object.

Return type:



true if x is an object created from a class which extends Construct.

classmethod is_stage(x)

Test whether the given construct is a stage.


x (Any) –

Return type:


classmethod of(construct)

Return the stage this construct is contained with, if available.

If called on a nested stage, returns its parent.


construct (IConstruct) –

Return type: