• Overview
    • Enforce Policy as Code
    • Infrastructure as Code
    • Inject Secrets into Terraform
    • Integrate with Existing Workflows
    • Manage Kubernetes
    • Manage Virtual Machine Images
    • Multi-Cloud Deployment
    • Network Infrastructure Automation
    • Terraform CLI
    • Terraform Cloud
    • Terraform Enterprise
  • Registry
  • Tutorials
    • About the Docs
    • Intro to Terraform
    • Configuration Language
    • Terraform CLI
    • Terraform Cloud
    • Terraform Enterprise
    • Provider Use
    • Plugin Development
    • Registry Publishing
    • Integration Program
    • Terraform Tools
    • CDK for Terraform
    • Glossary
  • Community
GitHubTerraform Cloud
Download

    CDK for Terraform

  • Overview
  • Get Started
    • Architecture
    • HCL Interoperability
    • Constructs
    • Providers and Resources
    • Modules
    • Data Sources
    • Variables and Outputs
    • Functions
    • Remote Backends
    • Aspects
    • Assets
    • Tokens
    • Stacks
  • Examples and Guides
    • Project Setup
    • Configuration File
    • Best Practices
    • Environment Variables
    • Remote Templates
    • AWS Adapter [preview]
    • Unit Tests
    • Debugging
    • CLI Configuration
    • Commands
    • Overview
    • Upgrading to Version 0.6
    • Upgrading to Version 0.7
    • Upgrading to Version 0.9
    • Upgrading to Version 0.10
    • Upgrading to Version 0.11
  • Community
  • Telemetry
  • Other Docs

  • Intro to Terraform
  • Configuration Language
  • Terraform CLI
  • Terraform Cloud
  • Terraform Enterprise
  • Provider Use
  • Plugin Development
  • Registry Publishing
  • Integration Program
  • Terraform Tools
  • CDK for Terraform
  • Glossary
Type '/' to Search

»Remote Templates

When you set up a new project via cdktf init, you can supply one of the built-in templates (e.g. typescript or python) or use a custom-built remote template. Templates scaffold a new CDK for Terraform (CDKTF) project, creating the necessary directories and files.

»Create Remote Templates

A template is a directory that contains at least a cdktf.json file, which is required for the cdktf CLI. When users run cdktf init, CDKTF downloads and and extracts a zip archive containing the files for the specified template. To create the project, it then searches all directories and extracts the directory containing the cdktf.json file. This allows you to create content (e.g. a README.md) in the root directory of your remote template that won't appear in the generated project directory.

You can use the library sscaff to scaffold a new project. The sscaff library copies all files into the new project directory while allowing for substitutions and hooks.

»Substitutions

A template can use substitutions for filenames and file content. To specify your own variables, use Hooks (details below). In addition to the built-in substitutions of sccaff, CDKTF supplies variables that you can use in templates.

»User Input

These variables hold user input. For example, you can use them in project files like package.json. CDKTF collects the required data from users when they run cdktf init with the template.

The TypeScript example below specifies that Name and Description are mandatory, but OrganizationName and WorkspaceName will only be required for projects that are set up to use a Terraform Cloud remote backend.

Name: string;
Description: string;
OrganizationName?: string;
WorkspaceName?: string;
Name: string;
Description: string;
OrganizationName?: string;
WorkspaceName?: string;

There is no way to collect custom user input for templates at the moment.

»Versions

These variables contain correct versions of the packages that are depending on the CDKTF CLI. The package names are provided in the correct format for the given platform. We recommend using these variables as they are provided without adding any custom logic, since the package name and their version schema follow specific conventions.

Reference the built-in templates for examples of how you can use version variables. Below are some of the variables in TypeScript.

cdktf_version: string;
constructs_version: string;
npm_cdktf: string;
npm_cdktf_cli: string;
pypi_cdktf: string;
mvn_cdktf: string;
nuget_cdktf: string;
cdktf_version: string;
constructs_version: string;
npm_cdktf: string;
npm_cdktf_cli: string;
pypi_cdktf: string;
mvn_cdktf: string;
nuget_cdktf: string;

»pre and post Hooks

Hooks allow you to run additional logic before and after the generation of the output.

»Debug Remote Templates

Add console.log() statements to your hook functions. CDK for Terraform displays this log output when a user initializes a project from your template.

You can also set the environment variable CDKTF_LOG_LEVEL to debug before invoking cdktf init to see more debugging output. The debugging output will be printed on stdout.

»Distribute Remote Templates

You can host your remote template anywhere, as long as it is formatted as a zip archive. GitHub allows users to fetch the repository contents as zip archive, so you do not have to create one manually. You can only specify urls to zip archives, so only url-based authentication mechanisms are supported. If you need support for private packages, please file an issue.

Below is an example for the main branch for a remote template GitHub repository.

https://github.com/<user or organization>/<repo>/archive/refs/heads/main.zip

If you prefer to use a Git tag, the URL format would look like this

https://github.com/<user or organization>/<repo>/archive/refs/tags/v0.0.1.zip

»Use Remote Templates

The CDKTF community maintains the following remote templates that you can use to set up your project.

  • python-poetry (by @johnfraney)

The example below initializes a new CDKTF project with a remote template.

$ cdktf init --template https://github.com/<user or organization>/<repo>/archive/refs/tags/v0.0.1.zip
$ cdktf init --template https://github.com/<user or organization>/<repo>/archive/refs/tags/v0.0.1.zip
github logoEdit this page
  • Overview
  • Docs
  • Extend
  • Privacy
  • Security
  • Press Kit
  • Consent Manager