The AWS CDK for software-defined deployments
Dreaming of Clouds
CDK Magic
The public, read-only vpc
attribute (lines 4 and 5) is defined within the HelloCdkBase
class itself. This attribute provides an interface for your class to export its VPC definition. Earlier, when talking of reuse, I mentioned the scenario in which additional application development teams might leverage your shared networking resources when defining their own applications with the CDK. This attribute provides the mechanism to make that functionality possible. At the end of the class, the VPC created within the class is made available outside of the class (through the attribute) by virtue of setting the value of the attribute to an export of helloCdkVpc
(line 44).
Build It!
I'm as eager as you are to watch CDK do its magic, but first you need to update bin/hello-cdk.ts
(Listing 2). Update yours such that it looks like the code in Listing 6.
Listing 6
New bin/hello-cdk.ts
#!/usr/bin/env node import cdk = require('@aws-cdk/cdk'); import { HelloCdkBase } from '../lib/hello-cdk-base'; const app = new cdk.App(); const stackName = 'HelloCdkBase-' + app.getContext('ENV') new HelloCdkBase(app, stackName, {}, app.getContext('ENV')); app.run();
Here, you set your main CDK app to import only from lib/hello-cdk-base.ts
, which is the file where your VPC code resides. In a future installment, I'll begin to build out the resources necessary for your application in the lib/hello-cdk-stack.ts
file, at which point you'll re-include it in bin/hello-cdk.ts
. You'll also see here the use of a context variable, ENV
(again, see the "How Context Works in the AWS CDK" box regarding dynamic context), to create dynamic names for your apps.
Generating CloudFormation with the CDK
Although this next step won't actually build resources in your AWS account, if you've ever spent countless hours slogging it out creating CloudFormation templates, you'll see it is incredibly cool. From your CLI, run the commands:
$ mkdir -p "./cft/qa" $ cdk synth -c ENV=qa "HelloCdkBase-qa" >./cft/qa/vpc.yml
You should now see a cft
directory with a qa
subdirectory in the root of your project. Within the qa
subdirectory, you'll find a file called vpc.yml
, which contains CloudFormation code that directly correlates to your TypeScript CDK code. Spend a few minutes looking back and forth between the YAML file and the TypeScript file: Which one would you rather spend a few minutes (or hours, depending on your choice) editing? My choice is definitely TypeScript.
Buy this article as PDF
(incl. VAT)