npm.io
0.325.0 • Published 5d ago

cdk-from-cfn

Licence
MIT OR Apache-2.0
Version
0.325.0
Deps
0
Size
4.1 MB
Vulns
0
Weekly
266.8K
Stars
70

cdk-from-cfn

cdk-from-cfn is a command-line tool that converts AWS CloudFormation templates into AWS CDK code. It supports multiple programming languages including TypeScript, Python, Java, Go, and C#.

Installation

cargo install cdk-from-cfn

Usage

cdk-from-cfn [INPUT] [OUTPUT] --language <LANGUAGE> --stack-name <STACK_NAME> [--as <stack|construct>]
  • INPUT is the input file path (STDIN by default).
  • OUTPUT is the output file path; if not specified, output will be printed on your command line (STDOUT by default).
  • --as (optional) specifies the output type: stack (default) or construct. Use construct to generate a reusable CDK construct instead of a standalone stack.
Class Type Option

By default, cdk-from-cfn generates code that extends Stack. You can use the --as flag to generate a reusable Construct instead:

# Generate a Stack (default)
cdk-from-cfn template.json --language typescript --as stack

# Generate a Construct
cdk-from-cfn template.json --language typescript --as construct

When using construct mode:

  • The generated class extends Construct instead of Stack
  • Props interface does not extend StackProps
  • Pseudo-parameters like AWS::StackName use Stack.of(this) to access the parent stack

Node.js Module Usage

cdk-from-cfn leverages WebAssembly (WASM) bindings to provide a cross-platform npm module, which exposes apis to be used in Node.js projects. Simply take a dependency on cdk-from-cfn in your package.json and utilize it as you would a normal module. i.e.

import * as cdk_from_cfn from 'cdk-from-cfn';

// get supported languages
cdk_from_cfn.supported_languages();

// transmute cfn template into cdk app (generates a Stack by default)
cdk_from_cfn.transmute(template, language, stackName);

// transmute cfn template into a reusable Construct
cdk_from_cfn.transmute(template, language, stackName, 'construct');

The transmute function accepts an optional fourth parameter classType:

  • 'stack' (default): generates code extending Stack
  • 'construct': generates code extending Construct

Language and Feature support

Name Enabled by default Description
typescript Enables support for TypeScript output
golang Enables support for Go output
java Enables support for Java output
Python Enables support for Python output
csharp Enables support for C# output

You can enable experimental languages (not enabled by default) by enabling the relevant feature:

$ cargo build --release --features=<feature-name>
Finished release [optimized] target(s) in 0.17s

If you want to disable on-by-default languages, you can pass --no-default-features:

$ cargo build --release --no-default-features --features=golang
Finished release [optimized] target(s) in 0.17s
Implemented
  • Fn::FindInMap
  • Fn::Join
  • Fn::Sub
  • Ref
  • Fn::And
  • Fn::Equals
  • Fn::If
  • Fn::Not
  • Fn::Or
  • Fn::GetAtt
  • Fn::Base64 support
  • Fn::ImportValue support
  • Fn::Select support
  • Resource ordering based on dependencies
  • Conditions are emitted in ts but not attached to resource conditions
  • Metadata emission for updates to asgs / lambda functions.
  • Emission of outputs / exports
  • Fn::GetAZs support
  • Adding depends-on, and ordering based on it too.
  • Deletion policy
  • Fn::Cidr support
Remaining

There are known unsupported features. Working on them in priority order:

  • Create policy
  • ssm metadata references
  • secretsmanager references