As a developer, you're accustomed to using your own tooling and writing in familiar languages. For several years, HCL has been one of the fastest growing languages at GitHub, and yet we have often heard the desire to provision infrastructure with familiar programming languages like Python and TypeScript.
The community preview of the Cloud Development Kit for Terraform allows you to define infrastructure using TypeScript and Python while leveraging the hundreds of providers and thousands of module definitions provided by Terraform and the Terraform ecosystem.
By leaning on languages like TypeScript, you can use all the IDE features you depend on, such as IntelliSense in Visual Studio Code.
We collaborated with AWS and the Cloud Development Kit (CDK) team to support this new project leveraging two key components of the AWS CDK: a set of language native frameworks for defining infrastructure and adaptors to an underlying provisioning tool. The CDK for Terraform generates Terraform configuration to enable provisioning with Terraform. The adaptor works with any existing provider and with the modules hosted in the Terraform Registry. The core Terraform workflow remains the same, with the ability to plan changes before applying.
This is all part of how we've built Terraform: as a platform for provisioning modern infrastructure (or any API supported by Terraform).
»How it works
Terraform can provision infrastructure defined as HCL (HashiCorp Configuration Language) or JSON. HCL is a concise, domain specific language with features JSON lacks such as comments and variables.
The JSON ingest feature of Terraform has been used in CI/CD environments and other machine-generated workflows to integrate with a wide variety of tools. Together with the AWS CDK, this makes it possible to generate JSON from TypeScript or Python, then run that JSON using standard Terraform commands.
At a high level, the
cdktf tool includes a
deploy command that can compile TypeScript or Python, generate Terraform-friendly JSON, and
apply the data definition via Terraform.
$ cdktf deploy
Or, the workflow can be performed manually in smaller steps. The
synth command generates JSON from TypeScript or Python code.
$ cdktf synth
This generates a directory named
cdktf.out which can be consumed by Terraform.
$ tree cdktf.out cdktf.out ├── cdk.tf.json └── plan
Terraform commands can be run in the
cdktf.out directory using the
$ cd cdktf.out && terraform apply
We've created several tutorials that you can run to learn how to use this new CDK. In this learning track, we'll use the high level
cdktf commands to work with TypeScript code directly.