Package software.amazon.awscdk.core
AWS Cloud Development Kit Core Library
---
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 library includes the basic building blocks of the AWS Cloud Development Kit (AWS CDK). It defines the core classes that are used in the rest of the AWS Construct Library.
See the AWS CDK Developer Guide for information of most of the capabilities of this library. The rest of this README will only cover topics not already covered in the Developer Guide.
Stacks and Stages
A Stack
is the smallest physical unit of deployment, and maps directly onto
a CloudFormation Stack. You define a Stack by defining a subclass of Stack
-- let's call it MyStack
-- and instantiating the constructs that make up
your application in MyStack
's constructor. You then instantiate this stack
one or more times to define different instances of your application. For example,
you can instantiate it once using few and cheap EC2 instances for testing,
and once again using more and bigger EC2 instances for production.
When your application grows, you may decide that it makes more sense to split it
out across multiple Stack
classes. This can happen for a number of reasons:
- You could be starting to reach the maximum number of resources allowed in a single stack (this is currently 500).
- You could decide you want to separate out stateful resources and stateless resources into separate stacks, so that it becomes easy to tear down and recreate the stacks that don't have stateful resources.
- There could be a single stack with resources (like a VPC) that are shared between multiple instances of other stacks containing your applications.
As soon as your conceptual application starts to encompass multiple stacks, it is convenient to wrap them in another construct that represents your logical application. You can then treat that new unit the same way you used to be able to treat a single stack: by instantiating it multiple times for different instances of your application.
You can define a custom subclass of Stage
, holding one or more
Stack
s, to represent a single logical instance of your application.
As a final note: Stack
s are not a unit of reuse. They describe physical
deployment layouts, and as such are best left to application builders to
organize their deployments with. If you want to vend a reusable construct,
define it as a subclasses of Construct
: the consumers of your construct
will decide where to place it in their own stacks.
Stack Synthesizers
Each Stack has a synthesizer, an object that determines how and where the Stack should be synthesized and deployed. The synthesizer controls aspects like:
- How does the stack reference assets? (Either through CloudFormation parameters the CLI supplies, or because the Stack knows a predefined location where assets will be uploaded).
- What roles are used to deploy the stack? These can be bootstrapped roles, roles created in some other way, or just the CLI's current credentials.
The following synthesizers are available:
DefaultStackSynthesizer
: recommended. Uses predefined asset locations and roles created by the modern bootstrap template. Access control is done by controlling who can assume the deploy role. This is the default stack synthesizer in CDKv2.LegacyStackSynthesizer
: Uses CloudFormation parameters to communicate asset locations, and the CLI's current permissions to deploy stacks. The is the default stack synthesizer in CDKv1.CliCredentialsStackSynthesizer
: Uses predefined asset locations, and the CLI's current permissions.
Each of these synthesizers takes configuration arguments. To configure a stack with a synthesizer, pass it as one of its properties:
MyStack.Builder.create(app, "MyStack") .synthesizer(DefaultStackSynthesizer.Builder.create() .fileAssetsBucketName("my-orgs-asset-bucket") .build()) .build();
For more information on bootstrapping accounts and customizing synthesis, see Bootstrapping in the CDK Developer Guide.
Nested Stacks
Nested stacks are stacks created as part of other stacks. You create a nested stack within another stack by using the NestedStack
construct.
As your infrastructure grows, common patterns can emerge in which you declare the same components in multiple templates. You can separate out these common components and create dedicated templates for them. Then use the resource in your template to reference other templates, creating nested stacks.
For example, assume that you have a load balancer configuration that you use for most of your stacks. Instead of copying and pasting the same configurations into your templates, you can create a dedicated template for the load balancer. Then, you just use the resource to reference that template from within other templates.
The following example will define a single top-level stack that contains two nested stacks: each one with a single Amazon S3 bucket:
public class MyNestedStack extends NestedStack { public MyNestedStack(Construct scope, String id) { this(scope, id, null); } public MyNestedStack(Construct scope, String id, NestedStackProps props) { super(scope, id, props); new Bucket(this, "NestedBucket"); } } public class MyParentStack extends Stack { public MyParentStack(Construct scope, String id) { this(scope, id, null); } public MyParentStack(Construct scope, String id, StackProps props) { super(scope, id, props); new MyNestedStack(this, "Nested1"); new MyNestedStack(this, "Nested2"); } }
Resources references across nested/parent boundaries (even with multiple levels of nesting) will be wired by the AWS CDK
through CloudFormation parameters and outputs. When a resource from a parent stack is referenced by a nested stack,
a CloudFormation parameter will automatically be added to the nested stack and assigned from the parent; when a resource
from a nested stack is referenced by a parent stack, a CloudFormation output will be automatically be added to the
nested stack and referenced using Fn::GetAtt "Outputs.Xxx"
from the parent.
Nested stacks also support the use of Docker image and file assets.
Accessing resources in a different stack
You can access resources in a different stack, as long as they are in the
same account and AWS Region. The following example defines the stack stack1
,
which defines an Amazon S3 bucket. Then it defines a second stack, stack2
,
which takes the bucket from stack1 as a constructor property.
Map<String, String> prod = Map.of("account", "123456789012", "region", "us-east-1"); StackThatProvidesABucket stack1 = StackThatProvidesABucket.Builder.create(app, "Stack1").env(prod).build(); // stack2 will take a property { bucket: IBucket } StackThatExpectsABucket stack2 = new StackThatExpectsABucket(app, "Stack2", new StackThatExpectsABucketProps() .bucket(stack1.getBucket()) .env(prod) );
If the AWS CDK determines that the resource is in the same account and Region, but in a different stack, it automatically synthesizes AWS CloudFormation Exports in the producing stack and an Fn::ImportValue in the consuming stack to transfer that information from one stack to the other.
Removing automatic cross-stack references
The automatic references created by CDK when you use resources across stacks are convenient, but may block your deployments if you want to remove the resources that are referenced in this way. You will see an error like:
Export Stack1:ExportsOutputFnGetAtt-****** cannot be deleted as it is in use by Stack1
Let's say there is a Bucket in the stack1
, and the stack2
references its
bucket.bucketName
. You now want to remove the bucket and run into the error above.
It's not safe to remove stack1.bucket
while stack2
is still using it, so
unblocking yourself from this is a two-step process. This is how it works:
DEPLOYMENT 1: break the relationship
- Make sure
stack2
no longer referencesbucket.bucketName
(maybe the consumer stack now uses its own bucket, or it writes to an AWS DynamoDB table, or maybe you just remove the Lambda Function altogether). - In the
stack1
class, callthis.exportValue(this.bucket.bucketName)
. This will make sure the CloudFormation Export continues to exist while the relationship between the two stacks is being broken. - Deploy (this will effectively only change the
stack2
, but it's safe to deploy both).
DEPLOYMENT 2: remove the resource
- You are now free to remove the
bucket
resource fromstack1
. - Don't forget to remove the
exportValue()
call as well. - Deploy again (this time only the
stack1
will be changed -- the bucket will be deleted).
Durations
To make specifications of time intervals unambiguous, a single class called
Duration
is used throughout the AWS Construct Library by all constructs
that that take a time interval as a parameter (be it for a timeout, a
rate, or something else).
An instance of Duration is constructed by using one of the static factory methods on it:
Duration.seconds(300); // 5 minutes Duration.minutes(5); // 5 minutes Duration.hours(1); // 1 hour Duration.days(7); // 7 days Duration.parse("PT5M");
Durations can be added or subtracted together:
Duration.minutes(1).plus(Duration.seconds(60)); // 2 minutes Duration.minutes(5).minus(Duration.seconds(10));
Size (Digital Information Quantity)
To make specification of digital storage quantities unambiguous, a class called
Size
is available.
An instance of Size
is initialized through one of its static factory methods:
Size.kibibytes(200); // 200 KiB Size.mebibytes(5); // 5 MiB Size.gibibytes(40); // 40 GiB Size.tebibytes(200); // 200 TiB Size.pebibytes(3);
Instances of Size
created with one of the units can be converted into others.
By default, conversion to a higher unit will fail if the conversion does not produce
a whole number. This can be overridden by unsetting integral
property.
Size.mebibytes(2).toKibibytes(); // yields 2048 Size.kibibytes(2050).toMebibytes(SizeConversionOptions.builder().rounding(SizeRoundingBehavior.FLOOR).build());
Secrets
To help avoid accidental storage of secrets as plain text, we use the SecretValue
type to
represent secrets. Any construct that takes a value that should be a secret (such as
a password or an access key) will take a parameter of type SecretValue
.
The best practice is to store secrets in AWS Secrets Manager and reference them using SecretValue.secretsManager
:
SecretValue secret = SecretValue.secretsManager("secretId", SecretsManagerSecretOptions.builder() .jsonField("password") // optional: key of a JSON field to retrieve (defaults to all content), .versionId("id") // optional: id of the version (default AWSCURRENT) .versionStage("stage") .build());
Using AWS Secrets Manager is the recommended way to reference secrets in a CDK app.
SecretValue
also supports the following secret sources:
SecretValue.unsafePlainText(secret)
: stores the secret as plain text in your app and the resulting template (not recommended).SecretValue.secretsManager(secret)
: refers to a secret stored in Secrets ManagerSecretValue.ssmSecure(param, version)
: refers to a secret stored as a SecureString in the SSM Parameter Store. If you don't specify the exact version, AWS CloudFormation uses the latest version of the parameter.SecretValue.cfnParameter(param)
: refers to a secret passed through a CloudFormation parameter (must haveNoEcho: true
).SecretValue.cfnDynamicReference(dynref)
: refers to a secret described by a CloudFormation dynamic reference (used byssmSecure
andsecretsManager
).SecretValue.resourceAttribute(attr)
: refers to a secret returned from a CloudFormation resource creation.
SecretValue
s should only be passed to constructs that accept properties of type
SecretValue
. These constructs are written to ensure your secrets will not be
exposed where they shouldn't be. If you try to use a SecretValue
in a
different location, an error about unsafe secret usage will be thrown at
synthesis time.
ARN manipulation
Sometimes you will need to put together or pick apart Amazon Resource Names
(ARNs). The functions stack.formatArn()
and stack.parseArn()
exist for
this purpose.
formatArn()
can be used to build an ARN from components. It will automatically
use the region and account of the stack you're calling it on:
Stack stack; // Builds "arn:<PARTITION>:lambda:<REGION>:<ACCOUNT>:function:MyFunction" stack.formatArn(ArnComponents.builder() .service("lambda") .resource("function") .sep(":") .resourceName("MyFunction") .build());
parseArn()
can be used to get a single component from an ARN. parseArn()
will correctly deal with both literal ARNs and deploy-time values (tokens),
but in case of a deploy-time value be aware that the result will be another
deploy-time value which cannot be inspected in the CDK application.
Stack stack; // Extracts the function name out of an AWS Lambda Function ARN ArnComponents arnComponents = stack.parseArn(arn, ":"); String functionName = arnComponents.getResourceName();
Note that depending on the service, the resource separator can be either
:
or /
, and the resource name can be either the 6th or 7th
component in the ARN. When using these functions, you will need to know
the format of the ARN you are dealing with.
For an exhaustive list of ARN formats used in AWS, see AWS ARNs and Namespaces in the AWS General Reference.
Dependencies
Construct Dependencies
Sometimes AWS resources depend on other resources, and the creation of one resource must be completed before the next one can be started.
In general, CloudFormation will correctly infer the dependency relationship between resources based on the property values that are used. In the cases where it doesn't, the AWS Construct Library will add the dependency relationship for you.
If you need to add an ordering dependency that is not automatically inferred,
you do so by adding a dependency relationship using
constructA.node.addDependency(constructB)
. This will add a dependency
relationship between all resources in the scope of constructA
and all
resources in the scope of constructB
.
If you want a single object to represent a set of constructs that are not
necessarily in the same scope, you can use a ConcreteDependable
. The
following creates a single object that represents a dependency on two
constructs, constructB
and constructC
:
// Declare the dependable object ConcreteDependable bAndC = new ConcreteDependable(); bAndC.add(constructB); bAndC.add(constructC); // Take the dependency constructA.node.addDependency(bAndC);
Stack Dependencies
Two different stack instances can have a dependency on one another. This
happens when an resource from one stack is referenced in another stack. In
that case, CDK records the cross-stack referencing of resources,
automatically produces the right CloudFormation primitives, and adds a
dependency between the two stacks. You can also manually add a dependency
between two stacks by using the stackA.addDependency(stackB)
method.
A stack dependency has the following implications:
- Cyclic dependencies are not allowed, so if
stackA
is using resources fromstackB
, the reverse is not possible anymore. - Stacks with dependencies between them are treated specially by the CDK
toolkit:
- If
stackA
depends onstackB
, runningcdk deploy stackA
will also automatically deploystackB
. stackB
's deployment will be performed beforestackA
's deployment.
- If
Custom Resources
Custom Resources are CloudFormation resources that are implemented by arbitrary user code. They can do arbitrary lookups or modifications during a CloudFormation deployment.
To define a custom resource, use the CustomResource
construct:
CustomResource.Builder.create(this, "MyMagicalResource") .resourceType("Custom::MyCustomResource") // must start with 'Custom::' // the resource properties .properties(Map.of( "Property1", "foo", "Property2", "bar")) // the ARN of the provider (SNS/Lambda) which handles // CREATE, UPDATE or DELETE events for this resource type // see next section for details .serviceToken("ARN") .build();
Custom Resource Providers
Custom resources are backed by a custom resource provider which can be implemented in one of the following ways. The following table compares the various provider types (ordered from low-level to high-level):
| Provider | Compute Type | Error Handling | Submit to CloudFormation | Max Timeout | Language | Footprint | |----------------------------------------------------------------------|:------------:|:--------------:|:------------------------:|:---------------:|:--------:|:---------:| | sns.Topic | Self-managed | Manual | Manual | Unlimited | Any | Depends | | lambda.Function | AWS Lambda | Manual | Manual | 15min | Any | Small | | core.CustomResourceProvider | Lambda | Auto | Auto | 15min | Node.js | Small | | custom-resources.Provider | Lambda | Auto | Auto | Unlimited Async | Any | Large |
Legend:
- Compute type: which type of compute can is used to execute the handler.
- Error Handling: whether errors thrown by handler code are automatically trapped and a FAILED response is submitted to CloudFormation. If this is "Manual", developers must take care of trapping errors. Otherwise, events could cause stacks to hang.
- Submit to CloudFormation: whether the framework takes care of submitting SUCCESS/FAILED responses to CloudFormation through the event's response URL.
- Max Timeout: maximum allows/possible timeout.
- Language: which programming languages can be used to implement handlers.
- Footprint: how many resources are used by the provider framework itself.
A NOTE ABOUT SINGLETONS
When defining resources for a custom resource provider, you will likely want to define them as a stack singleton so that only a single instance of the provider is created in your stack and which is used by all custom resources of that type.
Here is a basic pattern for defining stack singletons in the CDK. The following examples ensures that only a single SNS topic is defined:
public Topic getOrCreate(Construct scope) { Stack stack = Stack.of(scope); String uniqueid = "GloballyUniqueIdForSingleton"; // For example, a UUID from `uuidgen` IConstruct existing = stack.node.tryFindChild(uniqueid); if (existing) { return (Topic)existing; } return new Topic(stack, uniqueid); }
Amazon SNS Topic
Every time a resource event occurs (CREATE/UPDATE/DELETE), an SNS notification is sent to the SNS topic. Users must process these notifications (e.g. through a fleet of worker hosts) and submit success/failure responses to the CloudFormation service.
Set serviceToken
to topic.topicArn
in order to use this provider:
Topic topic = new Topic(this, "MyProvider"); CustomResource.Builder.create(this, "MyResource") .serviceToken(topic.getTopicArn()) .build();
AWS Lambda Function
An AWS lambda function is called directly by CloudFormation for all resource events. The handler must take care of explicitly submitting a success/failure response to the CloudFormation service and handle various error cases.
Set serviceToken
to lambda.functionArn
to use this provider:
Function fn = new Function(this, "MyProvider", functionProps); CustomResource.Builder.create(this, "MyResource") .serviceToken(fn.getFunctionArn()) .build();
The core.CustomResourceProvider
class
The class @aws-cdk/core.CustomResourceProvider
offers a basic low-level
framework designed to implement simple and slim custom resource providers. It
currently only supports Node.js-based user handlers, and it does not have
support for asynchronous waiting (handler cannot exceed the 15min lambda
timeout).
The provider has a built-in singleton method which uses the resource type as a stack-unique identifier and returns the service token:
String serviceToken = CustomResourceProvider.getOrCreate(this, "Custom::MyCustomResourceType", CustomResourceProviderProps.builder() .codeDirectory(String.format("%s/my-handler", __dirname)) .runtime(CustomResourceProviderRuntime.NODEJS_14_X) .description("Lambda function created by the custom resource provider") .build()); CustomResource.Builder.create(this, "MyResource") .resourceType("Custom::MyCustomResourceType") .serviceToken(serviceToken) .build();
The directory (my-handler
in the above example) must include an index.js
file. It cannot import
external dependencies or files outside this directory. It must export an async
function named handler
. This function accepts the CloudFormation resource
event object and returns an object with the following structure:
exports.handler = async function(event) { const id = event.PhysicalResourceId; // only for "Update" and "Delete" const props = event.ResourceProperties; const oldProps = event.OldResourceProperties; // only for "Update"s switch (event.RequestType) { case "Create": // ... case "Update": // ... // if an error is thrown, a FAILED response will be submitted to CFN throw new Error('Failed!'); case "Delete": // ... } return { // (optional) the value resolved from `resource.ref` // defaults to "event.PhysicalResourceId" or "event.RequestId" PhysicalResourceId: "REF", // (optional) calling `resource.getAtt("Att1")` on the custom resource in the CDK app // will return the value "BAR". Data: { Att1: "BAR", Att2: "BAZ" }, // (optional) user-visible message Reason: "User-visible message", // (optional) hides values from the console NoEcho: true }; }
Here is an complete example of a custom resource that summarizes two numbers:
sum-handler/index.js
:
exports.handler = async (e) => { return { Data: { Result: e.ResourceProperties.lhs + e.ResourceProperties.rhs, }, }; };
sum.ts
:
import software.amazon.awscdk.core.Construct; import software.amazon.awscdk.core.CustomResource; import software.amazon.awscdk.core.CustomResourceProvider; import software.amazon.awscdk.core.CustomResourceProviderRuntime; import software.amazon.awscdk.core.Token; public class SumProps { private Number lhs; public Number getLhs() { return this.lhs; } public SumProps lhs(Number lhs) { this.lhs = lhs; return this; } private Number rhs; public Number getRhs() { return this.rhs; } public SumProps rhs(Number rhs) { this.rhs = rhs; return this; } } public class Sum extends Construct { public final Number result; public Sum(Construct scope, String id, SumProps props) { super(scope, id); String resourceType = "Custom::Sum"; String serviceToken = CustomResourceProvider.getOrCreate(this, resourceType, CustomResourceProviderProps.builder() .codeDirectory(String.format("%s/sum-handler", __dirname)) .runtime(CustomResourceProviderRuntime.NODEJS_14_X) .build()); CustomResource resource = CustomResource.Builder.create(this, "Resource") .resourceType(resourceType) .serviceToken(serviceToken) .properties(Map.of( "lhs", props.getLhs(), "rhs", props.getRhs())) .build(); this.result = Token.asNumber(resource.getAtt("Result")); } }
Usage will look like this:
Sum sum = new Sum(this, "MySum", new SumProps().lhs(40).rhs(2)); CfnOutput.Builder.create(this, "Result").value(Token.asString(sum.getResult())).build();
To access the ARN of the provider's AWS Lambda function role, use the getOrCreateProvider()
built-in singleton method:
CustomResourceProvider provider = CustomResourceProvider.getOrCreateProvider(this, "Custom::MyCustomResourceType", CustomResourceProviderProps.builder() .codeDirectory(String.format("%s/my-handler", __dirname)) .runtime(CustomResourceProviderRuntime.NODEJS_14_X) .build()); String roleArn = provider.getRoleArn();
This role ARN can then be used in resource-based IAM policies.
The Custom Resource Provider Framework
The @aws-cdk/custom-resources
module includes an advanced framework for
implementing custom resource providers.
Handlers are implemented as AWS Lambda functions, which means that they can be
implemented in any Lambda-supported runtime. Furthermore, this provider has an
asynchronous mode, which means that users can provide an isComplete
lambda
function which is called periodically until the operation is complete. This
allows implementing providers that can take up to two hours to stabilize.
Set serviceToken
to provider.serviceToken
to use this type of provider:
Provider provider = Provider.Builder.create(this, "MyProvider") .onEventHandler(onEventHandler) .isCompleteHandler(isCompleteHandler) .build(); CustomResource.Builder.create(this, "MyResource") .serviceToken(provider.getServiceToken()) .build();
See the documentation for more details.
AWS CloudFormation features
A CDK stack synthesizes to an AWS CloudFormation Template. This section explains how this module allows users to access low-level CloudFormation features when needed.
Stack Outputs
CloudFormation stack outputs and exports are created using
the CfnOutput
class:
CfnOutput.Builder.create(this, "OutputName") .value(myBucket.getBucketName()) .description("The name of an S3 bucket") // Optional .exportName("TheAwesomeBucket") .build();
Parameters
CloudFormation templates support the use of Parameters to customize a template. They enable CloudFormation users to input custom values to a template each time a stack is created or updated. While the CDK design philosophy favors using build-time parameterization, users may need to use CloudFormation in a number of cases (for example, when migrating an existing stack to the AWS CDK).
Template parameters can be added to a stack by using the CfnParameter
class:
CfnParameter.Builder.create(this, "MyParameter") .type("Number") .default(1337) .build();
The value of parameters can then be obtained using one of the value
methods.
As parameters are only resolved at deployment time, the values obtained are
placeholder tokens for the real value (Token.isUnresolved()
would return true
for those):
CfnParameter param = CfnParameter.Builder.create(this, "ParameterName").build(); // If the parameter is a String param.getValueAsString(); // If the parameter is a Number param.getValueAsNumber(); // If the parameter is a List param.getValueAsList();
Pseudo Parameters
CloudFormation supports a number of pseudo parameters,
which resolve to useful values at deployment time. CloudFormation pseudo
parameters can be obtained from static members of the Aws
class.
It is generally recommended to access pseudo parameters from the scope's stack
instead, which guarantees the values produced are qualifying the designated
stack, which is essential in cases where resources are shared cross-stack:
// "this" is the current construct Stack stack = Stack.of(this); stack.getAccount(); // Returns the AWS::AccountId for this stack (or the literal value if known) stack.getRegion(); // Returns the AWS::Region for this stack (or the literal value if known) stack.getPartition();
Resource Options
CloudFormation resources can also specify resource
attributes. The CfnResource
class allows
accessing those through the cfnOptions
property:
CfnBucket rawBucket = CfnBucket.Builder.create(this, "Bucket").build(); // -or- CfnBucket rawBucketAlt = (CfnBucket)myBucket.getNode().getDefaultChild(); // then rawBucket.getCfnOptions().getCondition() = CfnCondition.Builder.create(this, "EnableBucket").build(); rawBucket.getCfnOptions().getMetadata() = Map.of( "metadataKey", "MetadataValue");
Resource dependencies (the DependsOn
attribute) is modified using the
cfnResource.addDependsOn
method:
CfnResource resourceA = new CfnResource(this, "ResourceA", resourceProps); CfnResource resourceB = new CfnResource(this, "ResourceB", resourceProps); resourceB.addDependsOn(resourceA);
Intrinsic Functions and Condition Expressions
CloudFormation supports intrinsic functions. These functions
can be accessed from the Fn
class, which provides type-safe methods for each
intrinsic function as well as condition expressions:
// To use Fn::Base64 Fn.base64("SGVsbG8gQ0RLIQo="); // To compose condition expressions: CfnParameter environmentParameter = new CfnParameter(this, "Environment"); Fn.conditionAnd(Fn.conditionEquals("Production", environmentParameter), Fn.conditionNot(Fn.conditionEquals("us-east-1", Aws.REGION)));
When working with deploy-time values (those for which Token.isUnresolved
returns true
), idiomatic conditionals from the programming language cannot be
used (the value will not be known until deployment time). When conditional logic
needs to be expressed with un-resolved values, it is necessary to use
CloudFormation conditions by means of the CfnCondition
class:
CfnParameter environmentParameter = new CfnParameter(this, "Environment"); CfnCondition isProd = CfnCondition.Builder.create(this, "IsProduction") .expression(Fn.conditionEquals("Production", environmentParameter)) .build(); // Configuration value that is a different string based on IsProduction String stage = Fn.conditionIf(isProd.logicalId, "Beta", "Prod").toString(); // Make Bucket creation condition to IsProduction by accessing // and overriding the CloudFormation resource Bucket bucket = new Bucket(this, "Bucket"); CfnBucket cfnBucket = (CfnBucket)myBucket.getNode().getDefaultChild(); cfnBucket.getCfnOptions().getCondition() = isProd;
Mappings
CloudFormation mappings are created and queried using the
CfnMappings
class:
CfnMapping regionTable = CfnMapping.Builder.create(this, "RegionTable") .mapping(Map.of( "us-east-1", Map.of( "regionName", "US East (N. Virginia)"), "us-east-2", Map.of( "regionName", "US East (Ohio)"))) .build(); regionTable.findInMap(Aws.REGION, "regionName");
This will yield the following template:
Mappings: RegionTable: us-east-1: regionName: US East (N. Virginia) us-east-2: regionName: US East (Ohio)
Mappings can also be synthesized "lazily"; lazy mappings will only render a "Mappings"
section in the synthesized CloudFormation template if some findInMap
call is unable to
immediately return a concrete value due to one or both of the keys being unresolved tokens
(some value only available at deploy-time).
For example, the following code will not produce anything in the "Mappings" section. The
call to findInMap
will be able to resolve the value during synthesis and simply return
'US East (Ohio)'
.
CfnMapping regionTable = CfnMapping.Builder.create(this, "RegionTable") .mapping(Map.of( "us-east-1", Map.of( "regionName", "US East (N. Virginia)"), "us-east-2", Map.of( "regionName", "US East (Ohio)"))) .lazy(true) .build(); regionTable.findInMap("us-east-2", "regionName");
On the other hand, the following code will produce the "Mappings" section shown above,
since the top-level key is an unresolved token. The call to findInMap
will return a token that resolves to
{ "Fn::FindInMap": [ "RegionTable", { "Ref": "AWS::Region" }, "regionName" ] }
.
CfnMapping regionTable; regionTable.findInMap(Aws.REGION, "regionName");
Dynamic References
CloudFormation supports dynamically resolving values
for SSM parameters (including secure strings) and Secrets Manager. Encoding such
references is done using the CfnDynamicReference
class:
new CfnDynamicReference(CfnDynamicReferenceService.SECRETS_MANAGER, "secret-id:secret-string:json-key:version-stage:version-id");
Template Options & Transform
CloudFormation templates support a number of options, including which Macros or
Transforms to use when deploying the stack. Those can be
configured using the stack.templateOptions
property:
Stack stack = new Stack(app, "StackName"); stack.getTemplateOptions().getDescription() = "This will appear in the AWS console"; stack.getTemplateOptions().getTransforms() = List.of("AWS::Serverless-2016-10-31"); stack.getTemplateOptions().getMetadata() = Map.of( "metadataKey", "MetadataValue");
Emitting Raw Resources
The CfnResource
class allows emitting arbitrary entries in the
Resources section of the CloudFormation template.
CfnResource.Builder.create(this, "ResourceId") .type("AWS::S3::Bucket") .properties(Map.of( "BucketName", "bucket-name")) .build();
As for any other resource, the logical ID in the CloudFormation template will be generated by the AWS CDK, but the type and properties will be copied verbatim in the synthesized template.
Including raw CloudFormation template fragments
When migrating a CloudFormation stack to the AWS CDK, it can be useful to
include fragments of an existing template verbatim in the synthesized template.
This can be achieved using the CfnInclude
class.
CfnInclude.Builder.create(this, "ID") .template(Map.of( "Resources", Map.of( "Bucket", Map.of( "Type", "AWS::S3::Bucket", "Properties", Map.of( "BucketName", "my-shiny-bucket"))))) .build();
Termination Protection
You can prevent a stack from being accidentally deleted by enabling termination
protection on the stack. If a user attempts to delete a stack with termination
protection enabled, the deletion fails and the stack--including its status--remains
unchanged. Enabling or disabling termination protection on a stack sets it for any
nested stacks belonging to that stack as well. You can enable termination protection
on a stack by setting the terminationProtection
prop to true
.
Stack stack = Stack.Builder.create(app, "StackName") .terminationProtection(true) .build();
By default, termination protection is disabled.
CfnJson
CfnJson
allows you to postpone the resolution of a JSON blob from
deployment-time. This is useful in cases where the CloudFormation JSON template
cannot express a certain value.
A common example is to use CfnJson
in order to render a JSON map which needs
to use intrinsic functions in keys. Since JSON map keys must be strings, it is
impossible to use intrinsics in keys and CfnJson
can help.
The following example defines an IAM role which can only be assumed by principals that are tagged with a specific tag.
CfnParameter tagParam = new CfnParameter(this, "TagName"); CfnJson stringEquals = CfnJson.Builder.create(this, "ConditionJson") .value(Map.of( String.format("aws:PrincipalTag/%s", tagParam.getValueAsString()), true)) .build(); PrincipalBase principal = new AccountRootPrincipal().withConditions(Map.of( "StringEquals", stringEquals)); Role.Builder.create(this, "MyRole").assumedBy(principal).build();
Explanation: since in this example we pass the tag name through a parameter, it
can only be resolved during deployment. The resolved value can be represented in
the template through a { "Ref": "TagName" }
. However, since we want to use
this value inside a aws:PrincipalTag/TAG-NAME
IAM operator, we need it in the key of a StringEquals
condition. JSON keys
must be strings, so to circumvent this limitation, we use CfnJson
to "delay" the rendition of this template section to deploy-time. This means
that the value of StringEquals
in the template will be { "Fn::GetAtt": [ "ConditionJson", "Value" ] }
, and will only "expand" to the operator we synthesized during deployment.
Stack Resource Limit
When deploying to AWS CloudFormation, it needs to keep in check the amount of resources being added inside a Stack. Currently it's possible to check the limits in the AWS CloudFormation quotas page.
It's possible to synthesize the project with more Resources than the allowed (or even reduce the number of Resources).
Set the context key @aws-cdk/core:stackResourceLimit
with the proper value, being 0 for disable the limit of resources.
Deprecated: 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 https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html
-
ClassDescriptionIncludes API for attaching annotations such as warning messages to constructs.A construct which represents an entire CDK app.A fluent builder for
App
.Initialization props for apps.A builder forAppProps
An implementation forAppProps
Example:A builder forArnComponents
An implementation forArnComponents
An enum representing the various ARN formats that different services use.Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis.The type of asset hash.Asset hash options.A builder forAssetOptions
An implementation forAssetOptions
Stages a file or directory from a location on the file system into a staging directory.A fluent builder forAssetStaging
.Initialization properties forAssetStaging
.A builder forAssetStagingProps
An implementation forAssetStagingProps
Accessor for pseudo parameters.Synthesizer that reuses bootstrap roles from a different region.A fluent builder forBootstraplessSynthesizer
.Construction properties ofBootstraplessSynthesizer
.A builder forBootstraplessSynthesizerProps
An implementation forBootstraplessSynthesizerProps
Deprecated.use DockerImageBundling options.A builder forBundlingOptions
An implementation forBundlingOptions
The type of output that a bundling operation is producing.Specifies whether an Auto Scaling group and the instances it contains are replaced during an update.A builder forCfnAutoScalingReplacingUpdate
An implementation forCfnAutoScalingReplacingUpdate
To specify how AWS CloudFormation handles rolling updates for an Auto Scaling group, use the AutoScalingRollingUpdate policy.A builder forCfnAutoScalingRollingUpdate
An implementation forCfnAutoScalingRollingUpdate
With scheduled actions, the group size properties of an Auto Scaling group can change at any time.A builder forCfnAutoScalingScheduledAction
An implementation forCfnAutoScalingScheduledAction
Capabilities that affect whether CloudFormation is allowed to change IAM resources.Additional options for the blue/green deployment.A builder forCfnCodeDeployBlueGreenAdditionalOptions
An implementation forCfnCodeDeployBlueGreenAdditionalOptions
The application actually being deployed.A builder forCfnCodeDeployBlueGreenApplication
An implementation forCfnCodeDeployBlueGreenApplication
Type of theCfnCodeDeployBlueGreenApplication.target
property.A builder forCfnCodeDeployBlueGreenApplicationTarget
An implementation forCfnCodeDeployBlueGreenApplicationTarget
The attributes of the ECS Service being deployed.A builder forCfnCodeDeployBlueGreenEcsAttributes
An implementation forCfnCodeDeployBlueGreenEcsAttributes
A CloudFormation Hook for CodeDeploy blue-green ECS deployments.A fluent builder forCfnCodeDeployBlueGreenHook
.Construction properties ofCfnCodeDeployBlueGreenHook
.A builder forCfnCodeDeployBlueGreenHookProps
An implementation forCfnCodeDeployBlueGreenHookProps
Lifecycle events for blue-green deployments.A builder forCfnCodeDeployBlueGreenLifecycleEventHooks
An implementation forCfnCodeDeployBlueGreenLifecycleEventHooks
To perform an AWS CodeDeploy deployment when the version changes on an AWS::Lambda::Alias resource, use the CodeDeployLambdaAliasUpdate update policy.A builder forCfnCodeDeployLambdaAliasUpdate
An implementation forCfnCodeDeployLambdaAliasUpdate
Represents a CloudFormation condition, for resources which must be conditionally created and the determination must be made at deploy time.A fluent builder forCfnCondition
.Example:A builder forCfnConditionProps
An implementation forCfnConditionProps
Associate the CreationPolicy attribute with a resource to prevent its status from reaching create complete until AWS CloudFormation receives a specified number of success signals or the timeout period is exceeded.A builder forCfnCreationPolicy
An implementation forCfnCreationPolicy
A CloudFormationAWS::CloudFormation::CustomResource
.A fluent builder forCfnCustomResource
.Properties for defining aCfnCustomResource
.A builder forCfnCustomResourceProps
An implementation forCfnCustomResourceProps
With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted.References a dynamically retrieved value.Properties for a Dynamic Reference.A builder forCfnDynamicReferenceProps
An implementation forCfnDynamicReferenceProps
The service to retrieve the dynamic reference from.An element of a CloudFormation stack.Represents a CloudFormation resource.A fluent builder forCfnHook
.A CloudFormationAWS::CloudFormation::HookDefaultVersion
.A fluent builder forCfnHookDefaultVersion
.Properties for defining aCfnHookDefaultVersion
.A builder forCfnHookDefaultVersionProps
An implementation forCfnHookDefaultVersionProps
Construction properties ofCfnHook
.A builder forCfnHookProps
An implementation forCfnHookProps
A CloudFormationAWS::CloudFormation::HookTypeConfig
.A fluent builder forCfnHookTypeConfig
.Properties for defining aCfnHookTypeConfig
.A builder forCfnHookTypeConfigProps
An implementation forCfnHookTypeConfigProps
A CloudFormationAWS::CloudFormation::HookVersion
.A fluent builder forCfnHookVersion
.TheLoggingConfig
property type specifies logging configuration information for an extension.A builder forCfnHookVersion.LoggingConfigProperty
An implementation forCfnHookVersion.LoggingConfigProperty
Properties for defining aCfnHookVersion
.A builder forCfnHookVersionProps
An implementation forCfnHookVersionProps
Deprecated.use the CfnInclude class from the cloudformation-include module insteadDeprecated.Deprecated.use the CfnInclude class from the cloudformation-include module insteadDeprecated.Deprecated.Captures a synthesis-time JSON object a CloudFormation reference which resolves during deployment to the resolved values of the JSON object.A fluent builder forCfnJson
.Example:A builder forCfnJsonProps
An implementation forCfnJsonProps
A CloudFormationAWS::CloudFormation::Macro
.A fluent builder forCfnMacro
.Properties for defining aCfnMacro
.A builder forCfnMacroProps
An implementation forCfnMacroProps
Represents a CloudFormation mapping.A fluent builder forCfnMapping
.Example:A builder forCfnMappingProps
An implementation forCfnMappingProps
A CloudFormationAWS::CloudFormation::ModuleDefaultVersion
.A fluent builder forCfnModuleDefaultVersion
.Properties for defining aCfnModuleDefaultVersion
.A builder forCfnModuleDefaultVersionProps
An implementation forCfnModuleDefaultVersionProps
A CloudFormationAWS::CloudFormation::ModuleVersion
.A fluent builder forCfnModuleVersion
.Properties for defining aCfnModuleVersion
.A builder forCfnModuleVersionProps
An implementation forCfnModuleVersionProps
Example:A fluent builder forCfnOutput
.Example:A builder forCfnOutputProps
An implementation forCfnOutputProps
A CloudFormation parameter.A fluent builder forCfnParameter
.Example:A builder forCfnParameterProps
An implementation forCfnParameterProps
A CloudFormationAWS::CloudFormation::PublicTypeVersion
.A fluent builder forCfnPublicTypeVersion
.Properties for defining aCfnPublicTypeVersion
.A builder forCfnPublicTypeVersionProps
An implementation forCfnPublicTypeVersionProps
A CloudFormationAWS::CloudFormation::Publisher
.A fluent builder forCfnPublisher
.Properties for defining aCfnPublisher
.A builder forCfnPublisherProps
An implementation forCfnPublisherProps
Base class for referenceable CloudFormation constructs which are not Resources.Represents a CloudFormation resource.A fluent builder forCfnResource
.For an Auto Scaling group replacement update, specifies how many instances must signal success for the update to succeed.A builder forCfnResourceAutoScalingCreationPolicy
An implementation forCfnResourceAutoScalingCreationPolicy
A CloudFormationAWS::CloudFormation::ResourceDefaultVersion
.A fluent builder forCfnResourceDefaultVersion
.Properties for defining aCfnResourceDefaultVersion
.A builder forCfnResourceDefaultVersionProps
An implementation forCfnResourceDefaultVersionProps
Example:A builder forCfnResourceProps
An implementation forCfnResourceProps
When AWS CloudFormation creates the associated resource, configures the number of required success signals and the length of time that AWS CloudFormation waits for those signals.A builder forCfnResourceSignal
An implementation forCfnResourceSignal
A CloudFormationAWS::CloudFormation::ResourceVersion
.A fluent builder forCfnResourceVersion
.Logging configuration information for a resource.A builder forCfnResourceVersion.LoggingConfigProperty
An implementation forCfnResourceVersion.LoggingConfigProperty
Properties for defining aCfnResourceVersion
.A builder forCfnResourceVersionProps
An implementation forCfnResourceVersionProps
The Rules that define template constraints in an AWS Service Catalog portfolio describe when end users can use the template and which values they can specify for parameters that are declared in the AWS CloudFormation template used to create the product they are attempting to use.A fluent builder forCfnRule
.A rule assertion.A builder forCfnRuleAssertion
An implementation forCfnRuleAssertion
A rule can include a RuleCondition property and must include an Assertions property.A builder forCfnRuleProps
An implementation forCfnRuleProps
A CloudFormationAWS::CloudFormation::Stack
.A fluent builder forCfnStack
.Properties for defining aCfnStack
.A builder forCfnStackProps
An implementation forCfnStackProps
A CloudFormationAWS::CloudFormation::StackSet
.[Service-managed
permissions] Describes whether StackSets automatically deploys to AWS Organizations accounts that are added to a target organizational unit (OU).A builder forCfnStackSet.AutoDeploymentProperty
An implementation forCfnStackSet.AutoDeploymentProperty
A fluent builder forCfnStackSet
.The AWS OrganizationalUnitIds or Accounts for which to create stack instances in the specified Regions.A builder forCfnStackSet.DeploymentTargetsProperty
An implementation forCfnStackSet.DeploymentTargetsProperty
Describes whether StackSets performs non-conflicting operations concurrently and queues conflicting operations.A builder forCfnStackSet.ManagedExecutionProperty
An implementation forCfnStackSet.ManagedExecutionProperty
The user-specified preferences for how AWS CloudFormation performs a stack set operation.A builder forCfnStackSet.OperationPreferencesProperty
An implementation forCfnStackSet.OperationPreferencesProperty
The Parameter data type.A builder forCfnStackSet.ParameterProperty
An implementation forCfnStackSet.ParameterProperty
Stack instances in some specific accounts and Regions.A builder forCfnStackSet.StackInstancesProperty
An implementation forCfnStackSet.StackInstancesProperty
Properties for defining aCfnStackSet
.A builder forCfnStackSetProps
An implementation forCfnStackSetProps
Example:A builder forCfnTag
An implementation forCfnTag
A traffic route, representing where the traffic is being directed to.A builder forCfnTrafficRoute
An implementation forCfnTrafficRoute
Type of theCfnCodeDeployBlueGreenEcsAttributes.trafficRouting
property.A builder forCfnTrafficRouting
An implementation forCfnTrafficRouting
Traffic routing configuration settings.A builder forCfnTrafficRoutingConfig
An implementation forCfnTrafficRoutingConfig
The traffic routing configuration ifCfnTrafficRoutingConfig.type
isCfnTrafficRoutingType.TIME_BASED_CANARY
.A builder forCfnTrafficRoutingTimeBasedCanary
An implementation forCfnTrafficRoutingTimeBasedCanary
The traffic routing configuration ifCfnTrafficRoutingConfig.type
isCfnTrafficRoutingType.TIME_BASED_LINEAR
.A builder forCfnTrafficRoutingTimeBasedLinear
An implementation forCfnTrafficRoutingTimeBasedLinear
The possible types of traffic shifting for the blue-green deployment configuration.A CloudFormationAWS::CloudFormation::TypeActivation
.A fluent builder forCfnTypeActivation
.Contains logging configuration information for an extension.A builder forCfnTypeActivation.LoggingConfigProperty
An implementation forCfnTypeActivation.LoggingConfigProperty
Properties for defining aCfnTypeActivation
.A builder forCfnTypeActivationProps
An implementation forCfnTypeActivationProps
Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource.A builder forCfnUpdatePolicy
An implementation forCfnUpdatePolicy
A CloudFormationAWS::CloudFormation::WaitCondition
.A fluent builder forCfnWaitCondition
.A CloudFormationAWS::CloudFormation::WaitConditionHandle
.Properties for defining aCfnWaitCondition
.A builder forCfnWaitConditionProps
An implementation forCfnWaitConditionProps
A synthesizer that uses conventional asset locations, but not conventional deployment roles.A fluent builder forCliCredentialsStackSynthesizer
.Properties for the CliCredentialsStackSynthesizer.A builder forCliCredentialsStackSynthesizerProps
An implementation forCliCredentialsStackSynthesizerProps
A set of constructs to be used as a dependable.Represents the building block of the construct graph.Represents the construct node in the scope tree.In what order to return constructs.Base class for the model side of context providers.Options applied when copying directories.A builder forCopyOptions
An implementation forCopyOptions
Instantiation of a custom resource, whose implementation is provided a Provider.A fluent builder forCustomResource
.Properties to provide a Lambda-backed custom resource.A builder forCustomResourceProps
An implementation forCustomResourceProps
An AWS-Lambda backed custom resource provider, for CDK Construct Library constructs.Initialization properties forCustomResourceProvider
.A builder forCustomResourceProviderProps
An implementation forCustomResourceProviderProps
The lambda runtime to use for the resource provider.Uses conventionally named roles and asset storage locations.A fluent builder forDefaultStackSynthesizer
.Configuration properties for DefaultStackSynthesizer.A builder forDefaultStackSynthesizerProps
An implementation forDefaultStackSynthesizerProps
Default resolver implementation.Trait for IDependable.A single dependency.A builder forDependency
An implementation forDependency
Docker build options.A builder forDockerBuildOptions
An implementation forDockerBuildOptions
Ignores file paths based on the.dockerignore specification
.A Docker image.The location of the published docker image.A builder forDockerImageAssetLocation
An implementation forDockerImageAssetLocation
Example:A builder forDockerImageAssetSource
An implementation forDockerImageAssetSource
Docker run options.A builder forDockerRunOptions
An implementation forDockerRunOptions
A Docker volume.A builder forDockerVolume
An implementation forDockerVolume
Supported Docker volume consistency types.Represents a length of time.Properties to string encodings.A builder forEncodingOptions
An implementation forEncodingOptions
The deployment environment for a stack.A builder forEnvironment
An implementation forEnvironment
Represents a date of expiration.Options for thestack.exportValue()
method.A builder forExportValueOptions
An implementation forExportValueOptions
Features that are implemented behind a flag in order to preserve backwards compatibility for existing apps.The location of the published file asset.A builder forFileAssetLocation
An implementation forFileAssetLocation
Packaging modes for file assets.Represents the source for a file asset.A builder forFileAssetSource
An implementation forFileAssetSource
Options applied when copying directories into the staging location.A builder forFileCopyOptions
An implementation forFileCopyOptions
Options related to calculating source hash.A builder forFileFingerprintOptions
An implementation forFileFingerprintOptions
File system utilities.Options related to calculating source hash.A builder forFingerprintOptions
An implementation forFingerprintOptions
CloudFormation intrinsic functions.Example:A builder forGetContextKeyOptions
An implementation forGetContextKeyOptions
Example:A builder forGetContextKeyResult
An implementation forGetContextKeyResult
Example:A builder forGetContextValueOptions
An implementation forGetContextValueOptions
Example:A builder forGetContextValueResult
An implementation forGetContextValueResult
Ignores file paths based on the.gitignore specification
.Ignores file paths based on simple glob patterns.Interface for lazy untyped value producers.Internal default implementation forIAnyProducer
.A proxy class which represents a concrete javascript instance of this type.Represents an Aspect.Internal default implementation forIAspect
.A proxy class which represents a concrete javascript instance of this type.Common interface for all assets.Internal default implementation forIAsset
.A proxy class which represents a concrete javascript instance of this type.Represents a CloudFormation element that can be used within a Condition.Internal default implementation forICfnConditionExpression
.A proxy class which represents a concrete javascript instance of this type.Internal default implementation forICfnResourceOptions
.A proxy class which represents a concrete javascript instance of this type.Interface to specify certain functions as Service Catalog rule-specifc.Internal default implementation forICfnRuleConditionExpression
.A proxy class which represents a concrete javascript instance of this type.Represents a construct.Internal default implementation forIConstruct
.A proxy class which represents a concrete javascript instance of this type.Trait marker for classes that can be depended upon.Internal default implementation forIDependable
.A proxy class which represents a concrete javascript instance of this type.Function used to concatenate symbols in the target document language.Internal default implementation forIFragmentConcatenator
.A proxy class which represents a concrete javascript instance of this type.Determines the ignore behavior to use.Represents file path ignoring behavior.Interface for examining a construct and exposing metadata.Internal default implementation forIInspectable
.A proxy class which represents a concrete javascript instance of this type.Interface for lazy list producers.Internal default implementation forIListProducer
.A proxy class which represents a concrete javascript instance of this type.Local bundling.Internal default implementation forILocalBundling
.A proxy class which represents a concrete javascript instance of this type.Token subclass that represents values intrinsic to the target document language.A fluent builder forIntrinsic
.Customization properties for an Intrinsic token.A builder forIntrinsicProps
An implementation forIntrinsicProps
Interface for lazy number producers.Internal default implementation forINumberProducer
.A proxy class which represents a concrete javascript instance of this type.A Token that can post-process the complete resolved value, after resolve() has recursed over it.Internal default implementation forIPostProcessor
.A proxy class which represents a concrete javascript instance of this type.Interface for values that can be resolvable later.Internal default implementation forIResolvable
.A proxy class which represents a concrete javascript instance of this type.Current resolution context for tokens.Internal default implementation forIResolveContext
.A proxy class which represents a concrete javascript instance of this type.Interface for the Resource construct.Internal default implementation forIResource
.A proxy class which represents a concrete javascript instance of this type.Interface for (stable) lazy untyped value producers.Internal default implementation forIStableAnyProducer
.A proxy class which represents a concrete javascript instance of this type.Interface for (stable) lazy list producers.Internal default implementation forIStableListProducer
.A proxy class which represents a concrete javascript instance of this type.Interface for (stable) lazy number producers.Internal default implementation forIStableNumberProducer
.A proxy class which represents a concrete javascript instance of this type.Interface for (stable) lazy string producers.Internal default implementation forIStableStringProducer
.A proxy class which represents a concrete javascript instance of this type.Encodes information how a certain Stack should be deployed.Internal default implementation forIStackSynthesizer
.A proxy class which represents a concrete javascript instance of this type.Interface for lazy string producers.Internal default implementation forIStringProducer
.A proxy class which represents a concrete javascript instance of this type.Represents a single session of synthesis.Internal default implementation forISynthesisSession
.A proxy class which represents a concrete javascript instance of this type.Interface to implement tags.Internal default implementation forITaggable
.A proxy class which represents a concrete javascript instance of this type.CloudFormation template options for a stack.Internal default implementation forITemplateOptions
.A proxy class which represents a concrete javascript instance of this type.Interface to apply operation to tokens in a string.Internal default implementation forITokenMapper
.A proxy class which represents a concrete javascript instance of this type.How to resolve tokens.Internal default implementation forITokenResolver
.A proxy class which represents a concrete javascript instance of this type.Lazily produce a value.Options for creating lazy untyped tokens.A builder forLazyAnyValueOptions
An implementation forLazyAnyValueOptions
Options for creating a lazy list token.A builder forLazyListValueOptions
An implementation forLazyListValueOptions
Options for creating a lazy string token.A builder forLazyStringValueOptions
An implementation forLazyStringValueOptions
Use the CDK classic way of referencing assets.Functions for devising unique names for constructs.A CloudFormation nested stack.A fluent builder forNestedStack
.Initialization props for theNestedStack
construct.A builder forNestedStackProps
An implementation forNestedStackProps
Synthesizer for a nested stack.Includes special markers for automatic generation of physical names.An intrinsic Token that represents a reference to a construct.Possible values for a resource's Removal Policy.Example:A builder forRemovalPolicyOptions
An implementation forRemovalPolicyOptions
The RemoveTag Aspect will handle removing tags from this node and children.A fluent builder forRemoveTag
.Options that can be changed while doing a recursive resolve.A builder forResolveChangeContextOptions
An implementation forResolveChangeContextOptions
Options to the resolve() operation.A builder forResolveOptions
An implementation forResolveOptions
A construct which represents an AWS resource.Represents the environment a given resource lives in.A builder forResourceEnvironment
An implementation forResourceEnvironment
Construction properties forResource
.A builder forResourceProps
An implementation forResourceProps
Options for the 'reverse()' operation.A builder forReverseOptions
An implementation forReverseOptions
Accessor for scoped pseudo parameters.Options for referencing a secret value from Secrets Manager.A builder forSecretsManagerSecretOptions
An implementation forSecretsManagerSecretOptions
Work with secret values in the CDK.A fluent builder forSecretValue
.Represents the amount of digital storage.Options for how to convert time to a different unit.A builder forSizeConversionOptions
An implementation forSizeConversionOptions
Rounding behaviour when converting between units ofSize
.A root construct which represents a single CloudFormation stack.A fluent builder forStack
.Example:A builder forStackProps
An implementation forStackProps
Base class for implementing an IStackSynthesizer.An abstract application modeling unit consisting of Stacks that should be deployed together.A fluent builder forStage
.Initialization props for a stage.A builder forStageProps
An implementation forStageProps
Options for assembly synthesis.A builder forStageSynthesisOptions
An implementation forStageSynthesisOptions
Converts all fragments to strings and concats those.Determines how symlinks are followed.Deprecated.useapp.synth()
orstage.synth()
insteadDeprecated.Deprecated.Stack artifact options.A builder forSynthesizeStackArtifactOptions
An implementation forSynthesizeStackArtifactOptions
The Tag Aspect will handle adding a tag to this node and cascading tags to children.A fluent builder forTag
.TagManager facilitates a common implementation of tagging for Constructs.A fluent builder forTagManager
.Options to configure TagManager behavior.A builder forTagManagerOptions
An implementation forTagManagerOptions
Properties for a tag.A builder forTagProps
An implementation forTagProps
Manages AWS tags for all resources within a construct scope.Example:Options for how to convert time to a different unit.A builder forTimeConversionOptions
An implementation forTimeConversionOptions
Represents a special or lazily-evaluated value.An enum-like class that represents the result of comparing two Tokens.Less oft-needed functions to manipulate Tokens.Fragments of a concatenated string containing stringified Tokens.Inspector that maintains an attribute bag.An error returned during the validation phase.A builder forValidationError
An implementation forValidationError
Representation of validation results.A collection of validation results.