@seek/aws-codedeploy-infra v2.3.0
@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.
6 months ago
7 months ago
9 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago