Interface NestedStackProps

All Superinterfaces:
software.amazon.jsii.JsiiSerializable
All Known Implementing Classes:
NestedStackProps.Jsii$Proxy

@Generated(value="jsii-pacmak/1.84.0 (build 5404dcf)", date="2023-06-19T16:29:55.094Z") @Stability(Stable) public interface NestedStackProps extends software.amazon.jsii.JsiiSerializable
Initialization props for the NestedStack construct.

Example:

 import software.amazon.awscdk.core.App;
 import software.amazon.awscdk.core.CfnOutput;
 import software.amazon.awscdk.core.NestedStack;
 import software.amazon.awscdk.core.NestedStackProps;
 import software.amazon.awscdk.core.Stack;
 import software.constructs.Construct;
 import software.amazon.awscdk.services.apigateway.Deployment;
 import software.amazon.awscdk.services.apigateway.Method;
 import software.amazon.awscdk.services.apigateway.MockIntegration;
 import software.amazon.awscdk.services.apigateway.PassthroughBehavior;
 import software.amazon.awscdk.services.apigateway.RestApi;
 import software.amazon.awscdk.services.apigateway.Stage;
 /**
  * This file showcases how to split up a RestApi's Resources and Methods across nested stacks.
  *
  * The root stack 'RootStack' first defines a RestApi.
  * Two nested stacks BooksStack and PetsStack, create corresponding Resources '/books' and '/pets'.
  * They are then deployed to a 'prod' Stage via a third nested stack - DeployStack.
  *
  * To verify this worked, go to the APIGateway
  */
 public class RootStack extends Stack {
     public RootStack(Construct scope) {
         super(scope, "integ-restapi-import-RootStack");
         RestApi restApi = RestApi.Builder.create(this, "RestApi")
                 .deploy(false)
                 .build();
         restApi.root.addMethod("ANY");
         PetsStack petsStack = new PetsStack(this, new ResourceNestedStackProps()
                 .restApiId(restApi.getRestApiId())
                 .rootResourceId(restApi.getRestApiRootResourceId())
                 );
         BooksStack booksStack = new BooksStack(this, new ResourceNestedStackProps()
                 .restApiId(restApi.getRestApiId())
                 .rootResourceId(restApi.getRestApiRootResourceId())
                 );
         new DeployStack(this, new DeployStackProps()
                 .restApiId(restApi.getRestApiId())
                 .methods(petsStack.methods.concat(booksStack.getMethods()))
                 );
         CfnOutput.Builder.create(this, "PetsURL")
                 .value(String.format("https://%s.execute-api.%s.amazonaws.com/prod/pets", restApi.getRestApiId(), this.region))
                 .build();
         CfnOutput.Builder.create(this, "BooksURL")
                 .value(String.format("https://%s.execute-api.%s.amazonaws.com/prod/books", restApi.getRestApiId(), this.region))
                 .build();
     }
 }
 public class ResourceNestedStackProps extends NestedStackProps {
     private String restApiId;
     public String getRestApiId() {
         return this.restApiId;
     }
     public ResourceNestedStackProps restApiId(String restApiId) {
         this.restApiId = restApiId;
         return this;
     }
     private String rootResourceId;
     public String getRootResourceId() {
         return this.rootResourceId;
     }
     public ResourceNestedStackProps rootResourceId(String rootResourceId) {
         this.rootResourceId = rootResourceId;
         return this;
     }
 }
 public class PetsStack extends NestedStack {
     public final Method[] methods;
     public PetsStack(Construct scope, ResourceNestedStackProps props) {
         super(scope, "integ-restapi-import-PetsStack", props);
         IRestApi api = RestApi.fromRestApiAttributes(this, "RestApi", RestApiAttributes.builder()
                 .restApiId(props.getRestApiId())
                 .rootResourceId(props.getRootResourceId())
                 .build());
         Method method = api.root.addResource("pets").addMethod("GET", MockIntegration.Builder.create()
                 .integrationResponses(List.of(IntegrationResponse.builder()
                         .statusCode("200")
                         .build()))
                 .passthroughBehavior(PassthroughBehavior.NEVER)
                 .requestTemplates(Map.of(
                         "application/json", "{ \"statusCode\": 200 }"))
                 .build(), MethodOptions.builder()
                 .methodResponses(List.of(MethodResponse.builder().statusCode("200").build()))
                 .build());
         this.methods.push(method);
     }
 }
 public class BooksStack extends NestedStack {
     public final Method[] methods;
     public BooksStack(Construct scope, ResourceNestedStackProps props) {
         super(scope, "integ-restapi-import-BooksStack", props);
         IRestApi api = RestApi.fromRestApiAttributes(this, "RestApi", RestApiAttributes.builder()
                 .restApiId(props.getRestApiId())
                 .rootResourceId(props.getRootResourceId())
                 .build());
         Method method = api.root.addResource("books").addMethod("GET", MockIntegration.Builder.create()
                 .integrationResponses(List.of(IntegrationResponse.builder()
                         .statusCode("200")
                         .build()))
                 .passthroughBehavior(PassthroughBehavior.NEVER)
                 .requestTemplates(Map.of(
                         "application/json", "{ \"statusCode\": 200 }"))
                 .build(), MethodOptions.builder()
                 .methodResponses(List.of(MethodResponse.builder().statusCode("200").build()))
                 .build());
         this.methods.push(method);
     }
 }
 public class DeployStackProps extends NestedStackProps {
     private String restApiId;
     public String getRestApiId() {
         return this.restApiId;
     }
     public DeployStackProps restApiId(String restApiId) {
         this.restApiId = restApiId;
         return this;
     }
     private Method[] methods;
     public Method[] getMethods() {
         return this.methods;
     }
     public DeployStackProps methods(Method[] methods) {
         this.methods = methods;
         return this;
     }
 }
 public class DeployStack extends NestedStack {
     public DeployStack(Construct scope, DeployStackProps props) {
         super(scope, "integ-restapi-import-DeployStack", props);
         Deployment deployment = Deployment.Builder.create(this, "Deployment")
                 .api(RestApi.fromRestApiId(this, "RestApi", props.getRestApiId()))
                 .build();
         if (props.getMethods()) {
             for (Object method : props.getMethods()) {
                 deployment.node.addDependency(method);
             }
         }
         Stage.Builder.create(this, "Stage").deployment(deployment).build();
     }
 }
 new RootStack(new App());
 
  • Method Details

    • getNotificationArns

      @Stability(Stable) @Nullable default List<String> getNotificationArns()
      The Simple Notification Service (SNS) topics to publish stack related events.

      Default: - notifications are not sent for this stack.

    • getParameters

      @Stability(Stable) @Nullable default Map<String,String> getParameters()
      The set value pairs that represent the parameters passed to CloudFormation when this nested stack is created.

      Each parameter has a name corresponding to a parameter defined in the embedded template and a value representing the value that you want to set for the parameter.

      The nested stack construct will automatically synthesize parameters in order to bind references from the parent stack(s) into the nested stack.

      Default: - no user-defined parameters are passed to the nested stack

    • getRemovalPolicy

      @Stability(Stable) @Nullable default RemovalPolicy getRemovalPolicy()
      Policy to apply when the nested stack is removed.

      The default is Destroy, because all Removal Policies of resources inside the Nested Stack should already have been set correctly. You normally should not need to set this value.

      Default: RemovalPolicy.DESTROY

    • getTimeout

      @Stability(Stable) @Nullable default Duration getTimeout()
      The length of time that CloudFormation waits for the nested stack to reach the CREATE_COMPLETE state.

      When CloudFormation detects that the nested stack has reached the CREATE_COMPLETE state, it marks the nested stack resource as CREATE_COMPLETE in the parent stack and resumes creating the parent stack. If the timeout period expires before the nested stack reaches CREATE_COMPLETE, CloudFormation marks the nested stack as failed and rolls back both the nested stack and parent stack.

      Default: - no timeout

    • builder

      @Stability(Stable) static NestedStackProps.Builder builder()
      Returns:
      a NestedStackProps.Builder of NestedStackProps