@seek/aws-codedeploy-infra
v2.1.3
Published
AWS CDK infrastructure for AWS CodeDeploy Hooks
Downloads
2,705
Readme
@seek/aws-codedeploy-infra
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.