Skip to content

Latest commit

 

History

History
188 lines (137 loc) · 5.91 KB

README.md

File metadata and controls

188 lines (137 loc) · 5.91 KB

AWS Cloud Development Kit (AWS CDK)

The AWS Cloud Development Kit (AWS CDK) is a software development framework for defining cloud infrastructure in code.

Getting Started

Installation

Make sure you have the required dependencies installed:

  • Node.js 8.11.0
  • The SDK for the language you intend to use (Java, .Net, Ruby, ...)

Download the current release bundle from S3, and install it to ~/.cdk:

tmpdir=/tmp/aws-cdk-install
mkdir ${tmpdir}
aws s3 cp s3://<bucket>/<key> ${tmpdir}/aws-cdk.zip
unzip -o ${tmpdir}/aws-cdk.zip -d ~/.cdk

Then add the CDK to your $PATH:

# At the end of your ~/.bashrc or ~/.zshrc file
export PATH=${PATH:+${PATH}:}${HOME}/.cdk/bin

Creating a new project

New projects can be initialized using cdk init.

mkdir ${PROJECT_NAME}
cd ${PROJECT_NAME}
cdk init

Useful commands

# Initialize a new CDK project
cdk init

# Open the documentation in a web browser
cdk docs

# List available commands
cdk help

# Get help on a particular command (e.g: synth)
cdk help synth

Development Environment

This is a monorepo which uses lerna.

The CDK depends on jsii, which is still not published to npm. Therefore, the jsii tarballs are checked-in to this repository under ./local-npm and the install script will install them in the repo-global node_modules directory.

Prerequisites

Since this repo produces artifacts for multiple programming languages using jsii, it relies on the following toolchains:

When building on CodeBuild, these toolchains are all included in the superchain docker image. This image can also be used locally as follows:

eval $(aws ecr get-login --no-include-email)
IMAGE=260708760616.dkr.ecr.us-east-1.amazonaws.com/superchain:latest
docker pull ${IMAGE}
docker run --net=host -it -v $PWD:$PWD -w $PWD ${IMAGE}

This will get you into an interactive docker shell. You can then run ./install.sh and ./build.sh as described below.

Bootstrapping

  1. Clone this repository (or run git clean -fdx to clean up all build artifacts).
  2. Run ./install.sh - this will install all repo-level dependencies, including lerna and the unpublished modules from local-npm.
  3. Run ./build.sh - this will invoke lerna bootstrap and lerna run test. All external dependencies will be installed and internal deps will be cross-linked.

Development Iteration

After you've bootstrapped the repo, you would probably want to work on individual packages.

All packages in the repo have a two useful scripts: prepare and watch. In order to execute these scripts, use lerna run --stream --scope <package> <script>.

The reason you can't use "npm" is because dev tools are installed at the repository level and they are needed in the PATH when executing most of the package scripts.

A useful shell alias would use the directory name as a scope:

# add to your ~/.zshrc or ~/.bashrc
alias lr='lerna run --stream --scope $(basename $PWD)'

# more sugar
alias lw='lr watch &'
alias lp='lr prepare'

Then, you could just go into any of the package directories and use "lr" to run scripts. For example:

cd packages/aws-cdk-s3
lr watch

Linking against this repository

The script ./link-all.sh can be used to generate symlinks to all modules in this repository under some node_module directory. This can be used to develop against this repo as a local dependency.

One can use the postinstall script to symlink this repo:

{
  "scripts": {
    "postinstall": "../aws-cdk/link-all.sh"
  }
}

This assumes this repo is a sibling of the target repo and will install the CDK as a linked dependency during npm install.

Commits and Pull Requests

Commits should follow the conventional-changelog-standard to allow automatic changelog generation.

Package Linter

The pkglint tool normalizes all packages in the repo. It verifies package.json is normalized and adheres to the set of rules. To evaluate (and potentially fix) all package linting issues in the repo, run the following command from the root of the repository (after boostrapping):

npm run pkglint

Updating jsii

Download an official jsii zip bundle and replace the file under ./vendor. Any added dependencies, they will need to be added to the root package.json.

Language Support

The CDK uses jsii to generate language bindings for CDK classes, which proxy interaction to a node.js child process in runtime.

To vend another language for the CDK (given there's jsii support for it):

  1. Create a directory packages/aws-cdk-xxx (where "xxx" is the language).
  2. Look at aws-cdk-java/package.json as a reference on how to setup npm build that uses pacmak to generate the code for all CDK modules and then compile and wrap the package up.
  3. Edit bundle-beta.sh and add CDK and jsii artifacts for your language under repo/xxx
  4. Add a cdk init template for your language (see packages/aws-cdk/lib/init-templates).
  5. Edit getting-started.rst and make there there's a getting started sections and examples for the new language.

License

Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. See LICENSE file for license terms.