aws-cdk-cloudformation-include 1.204.0


pip install aws-cdk-cloudformation-include

  Latest version

Released: Jun 19, 2023

Project Links

Meta
Author: Amazon Web Services
Requires Python: ~=3.7

Classifiers

Intended Audience
  • Developers

Operating System
  • OS Independent

Programming Language
  • JavaScript
  • Python :: 3 :: Only
  • Python :: 3.7
  • Python :: 3.8
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11

Typing
  • Typed

Development Status
  • 7 - Inactive

License
  • OSI Approved

Framework
  • AWS CDK
  • AWS CDK :: 1

Include CloudFormation templates in the CDK

---

End-of-Support

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2.

For more information on how to migrate, see the Migrating to AWS CDK v2 guide.


This module contains a set of classes whose goal is to facilitate working with existing CloudFormation templates in the CDK. It can be thought of as an extension of the capabilities of the CfnInclude class.

Basic usage

Assume we have a file with an existing template. It could be in JSON format, in a file my-template.json:

{
  "Resources": {
    "Bucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "some-bucket-name"
      }
    }
  }
}

Or it could by in YAML format, in a file my-template.yaml:

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: some-bucket-name

It can be included in a CDK application with the following code:

cfn_template = cfn_inc.CfnInclude(self, "Template",
    template_file="my-template.json"
)

Or, if your template uses YAML:

cfn_template = cfn_inc.CfnInclude(self, "Template",
    template_file="my-template.yaml"
)

Note: different YAML parsers sometimes don't agree on what exactly constitutes valid YAML. If you get a YAML exception when including your template, try converting it to JSON, and including that file instead. If you're downloading your template from the CloudFormation AWS Console, you can easily get it in JSON format by clicking the 'View in Designer' button on the 'Template' tab - once in Designer, select JSON in the "Choose template language" radio buttons on the bottom pane.

This will add all resources from my-template.json / my-template.yaml into the CDK application, preserving their original logical IDs from the template file.

Note that this including process will not execute any CloudFormation transforms - including the Serverless transform.

Any resource from the included template can be retrieved by referring to it by its logical ID from the template. If you know the class of the CDK object that corresponds to that resource, you can cast the returned object to the correct type:

# cfn_template: cfn_inc.CfnInclude

cfn_bucket = cfn_template.get_resource("Bucket")

Note that any resources not present in the latest version of the CloudFormation schema at the time of publishing the version of this module that you depend on, including Custom Resources, will be returned as instances of the class CfnResource, and so cannot be cast to a different resource type.

Any modifications made to that resource will be reflected in the resulting CDK template; for example, the name of the bucket can be changed:

# cfn_template: cfn_inc.CfnInclude

cfn_bucket = cfn_template.get_resource("Bucket")
cfn_bucket.bucket_name = "my-bucket-name"

You can also refer to the resource when defining other constructs, including the higher-level ones (those whose name does not start with Cfn), for example:

# cfn_template: cfn_inc.CfnInclude

cfn_bucket = cfn_template.get_resource("Bucket")

role = iam.Role(self, "Role",
    assumed_by=iam.AnyPrincipal()
)
role.add_to_policy(iam.PolicyStatement(
    actions=["s3:*"],
    resources=[cfn_bucket.attr_arn]
))

Converting L1 resources to L2

The resources the getResource method returns are what the CDK calls Layer 1 resources (like CfnBucket). However, in many places in the Construct Library, the CDK requires so-called Layer 2 resources, like IBucket. There are two ways of going from an L1 to an L2 resource.

UsingfromCfn*() methods

This is the preferred method of converting an L1 resource to an L2. It works by invoking a static method of the class of the L2 resource whose name starts with fromCfn - for example, for KMS Keys, that would be the Kms.fromCfnKey() method - and passing the L1 instance as an argument:

# cfn_template: cfn_inc.CfnInclude

cfn_key = cfn_template.get_resource("Key")
key = kms.Key.from_cfn_key(cfn_key)

