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

1.1.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.

Readme

Keywords

none

Package Sidebar

Install

npm i @seek/aws-codedeploy-infra

Weekly Downloads

64

Version

1.1.0

License

MIT

Unpacked Size

776 kB

Total Files

21

Last publish

Collaborators

  • seek-oss-ci