@seek/aws-codedeploy-infra
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

@seek/aws-codedeploy-infra

npm package

AWS CDK infrastructure for AWS CodeDeploy Hooks.

Setup

AWS Lambda hooks can be deployed inline with each application in a self-contained CloudFormation stack, however this overhead becomes less desirable as you scale to multiple applications.

The HookStack construct defines a consolidated infrastructure stack that can be deployed once per environment and utilised by multiple applications in the network:

import { HookStack } from '@seek/aws-codedeploy-infra';
import { App } from 'aws-cdk-lib';

const app = new App();

new HookStack(app);

app.synth();

Usage

Lambda function (CDK)

In a CDK stack:

+ import { LambdaDeployment } from '@seek/aws-codedeploy-infra';
import { aws_lambda_nodejs } from 'aws-cdk-lib';

const lambdaFunction = new aws_lambda_nodejs.NodejsFunction(this, 'Function', {
  // ...
});

+ const lambdaDeployment = new LambdaDeployment(this, 'Deployment', {
+   lambdaFunction,
+ });

- lambdaFunction.addEventSource(source);
+ lambdaDeployment.alias.addEventSource(source);

The LambdaDeployment construct creates a CodeDeploy application and deployment group for your Lambda function, and applies an aws-codedeploy-hooks tag to enable AWS Lambda hooks to access these resources.

A BeforeAllowTraffic hook is registered to check that an incoming Lambda function version is healthy before cutting traffic over to its Live alias all at once. The hook invokes the incoming Lambda function version with a "smoke test" payload that looks like so:

import assert from 'assert';

export const handler = (event: Event, ctx: Context) => {
  // An empty event object `{}`
  assert.strictEqual(Object.keys(event).length, 0);

  // A context object with a custom user agent prop
  assert.strictEqual(
    typeof ctx.clientContext?.Custom?.['user-agent'],
    'string',
  );
};

This payload can be recognised by the isLambdaHook runtime helper.

/@seek/aws-codedeploy-infra/

    Package Sidebar

    Install

    npm i @seek/aws-codedeploy-infra

    Weekly Downloads

    8

    Version

    2.0.0

    License

    MIT

    Unpacked Size

    779 kB

    Total Files

    21

    Last publish

    Collaborators

    • seek-oss-ci