diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f60797b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.js +!jest.config.js +*.d.ts +node_modules + +# CDK asset staging directory +.cdk.staging +cdk.out diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..c1d6d45 --- /dev/null +++ b/.npmignore @@ -0,0 +1,6 @@ +*.ts +!*.d.ts + +# CDK asset staging directory +.cdk.staging +cdk.out diff --git a/README.md b/README.md new file mode 100644 index 0000000..3247665 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Welcome to your CDK TypeScript project! + +This is a blank project for TypeScript development with CDK. + +The `cdk.json` file tells the CDK Toolkit how to execute your app. + +## Useful commands + + * `npm run build` compile typescript to js + * `npm run watch` watch for changes and compile + * `npm run test` perform the jest unit tests + * `cdk deploy` deploy this stack to your default AWS account/region + * `cdk diff` compare deployed stack with current state + * `cdk synth` emits the synthesized CloudFormation template diff --git a/bin/cdk_app.ts b/bin/cdk_app.ts new file mode 100644 index 0000000..7cc9f43 --- /dev/null +++ b/bin/cdk_app.ts @@ -0,0 +1,21 @@ +#!/usr/bin/env node +import 'source-map-support/register'; +import * as cdk from '@aws-cdk/core'; +import { CdkAppStack } from '../lib/cdk_app-stack'; + +const app = new cdk.App(); +new CdkAppStack(app, 'CdkAppStack', { + /* If you don't specify 'env', this stack will be environment-agnostic. + * Account/Region-dependent features and context lookups will not work, + * but a single synthesized template can be deployed anywhere. */ + + /* Uncomment the next line to specialize this stack for the AWS Account + * and Region that are implied by the current CLI configuration. */ + // env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION }, + + /* Uncomment the next line if you know exactly what Account and Region you + * want to deploy the stack to. */ + // env: { account: '123456789012', region: 'us-east-1' }, + + /* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */ +}); diff --git a/cdk.json b/cdk.json new file mode 100644 index 0000000..cd90ca6 --- /dev/null +++ b/cdk.json @@ -0,0 +1,18 @@ +{ + "app": "npx ts-node --prefer-ts-exts bin/cdk_app.ts", + "context": { + "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, + "@aws-cdk/core:enableStackNameDuplicates": "true", + "aws-cdk:enableDiffNoFail": "true", + "@aws-cdk/core:stackRelativeExports": "true", + "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true, + "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true, + "@aws-cdk/aws-kms:defaultKeyPolicies": true, + "@aws-cdk/aws-s3:grantWriteWithoutAcl": true, + "@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true, + "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, + "@aws-cdk/aws-efs:defaultEncryptionAtRest": true, + "@aws-cdk/aws-lambda:recognizeVersionProps": true, + "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true + } +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..08263b8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + testEnvironment: 'node', + roots: ['/test'], + testMatch: ['**/*.test.ts'], + transform: { + '^.+\\.tsx?$': 'ts-jest' + } +}; diff --git a/lib/cdk_app-stack.ts b/lib/cdk_app-stack.ts new file mode 100644 index 0000000..c4e1600 --- /dev/null +++ b/lib/cdk_app-stack.ts @@ -0,0 +1,9 @@ +import * as cdk from '@aws-cdk/core'; + +export class CdkAppStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + // The code that defines your stack goes here + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7291922 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "cdk_app", + "version": "0.1.0", + "bin": { + "cdk_app": "bin/cdk_app.js" + }, + "scripts": { + "build": "tsc", + "watch": "tsc -w", + "test": "jest", + "cdk": "cdk" + }, + "devDependencies": { + "@aws-cdk/assert": "1.121.0", + "@types/jest": "^26.0.10", + "@types/node": "10.17.27", + "jest": "^26.4.2", + "ts-jest": "^26.2.0", + "aws-cdk": "1.121.0", + "ts-node": "^9.0.0", + "typescript": "~3.9.7" + }, + "dependencies": { + "@aws-cdk/core": "1.121.0", + "source-map-support": "^0.5.16" + } +} diff --git a/test/cdk_app.test.ts b/test/cdk_app.test.ts new file mode 100644 index 0000000..f6d254f --- /dev/null +++ b/test/cdk_app.test.ts @@ -0,0 +1,13 @@ +import { expect as expectCDK, matchTemplate, MatchStyle } from '@aws-cdk/assert'; +import * as cdk from '@aws-cdk/core'; +import * as CdkApp from '../lib/cdk_app-stack'; + +test('Empty Stack', () => { + const app = new cdk.App(); + // WHEN + const stack = new CdkApp.CdkAppStack(app, 'MyTestStack'); + // THEN + expectCDK(stack).to(matchTemplate({ + "Resources": {} + }, MatchStyle.EXACT)) +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..9f8e8be --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "lib": [ + "es2018" + ], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": [ + "./node_modules/@types" + ] + }, + "exclude": [ + "node_modules", + "cdk.out" + ] +}