cdktf-helpers
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

CDKTF Helpers

Helpers for creating the stacks of cdktf, inspired by class component of React.js.

Quick Start

// main_stack.ts
export class MainStack extends CdktfStackComponent<Props, State> {
  beforeCreateResources() {
    // do something before creating resources
    new AwsProvider(this, "AWS", {
      region: "us-west-1",
    });

    const config = JSON.parse(fs.readFileSync("./config.json", "utf-8"));
    // set value for later use
    this.setState("instaceType", config.instanceType);
  }

  createResources() {
    // you can get value from props
    const ami = this.props.ami;
    const ec2Instance = new Instance(this, "compute", {
      ami,
      instanceType: this.state.instanceType,
    });

    // set value for output
    this.setOutput("ec2_instance", ec2Instance);
  }
}

// main.ts
const app = new App();

CdktfComponentFactory.createComponent(app, MainStack.name, {
  ami: "ami-01456a894f71116f2",
});

Component

A CdktfStackComponent comes with a pair of props and state to help you manage the data flow of your CDKTF stack.

To define a CDKTF component class, you need to extend CdktfStackComponent:

import { CdktfStackComponent } from "cdktf-helpers";

type Props = { ami: string };
type State = { ec2Instance: Instance };

export class MainStack extends CdktfStackComponent<Props, State> {
  beforeCreateResources() {
    // do something before creating resources
  }

  createResources() {
    // create resources here
  }

  afterCreateResources() {
    // do something after creating resources
  }
}

Component API

constructor()

type constructor = (
  scope: Construct,
  id: string,
  props?: Record<string, any> & { stackName: string }
) => CdktfStackComponent;

beforeCreateResources()

It is invoked immediately after a component is initialised.

createResources()

It is invoked after beforeCreateResources is executed.

You can create the resources in this method.

afterCreateResources()

It is invoked after createResource is executed.

Component Factory

CdktfComponentFactory.createComponent

import { CdktfComponentFactory } from "cdktf-helpers";
import { App } from "cdktf";
import MainStack from "./main_stack.ts";

const app = new App();

CdktfComponentFactory.createComponent(app, MainStack.name, {
  ami: "ami-01456a894f71116f2",
});

CdktfComponentFactory.createComponentAsync

Factory also provide async method, you can use it to create component asynchronously.

// With top level await
import { CdktfComponentFactory } from "cdktf-helpers";
import { App } from "cdktf";
import MainStack from "./main_stack.ts";

const app = new App();

await CdktfComponentFactory.createComponentAsync(app, MainStack.name, {
  ami: "ami-01456a894f71116f2",
});

Component lifecycle

When an instance of the CDKTF component is generated by createComponent(), these methods are called in the below order:

  • constructor()
  • beforeCreateResources()
  • createResource()
  • afterCreateResources()
  • Create Terraform outputs if any
    • If you have triggered setOutput while creating resources, it will be called after all functions are executed.

Package Sidebar

Install

npm i cdktf-helpers

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

14.6 kB

Total Files

6

Last publish

Collaborators

  • samsan1212