Escape hatches refer to objects that can add to or override existing resources. Use escape hatches for overrides and additions such as:
- Passing meta-arguments to resources not natively supported or implemented
- Passing remote backend information
Escape hatches must not have empty arguments or objects, as they will be removed from the synthesized JSON configuration.
For anything on the top-level terraform
block that is not natively
implemented, use the stack escape hatch to define a configuration. For example,
define remote backend using the addOverride
method in TypeScript.
stack.addOverride('terraform.backend', {
remote: {
organization: 'test',
workspaces: {
name: 'test'
}
}
});
This will synthesize a Terraform configuration with the remote backend included in
the terraform
block.
{
"terraform": {
"required_providers": {
"aws": "~> 2.0"
},
"backend": {
"remote": {
"organization": "test",
"workspaces": {
"name": "test"
}
}
}
}
}
Terraform supports meta-arguments for changing behavior of resources, including:
count
provisioner
for_each
In addition to Terraform resource meta-arguments, you may want to override resource attributes that cannot be fully expressed by the CDK for Terraform.
To facilitate the addition of meta-arguments and attributes, you can use an escape hatch that will add to or override the Terraform JSON configuration. Use the escape hatch to add meta-arguments or attributes released in new versions of Terraform and its providers.
For TypeScript, define a provisioner for a resource using the addOverride
method.
const tableName = 'my-table';
const table = new DynamodbTable(this, 'Hello', {
name: tableName,
hashKey: 'id',
attribute: [
{ name: 'id', type: 'S' }
]
});
table.addOverride('provisioner', [{
'local-exec': {
command: `aws dynamodb create-backup --table-name ${tableName} --backup-name ${tableName}-backup`
}
}]);
This will synthesize a Terraform configuration with the provisioner added to the JSON object.
{
"resource": {
"aws_dynamodb_table": {
"helloterraHello69872235": {
"hash_key": "temp",
"name": "my-table",
"attribute": [
{
"name": "id",
"type": "S"
}
],
"provisioner": [
{
"local-exec": {
"command": "aws dynamodb create-backup --table-name my-table --backup-name my-table-backup"
}
}
]
}
}
}
}
To override an attribute, include the resource attribute key in addOverride
. Note the attribute in the
escape hatch is in snake case. This is because the Terraform JSON configuration uses snake case instead of
camel case.
const topic = new SnsTopic(this, 'Topic', {
displayName: 'will-be-overwritten',
});
topic.addOverride('display_name', 'my-topic')
This will synthesize a Terraform configuration with the value overwritten.
{
"resource": {
"aws_sns_topic": {
"helloterraTopic6609C1D4": {
"display_name": "my-topic"
}
}
}
}