Not a Package Manager

    cdk-pipelines
    TypeScript icon, indicating that this package has built-in type declarations

    1.11.0 • Public • Published

    Codepipeline Construct Library

    To use first create a cdk project like this:

    mkdir foo
    cd foo
    

    Next create folders for the lambda, tests and the cdk project for example:

    mkdir resources
    mkdir src
    mkdir tests
    

    Then generate the actual cdk project by (this will generate a default ResourceStack):

    cd resources
    cdk init app --language typescript
    

    Develop the lambda code and tests, when done commit the project to codecommit for example (foo-lambda-repo)

    Next create a stack for the lambda (foo-lambda-stack.ts) inside the lib folder of the cdk project /resources/lib like so:

    ...
    import * as lambda from '@aws-cdk/aws-lambda'
    
    export class FooLambdaStack extends cdk.Stack {
    
        public readonly lambdaCode: lambda.CfnParametersCode;
    
        constructor(scope: cdk.Construct, id: string, props?:cdk.StackProps) {
            super(scope, id, props)
    
            this.lambdaCode = lambda.Code.fromCfnParameters();
    
            const func = new lambda.Function(this, 'FooLambda', {
                code: this.lambdaCode,
                handler: 'foo.handler',
                runtime: lambda.Runtime.PYTHON_3_8,
                description: `Generated on: ${new Date().toISOString()}`,
            });        
        }
    }

    Next using the project generated Stack in this case ResourcesStack You can generate a lambda codepipeline like this:

    ...
    import { LambdaPipeline } from 'cdk-pipelines'
    
    export interface ResourcesStackProps extends cdk.StackProps {
    	  readonly lambdaCode: lambda.CfnParametersCode;
    }
    
    export class ResourcesStack extends cdk.Stack {
      constructor(scope: cdk.Construct, id: string, props: CdkTestStackProps) {
        super(scope, id, props);
    
        new LambdaPipeline(this, "FooLambdaPipelineStack", {
          codeRepositoryName:'foo-lambda-repo',
          cdkFolderName: 'foo',
          lambdaCodeFolderName: 'src',
          lambdaCode: props.lambdaCode,
          installCommands: [
              'pip install -r requirements.txt'
          ],
          buildCommands: [
              'python -m pytest -v -s tests --disable-pytest-warnings'
          ],
          artifactBaseDir:'src',
          artifactFiles: [
              '**/*'
          ],
          runtime: {python : 3.8}
        })
      }
    }

    Next update the resources.ts file in the bin directory to use the two stacks lambda, pipeline like so:

    ...
    import { FooLambdaStack } from '../lib/foo-lambda-stack';
    import { ResourcesStack } from '../lib/resources-stack';
    
    const app = new cdk.App();
    const lambdaStack = new FooLambdaStack(app, 'FooLambdaStack');
    new ResourcesStack(app, 'ResourcesStack', {
        lambdaCode: lambdaStack.lambdaCode 
    });

    Finally update your test under resources/test/resources.test.ts

    The directory structure should look this this:

    .
    ├── requirements.txt
    ├── resources
    │   ├── README.md
    │   ├── bin
    │   │   └── resources.ts
    │   ├── cdk.json
    │   ├── jest.config.js
    │   ├── lib
    │   │   ├── foo-lambda-stack.ts
    │   │   └── resources-stack.ts
    │   ├── package-lock.json
    │   ├── package.json
    │   ├── test
    │   │   └── resources.test.ts
    │   └── tsconfig.json
    ├── src
    │   └── lambda.py
    └── tests
        └── test_lambda.py
    

    Before you deploy make sure this code is also commited to codecommit.

    To deploy the codepipeline do this:

    npm run build
    cdk deploy ResourcesStack
    

    This will build the codepipeline which will now pull the source code from the codecommit repo (foo-lambda-repo), and build the lambda stack from there.

    Install

    npm i cdk-pipelines

    DownloadsWeekly Downloads

    17

    Version

    1.11.0

    License

    Apache-2.0

    Unpacked Size

    53.8 kB

    Total Files

    22

    Last publish

    Collaborators

    • csaenz