← Index

Bootstrapping

The AWS CDK requires some resources to be provisioned before deploying stacks into an account (i.e. IAM Roles, S3 Bucket for Assets). This is referred to as bootstrapping.

DDK Bootstrap Cases

The following are possible ways of bootstrapping an AWS account for DDK apps.

Default

If no configuration is provided the DDK stacks will leverage the default resources provisioned by cdk bootstrap.

Use Configurator()

See Configurator for more details on the construct.

Schema

Configurator supports the following schema, at both the global and environment level, for defining bootstrap resources for your CDK app.

All fields are optional

  • bootstrap
    • prefix: (The prefix of role names created to be used in a stack’s synthesizer)
    • qualifier: (The qualifier used to bootstrap this stack)
    • file_assets_bucket_name: (File assets bucket name)
    • stack_version_ssm_parameter: (Default bootstrap stack version SSM parameter)
    • deploy_role: (Default deploy role ARN)
    • file_publish_role: (Default asset publishing role ARN for file (S3) assets)
    • cfn_execution_role: (Default CloudFormation role ARN)
    • lookup_role: (Default lookup role ARN for missing values)

Configurator uses the DefaultStackSynthesizer construct under the hood

Example
"environments": {
  "dev": {
    "account": "000000000000",
    "region": "us-west-2",
    "bootstrap": {
      "qualifier": "abcdefgh",
      "bucket_name": "ddk-abcdefgh-assets-000000000000-us-west-2",
      "deploy_role": "arn:aws:iam::000000000000:role/ddk-abcdefgh--deploy-role-000000000000-us-west-2",
      "cfn_execution_role":
        "arn:aws:iam::000000000000:role/ddk-abcdefgh-cfn-exec-role-000000000000-us-west-2",
      "file_publish_role":
        "arn:aws:iam::000000000000:role/ddk-abcdefgh-file-publishing-role-000000000000-us-west-2",
      "lookup_role": "arn:aws:iam::000000000000:role/ddk-abcdefgh-lookup-role-000000000000-us-west-2",
    }
  }
}

The stack synthesizer will be created for your app using all values specified in Configurator() and resort to default cdk bootstrap values when not explicitly set.

Note: The values for account and region will be default to CDK_DEFAULT_ACCOUNT and CDK_DEFAULT_REGION if not explicitly set in the environment config.

Using Legacy DDK Bootstrap Roles

If you are familiar with the <1.0.0 versions of the DDK there was a separate package including a CLI with a ddk bootstrap -e ${ENVIRONMENT_ID} command. This builds a bootstrap stack with slightly modified resources as compared to CDK’s native bootstrap method. Let’s look at an example of using existing DDK bootstrap roles with newer versions of the DDK core library.

  1. Assume we have deployed a DDK bootstrap stack for a dev environment in our account. Stack
  2. Configure ddk.json with the prefix: ddk to indicate any stacks created within this environment should use ddk bootstrap roles.
    {
      "environments": {
     "dev": {
       "bootstrap": {
         "prefix": "ddk"
       }
     }
      }
    }
    
  3. Use BaseStack with the dev environment passed as a property.
  • import * as cdk from "aws-cdk-lib";
    import { BaseStack } from "aws-ddk-core";
    
    const app = new cdk.App();
    const stack = new BaseStack(app, 'ExampleStack', {environmentId: "dev"})
    console.log(stack.synthesizer)
    
  • import aws_cdk as cdk
    from aws_ddk_core import BaseStack
    
    app = cdk.App()
    stack = BaseStack(app, "ExampleStack", environment_id: "dev")
    print(stack.synthesizer)
    app.synth()