This returns an instance of the kms.IKey type that can be passed anywhere in the CDK an IKey is expected. What is more, that IKey instance will be mutable - which means calling any mutating methods on it, like addToResourcePolicy(), will be reflected in the resulting template.

Note that, in some cases, the fromCfn*() method might not be able to create an L2 from the underlying L1. This can happen when the underlying L1 heavily uses CloudFormation functions. For example, if you tried to create an L2 IKey from an L1 represented as this CloudFormation template:

{
  "Resources": {
    "Key": {
      "Type": "AWS::KMS::Key",
      "Properties": {
        "KeyPolicy": {
          "Statement": [
            {
              "Fn::If": [
                "Condition",
                {
                  "Action": "kms:if-action",
                  "Resource": "*",
                  "Principal": "*",
                  "Effect": "Allow"
                },
                {
                  "Action": "kms:else-action",
                  "Resource": "*",
                  "Principal": "*",
                  "Effect": "Allow"
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      }
    }
  }
}

The Key.fromCfnKey() method does not know how to translate that into CDK L2 concepts, and would throw an exception.

In those cases, you need the use the second method of converting an L1 to an L2.

Using from*Name/Arn/Attributes() methods

If the resource you need does not have a fromCfn*() method, or if it does, but it throws an exception for your particular L1, you need to use the second method of converting an L1 resource to L2.

Each L2 class has static factory methods with names like from*Name(), from*Arn(), and/or from*Attributes(). You can obtain an L2 resource from an L1 by passing the correct properties of the L1 as the arguments to those methods:

# cfn_template: cfn_inc.CfnInclude

# using from*Attributes()
# private_cfn_subnet1: ec2.CfnSubnet
# private_cfn_subnet2: ec2.CfnSubnet


# using from*Name()
cfn_bucket = cfn_template.get_resource("Bucket")
bucket = s3.Bucket.from_bucket_name(self, "L2Bucket", cfn_bucket.ref)

# using from*Arn()
cfn_key = cfn_template.get_resource("Key")
key = kms.Key.from_key_arn(self, "L2Key", cfn_key.attr_arn)
cfn_vpc = cfn_template.get_resource("Vpc")
vpc = ec2.Vpc.from_vpc_attributes(self, "L2Vpc",
    vpc_id=cfn_vpc.ref,
    availability_zones=core.Fn.get_azs(),
    private_subnet_ids=[private_cfn_subnet1.ref, private_cfn_subnet2.ref]
)

As long as they just need to be referenced, and not changed in any way, everything should work; however, note that resources returned from those methods, unlike those returned by fromCfn*() methods, are immutable, which means calling any mutating methods on them will have no effect. You will have to mutate the underlying L1 in order to change them.

Non-resource template elements

In addition to resources, you can also retrieve and mutate all other template elements:

  • Parameters:

    # cfn_template: cfn_inc.CfnInclude
    
    param = cfn_template.get_parameter("MyParameter")
    
    # mutating the parameter
    param.default = "MyDefault"
    
  • Conditions:

    # cfn_template: cfn_inc.CfnInclude
    
    condition = cfn_template.get_condition("MyCondition")
    
    # mutating the condition
    condition.expression = core.Fn.condition_equals(1, 2)
    
  • Mappings:

    # cfn_template: cfn_inc.CfnInclude
    
    mapping = cfn_template.get_mapping("MyMapping")
    
    # mutating the mapping
    mapping.set_value("my-region", "AMI", "ami-04681a1dbd79675a5")
    
  • Service Catalog template Rules:

    # cfn_template: cfn_inc.CfnInclude
    
    # mutating the rule
    # my_parameter: core.CfnParameter
    
    rule = cfn_template.get_rule("MyRule")
    rule.add_assertion(core.Fn.condition_contains(["m1.small"], my_parameter.value_as_string), "MyParameter has to be m1.small")
    
  • Outputs:

    # cfn_template: cfn_inc.CfnInclude
    
    # mutating the output
    # cfn_bucket: s3.CfnBucket
    
    output = cfn_template.get_output("MyOutput")
    output.value = cfn_bucket.attr_arn
    
  • Hooks for blue-green deployments:

    # cfn_template: cfn_inc.CfnInclude
    
    # mutating the hook
    # my_role: iam.Role
    
    hook = cfn_template.get_hook("MyOutput")
    code_deploy_hook = hook
    code_deploy_hook.service_role = my_role.role_arn
    

Parameter replacement

If your existing template uses CloudFormation Parameters, you may want to remove them in favor of build-time values. You can do that using the parameters property:

cfn_inc.CfnInclude(self, "includeTemplate",
    template_file="path/to/my/template",
    parameters={
        "MyParam": "my-value"
    }
)

This will replace all references to MyParam with the string 'my-value', and MyParam will be removed from the 'Parameters' section of the resulting template.

Nested Stacks

This module also supports templates that use nested stacks.

For example, if you have the following parent template:

{
  "Resources": {
    "ChildStack": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/child-stack.json"
      }
    }
  }
}

where the child template pointed to by https://my-s3-template-source.s3.amazonaws.com/child-stack.json is:

{
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket"
    }
  }
}

You can include both the parent stack, and the nested stack in your CDK application as follows:

parent_template = cfn_inc.CfnInclude(self, "ParentStack",
    template_file="path/to/my-parent-template.json",
    load_nested_stacks={
        "ChildStack": cfn_inc.CfnIncludeProps(
            template_file="path/to/my-nested-template.json"
        )
    }
)

Here, path/to/my-nested-template.json represents the path on disk to the downloaded template file from the original template URL of the nested stack (https://my-s3-template-source.s3.amazonaws.com/child-stack.json). In the CDK application, this file will be turned into an Asset, and the TemplateURL property of the nested stack resource will be modified to point to that asset.

The included nested stack can be accessed with the getNestedStack method:

# parent_template: cfn_inc.CfnInclude


included_child_stack = parent_template.get_nested_stack("ChildStack")
child_stack = included_child_stack.stack
child_template = included_child_stack.included_template

Now you can reference resources from ChildStack, and modify them like any other included template:

# child_template: cfn_inc.CfnInclude


cfn_bucket = child_template.get_resource("MyBucket")
cfn_bucket.bucket_name = "my-new-bucket-name"

role = iam.Role(self, "MyRole",
    assumed_by=iam.AccountRootPrincipal()
)

role.add_to_policy(iam.PolicyStatement(
    actions=["s3:GetObject*", "s3:GetBucket*", "s3:List*"
    ],
    resources=[cfn_bucket.attr_arn]
))

You can also include the nested stack after the CfnInclude object was created, instead of doing it on construction:

# parent_template: cfn_inc.CfnInclude

included_child_stack = parent_template.load_nested_stack("ChildTemplate",
    template_file="path/to/my-nested-template.json"
)

Vending CloudFormation templates as Constructs

In many cases, there are existing CloudFormation templates that are not entire applications, but more like specialized fragments, implementing a particular pattern or best practice. If you have templates like that, you can use the CfnInclude class to vend them as CDK Constructs:

from constructs import Construct
import aws_cdk.cloudformation_include as cfn_inc
import path as path

class MyConstruct(Construct):
    def __init__(self, scope, id):
        super().__init__(scope, id)

        # include a template inside the Construct
        cfn_inc.CfnInclude(self, "MyConstruct",
            template_file=path.join(__dirname, "my-template.json"),
            preserve_logical_ids=False
        )

Notice the preserveLogicalIds parameter - it makes sure the logical IDs of all the included template elements are re-named using CDK's algorithm, guaranteeing they are unique within your application. Without that parameter passed, instantiating MyConstruct twice in the same Stack would result in duplicated logical IDs.

1.204.0 Jun 19, 2023
1.203.0 May 31, 2023
1.202.0 May 22, 2023
1.201.0 May 10, 2023
1.200.0 Apr 26, 2023
1.199.0 Apr 20, 2023
1.198.1 Mar 31, 2023
1.198.0 Mar 22, 2023
1.197.0 Mar 14, 2023
1.196.0 Mar 08, 2023
1.195.0 Mar 02, 2023
1.194.0 Feb 21, 2023
1.193.0 Feb 15, 2023
1.192.0 Feb 09, 2023
1.191.0 Jan 31, 2023
1.190.0 Jan 25, 2023
1.189.0 Jan 19, 2023
1.188.0 Jan 11, 2023
1.187.0 Jan 03, 2023
1.186.1 Dec 30, 2022
1.186.0 Dec 29, 2022
1.185.0 Dec 28, 2022
1.184.1 Dec 23, 2022
1.184.0 Dec 22, 2022
1.183.0 Dec 15, 2022
1.182.0 Dec 07, 2022
1.181.1 Nov 29, 2022
1.181.0 Nov 18, 2022
1.180.0 Nov 01, 2022
1.179.0 Oct 27, 2022
1.178.0 Oct 20, 2022
1.177.0 Oct 13, 2022
1.176.0 Oct 06, 2022
1.175.0 Sep 29, 2022
1.174.0 Sep 22, 2022
1.173.0 Sep 16, 2022
1.172.0 Sep 08, 2022
1.171.0 Aug 31, 2022
1.170.1 Aug 31, 2022
1.170.0 Aug 25, 2022
1.169.0 Aug 18, 2022
1.168.0 Aug 09, 2022
1.167.0 Aug 02, 2022
1.166.1 Jul 29, 2022
1.165.0 Jul 19, 2022
1.164.0 Jul 16, 2022
1.163.2 Jul 14, 2022
1.163.1 Jul 09, 2022
1.163.0 Jul 06, 2022
1.162.0 Jul 01, 2022
1.161.0 Jun 23, 2022
1.160.0 Jun 14, 2022
1.159.0 Jun 03, 2022
1.158.0 May 27, 2022
1.157.0 May 21, 2022
1.156.1 May 13, 2022
1.156.0 May 12, 2022
1.155.0 May 04, 2022
1.154.0 Apr 28, 2022
1.153.1 Apr 23, 2022
1.153.0 Apr 22, 2022
1.152.0 Apr 07, 2022
1.151.0 Apr 01, 2022
1.150.0 Mar 26, 2022
1.149.0 Mar 17, 2022
1.148.0 Mar 10, 2022
1.147.0 Mar 01, 2022
1.146.0 Feb 25, 2022
1.145.0 Feb 19, 2022
1.144.0 Feb 08, 2022
1.143.0 Feb 02, 2022
1.142.0 Jan 29, 2022
1.141.0 Jan 27, 2022
1.140.0 Jan 20, 2022
1.139.0 Jan 11, 2022
1.138.2 Jan 10, 2022
1.138.1 Jan 07, 2022
1.138.0 Jan 04, 2022
1.137.0 Dec 21, 2021
1.136.0 Dec 15, 2021
1.135.0 Dec 10, 2021
1.134.0 Nov 23, 2021
1.133.0 Nov 19, 2021
1.132.0 Nov 09, 2021
1.131.0 Nov 07, 2021
1.130.0 Oct 29, 2021
1.129.0 Oct 21, 2021
1.128.0 Oct 14, 2021
1.127.0 Oct 08, 2021
1.126.0 Oct 05, 2021
1.125.0 Sep 29, 2021
1.124.0 Sep 21, 2021
1.123.0 Sep 17, 2021
1.122.0 Sep 08, 2021
1.121.0 Sep 01, 2021
1.120.0 Aug 26, 2021
1.119.0 Aug 17, 2021
1.118.0 Aug 11, 2021
1.117.0 Aug 05, 2021
1.116.0 Jul 28, 2021
1.115.0 Jul 21, 2021
1.114.0 Jul 15, 2021
1.113.0 Jul 12, 2021
1.112.0 Jul 09, 2021
1.111.0 Jul 02, 2021
1.110.1 Jun 28, 2021
1.110.0 Jun 24, 2021
1.109.0 Jun 17, 2021
1.108.1 Jun 11, 2021
1.108.0 Jun 09, 2021
1.107.0 Jun 02, 2021
1.106.1 May 26, 2021
1.106.0 May 25, 2021
1.105.0 May 19, 2021
1.104.0 May 15, 2021
1.103.0 May 10, 2021
1.102.0 May 04, 2021
1.101.0 Apr 28, 2021
1.100.0 Apr 20, 2021
1.99.0 Apr 19, 2021
1.98.0 Apr 12, 2021
1.97.0 Apr 06, 2021
1.96.0 Apr 01, 2021
1.95.2 Apr 01, 2021
1.95.1 Mar 26, 2021
1.95.0 Mar 25, 2021
1.94.1 Mar 17, 2021
1.94.0 Mar 16, 2021
1.93.0 Mar 11, 2021
1.92.0 Mar 06, 2021
1.91.0 Feb 23, 2021
1.90.1 Feb 19, 2021
1.90.0 Feb 17, 2021
1.89.0 Feb 09, 2021
1.88.0 Feb 04, 2021
1.87.1 Jan 28, 2021
1.87.0 Jan 27, 2021
1.86.0 Jan 21, 2021
1.85.0 Jan 14, 2021
1.84.0 Jan 12, 2021
1.83.0 Jan 06, 2021
1.82.0 Jan 03, 2021
1.81.0 Dec 31, 2020
1.80.0 Dec 22, 2020
1.79.0 Dec 17, 2020
1.78.0 Dec 12, 2020
1.77.0 Dec 07, 2020
1.76.0 Dec 01, 2020
1.75.0 Nov 24, 2020
1.74.0 Nov 17, 2020
1.73.0 Nov 11, 2020
1.72.0 Nov 06, 2020
1.71.0 Oct 29, 2020
1.70.0 Oct 24, 2020
1.69.0 Oct 19, 2020
1.68.0 Oct 15, 2020
1.67.0 Oct 07, 2020
1.66.0 Oct 02, 2020
1.65.0 Oct 01, 2020
1.64.1 Sep 25, 2020
1.64.0 Sep 24, 2020
1.63.0 Sep 14, 2020
1.62.0 Sep 04, 2020
1.61.1 Aug 28, 2020
1.61.0 Aug 27, 2020
1.60.0 Aug 20, 2020
1.59.0 Aug 15, 2020
1.58.0 Aug 12, 2020
1.57.0 Aug 07, 2020
1.56.0 Aug 01, 2020
1.55.0 Jul 28, 2020
1.54.0 Jul 22, 2020
1.53.0 Jul 20, 2020
1.52.0 Jul 18, 2020
1.51.0 Jul 09, 2020
1.50.0 Jul 07, 2020
1.49.1 Jul 02, 2020
1.49.0 Jul 02, 2020
1.48.0 Jul 01, 2020
1.47.1 Jun 30, 2020
1.47.0 Jun 24, 2020
1.46.0 Jun 20, 2020
1.45.0 Jun 09, 2020
1.44.0 Jun 04, 2020
1.43.0 Jun 04, 2020
1.42.1 Jun 01, 2020
1.42.0 May 27, 2020
1.41.0 May 21, 2020
1.40.0 May 20, 2020
1.39.0 May 16, 2020
Extras: None
Dependencies:
aws-cdk.alexa-ask (==1.204.0)
aws-cdk.aws-accessanalyzer (==1.204.0)
aws-cdk.aws-acmpca (==1.204.0)
aws-cdk.aws-amazonmq (==1.204.0)
aws-cdk.aws-amplify (==1.204.0)
aws-cdk.aws-amplifyuibuilder (==1.204.0)
aws-cdk.aws-apigateway (==1.204.0)
aws-cdk.aws-apigatewayv2 (==1.204.0)
aws-cdk.aws-appconfig (==1.204.0)
aws-cdk.aws-appflow (==1.204.0)
aws-cdk.aws-appintegrations (==1.204.0)
aws-cdk.aws-applicationautoscaling (==1.204.0)
aws-cdk.aws-applicationinsights (==1.204.0)
aws-cdk.aws-appmesh (==1.204.0)
aws-cdk.aws-apprunner (==1.204.0)
aws-cdk.aws-appstream (==1.204.0)
aws-cdk.aws-appsync (==1.204.0)
aws-cdk.aws-aps (==1.204.0)
aws-cdk.aws-athena (==1.204.0)
aws-cdk.aws-auditmanager (==1.204.0)
aws-cdk.aws-autoscaling (==1.204.0)
aws-cdk.aws-autoscalingplans (==1.204.0)
aws-cdk.aws-backup (==1.204.0)
aws-cdk.aws-backupgateway (==1.204.0)
aws-cdk.aws-batch (==1.204.0)
aws-cdk.aws-billingconductor (==1.204.0)
aws-cdk.aws-budgets (==1.204.0)
aws-cdk.aws-cassandra (==1.204.0)
aws-cdk.aws-ce (==1.204.0)
aws-cdk.aws-certificatemanager (==1.204.0)
aws-cdk.aws-chatbot (==1.204.0)
aws-cdk.aws-cloud9 (==1.204.0)
aws-cdk.aws-cloudfront (==1.204.0)
aws-cdk.aws-cloudtrail (==1.204.0)
aws-cdk.aws-cloudwatch (==1.204.0)
aws-cdk.aws-codeartifact (==1.204.0)
aws-cdk.aws-codebuild (==1.204.0)
aws-cdk.aws-codecommit (==1.204.0)
aws-cdk.aws-codedeploy (==1.204.0)
aws-cdk.aws-codeguruprofiler (==1.204.0)
aws-cdk.aws-codegurureviewer (==1.204.0)
aws-cdk.aws-codepipeline (==1.204.0)
aws-cdk.aws-codestar (==1.204.0)
aws-cdk.aws-codestarconnections (==1.204.0)
aws-cdk.aws-codestarnotifications (==1.204.0)
aws-cdk.aws-cognito (==1.204.0)
aws-cdk.aws-comprehend (==1.204.0)
aws-cdk.aws-config (==1.204.0)
aws-cdk.aws-connect (==1.204.0)
aws-cdk.aws-connectcampaigns (==1.204.0)
aws-cdk.aws-controltower (==1.204.0)
aws-cdk.aws-cur (==1.204.0)
aws-cdk.aws-customerprofiles (==1.204.0)
aws-cdk.aws-databrew (==1.204.0)
aws-cdk.aws-datapipeline (==1.204.0)
aws-cdk.aws-datasync (==1.204.0)
aws-cdk.aws-dax (==1.204.0)
aws-cdk.aws-detective (==1.204.0)
aws-cdk.aws-devopsguru (==1.204.0)
aws-cdk.aws-directoryservice (==1.204.0)
aws-cdk.aws-dlm (==1.204.0)
aws-cdk.aws-dms (==1.204.0)
aws-cdk.aws-docdb (==1.204.0)
aws-cdk.aws-docdbelastic (==1.204.0)
aws-cdk.aws-dynamodb (==1.204.0)
aws-cdk.aws-ec2 (==1.204.0)
aws-cdk.aws-ecr (==1.204.0)
aws-cdk.aws-ecs (==1.204.0)
aws-cdk.aws-efs (==1.204.0)
aws-cdk.aws-eks (==1.204.0)
aws-cdk.aws-elasticache (==1.204.0)
aws-cdk.aws-elasticbeanstalk (==1.204.0)
aws-cdk.aws-elasticloadbalancing (==1.204.0)
aws-cdk.aws-elasticloadbalancingv2 (==1.204.0)
aws-cdk.aws-elasticsearch (==1.204.0)
aws-cdk.aws-emr (==1.204.0)
aws-cdk.aws-emrcontainers (==1.204.0)
aws-cdk.aws-emrserverless (==1.204.0)
aws-cdk.aws-events (==1.204.0)
aws-cdk.aws-eventschemas (==1.204.0)
aws-cdk.aws-evidently (==1.204.0)
aws-cdk.aws-finspace (==1.204.0)
aws-cdk.aws-fis (==1.204.0)
aws-cdk.aws-fms (==1.204.0)
aws-cdk.aws-forecast (==1.204.0)
aws-cdk.aws-frauddetector (==1.204.0)
aws-cdk.aws-fsx (==1.204.0)
aws-cdk.aws-gamelift (==1.204.0)
aws-cdk.aws-globalaccelerator (==1.204.0)
aws-cdk.aws-glue (==1.204.0)
aws-cdk.aws-grafana (==1.204.0)
aws-cdk.aws-greengrass (==1.204.0)
aws-cdk.aws-greengrassv2 (==1.204.0)
aws-cdk.aws-groundstation (==1.204.0)
aws-cdk.aws-guardduty (==1.204.0)
aws-cdk.aws-healthlake (==1.204.0)
aws-cdk.aws-iam (==1.204.0)
aws-cdk.aws-identitystore (==1.204.0)
aws-cdk.aws-imagebuilder (==1.204.0)
aws-cdk.aws-inspector (==1.204.0)
aws-cdk.aws-inspectorv2 (==1.204.0)
aws-cdk.aws-internetmonitor (==1.204.0)
aws-cdk.aws-iot1click (==1.204.0)
aws-cdk.aws-iot (==1.204.0)
aws-cdk.aws-iotanalytics (==1.204.0)
aws-cdk.aws-iotcoredeviceadvisor (==1.204.0)
aws-cdk.aws-iotevents (==1.204.0)
aws-cdk.aws-iotfleethub (==1.204.0)
aws-cdk.aws-iotfleetwise (==1.204.0)
aws-cdk.aws-iotsitewise (==1.204.0)
aws-cdk.aws-iotthingsgraph (==1.204.0)
aws-cdk.aws-iottwinmaker (==1.204.0)
aws-cdk.aws-iotwireless (==1.204.0)
aws-cdk.aws-ivs (==1.204.0)
aws-cdk.aws-ivschat (==1.204.0)
aws-cdk.aws-kafkaconnect (==1.204.0)
aws-cdk.aws-kendra (==1.204.0)
aws-cdk.aws-kendraranking (==1.204.0)
aws-cdk.aws-kinesis (==1.204.0)
aws-cdk.aws-kinesisanalytics (==1.204.0)
aws-cdk.aws-kinesisanalyticsv2 (==1.204.0)
aws-cdk.aws-kinesisfirehose (==1.204.0)
aws-cdk.aws-kinesisvideo (==1.204.0)
aws-cdk.aws-kms (==1.204.0)
aws-cdk.aws-lakeformation (==1.204.0)
aws-cdk.aws-lambda (==1.204.0)
aws-cdk.aws-lex (==1.204.0)
aws-cdk.aws-licensemanager (==1.204.0)
aws-cdk.aws-lightsail (==1.204.0)
aws-cdk.aws-location (==1.204.0)
aws-cdk.aws-logs (==1.204.0)
aws-cdk.aws-lookoutequipment (==1.204.0)
aws-cdk.aws-lookoutmetrics (==1.204.0)
aws-cdk.aws-lookoutvision (==1.204.0)
aws-cdk.aws-m2 (==1.204.0)
aws-cdk.aws-macie (==1.204.0)
aws-cdk.aws-managedblockchain (==1.204.0)
aws-cdk.aws-mediaconnect (==1.204.0)
aws-cdk.aws-mediaconvert (==1.204.0)
aws-cdk.aws-medialive (==1.204.0)
aws-cdk.aws-mediapackage (==1.204.0)
aws-cdk.aws-mediastore (==1.204.0)
aws-cdk.aws-mediatailor (==1.204.0)
aws-cdk.aws-memorydb (==1.204.0)
aws-cdk.aws-msk (==1.204.0)
aws-cdk.aws-mwaa (==1.204.0)
aws-cdk.aws-neptune (==1.204.0)
aws-cdk.aws-networkfirewall (==1.204.0)
aws-cdk.aws-networkmanager (==1.204.0)
aws-cdk.aws-nimblestudio (==1.204.0)
aws-cdk.aws-oam (==1.204.0)
aws-cdk.aws-omics (==1.204.0)
aws-cdk.aws-opensearchserverless (==1.204.0)
aws-cdk.aws-opensearchservice (==1.204.0)
aws-cdk.aws-opsworks (==1.204.0)
aws-cdk.aws-opsworkscm (==1.204.0)
aws-cdk.aws-organizations (==1.204.0)
aws-cdk.aws-osis (==1.204.0)
aws-cdk.aws-panorama (==1.204.0)
aws-cdk.aws-personalize (==1.204.0)
aws-cdk.aws-pinpoint (==1.204.0)
aws-cdk.aws-pinpointemail (==1.204.0)
aws-cdk.aws-pipes (==1.204.0)
aws-cdk.aws-proton (==1.204.0)
aws-cdk.aws-qldb (==1.204.0)
aws-cdk.aws-quicksight (==1.204.0)
aws-cdk.aws-ram (==1.204.0)
aws-cdk.aws-rds (==1.204.0)
aws-cdk.aws-redshift (==1.204.0)
aws-cdk.aws-redshiftserverless (==1.204.0)
aws-cdk.aws-refactorspaces (==1.204.0)
aws-cdk.aws-rekognition (==1.204.0)
aws-cdk.aws-resiliencehub (==1.204.0)
aws-cdk.aws-resourceexplorer2 (==1.204.0)
aws-cdk.aws-resourcegroups (==1.204.0)
aws-cdk.aws-robomaker (==1.204.0)
aws-cdk.aws-rolesanywhere (==1.204.0)
aws-cdk.aws-route53 (==1.204.0)
aws-cdk.aws-route53recoverycontrol (==1.204.0)
aws-cdk.aws-route53recoveryreadiness (==1.204.0)
aws-cdk.aws-route53resolver (==1.204.0)
aws-cdk.aws-rum (==1.204.0)
aws-cdk.aws-s3 (==1.204.0)
aws-cdk.aws-s3objectlambda (==1.204.0)
aws-cdk.aws-s3outposts (==1.204.0)
aws-cdk.aws-sagemaker (==1.204.0)
aws-cdk.aws-sam (==1.204.0)
aws-cdk.aws-scheduler (==1.204.0)
aws-cdk.aws-sdb (==1.204.0)
aws-cdk.aws-secretsmanager (==1.204.0)
aws-cdk.aws-securityhub (==1.204.0)
aws-cdk.aws-servicecatalog (==1.204.0)
aws-cdk.aws-servicecatalogappregistry (==1.204.0)
aws-cdk.aws-servicediscovery (==1.204.0)
aws-cdk.aws-ses (==1.204.0)
aws-cdk.aws-shield (==1.204.0)
aws-cdk.aws-signer (==1.204.0)
aws-cdk.aws-simspaceweaver (==1.204.0)
aws-cdk.aws-sns (==1.204.0)
aws-cdk.aws-sqs (==1.204.0)
aws-cdk.aws-ssm (==1.204.0)
aws-cdk.aws-ssmcontacts (==1.204.0)
aws-cdk.aws-ssmincidents (==1.204.0)
aws-cdk.aws-sso (==1.204.0)
aws-cdk.aws-stepfunctions (==1.204.0)
aws-cdk.aws-supportapp (==1.204.0)
aws-cdk.aws-synthetics (==1.204.0)
aws-cdk.aws-systemsmanagersap (==1.204.0)
aws-cdk.aws-timestream (==1.204.0)
aws-cdk.aws-transfer (==1.204.0)
aws-cdk.aws-voiceid (==1.204.0)
aws-cdk.aws-vpclattice (==1.204.0)
aws-cdk.aws-waf (==1.204.0)
aws-cdk.aws-wafregional (==1.204.0)
aws-cdk.aws-wafv2 (==1.204.0)
aws-cdk.aws-wisdom (==1.204.0)
aws-cdk.aws-workspaces (==1.204.0)
aws-cdk.aws-xray (==1.204.0)
aws-cdk.core (==1.204.0)
constructs (<4.0.0,>=3.3.69)
jsii (<2.0.0,>=1.84.0)
publication (>=0.0.3)
typeguard (~=2.13.3)