Lumigo CDK Integrations
This repository provides means of adding Lumigo tracing as "infrastructure-as-code" to Lambda functions deployed via the AWS Cloud Development Kit (CDK) v2.
If instead of the AWS CDK v2, you are using the Serverless Framework, refer to the serverless-lumigo
plugin documentation.
Installation
TypeScript / JavaScript
With yarn
:
yarn install 'lumigo-cdk2-alpha'
With npm
:
npm install 'lumigo-cdk2-alpha'
Go
TODO
Java
TODO
.NET
TODO
Python
TODO
Usage
The Lumigo CDK integration enables you to trace all the applicable constructs inside an CDK App or a Stack, as well on a function-by-function basis.
The only requirement to use the Lumigo CDK integration is to have the Lumigo token stored in a way that can be accessed as a SecretValue
, which supports, among other means of accessing secrets via the CDK:
Instrumenting the entire CDK application
The following code will apply Lumigo autotracing to all the supported constructs:
import { Lumigo } from 'lumigo-cdk2-alpha';
import { App, SecretValue } from 'aws-cdk-lib';
const app = new App();
new Lumigo({lumigoToken:SecretValue.secretsManager('LumigoToken')}).traceEverything(app);
app.synth();
The Lumigo.traceEverything
functionality is built using CDK Aspects, which can also be used directly as follows:
import { Lumigo } from 'lumigo-cdk2-alpha';
import { App, Aspects. SecretValue } from 'aws-cdk-lib';
const app = new App();
Aspects.of(app).add(new Lumigo({lumigoToken:SecretValue.secretsManager('LumigoToken')}).asAspect());
app.synth();
Instrumenting a CDK stack
The following code will apply Lumigo autotracing to all the supported constructs in the instrumented stack:
import { Lumigo } from 'lumigo-cdk2-alpha';
import { App, SecretValue } from 'aws-cdk-lib';
export class NodejsStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps = {}) {
super(scope, id, props);
new Function(this, 'MyLambda', {
code: new InlineCode('foo'),
handler: 'index.handler',
runtime: Runtime.NODEJS_14_X,
});
}
}
const app = new App();
const stack = new NodejsStack(app, 'NodejsTestStack', {
env: {
region: 'eu-central-1',
}
});
new Lumigo({lumigoToken:SecretValue.secretsManager('LumigoToken')}).traceEverything(stack);
app.synth();
Instrumenting single functions
import { Lumigo } from 'lumigo-cdk2-alpha';
import { App, SecretValue } from 'aws-cdk-lib';
interface NodejsStackProps extends StackProps {
readonly lumigo: Lumigo;
}
export class NodejsStack extends Stack {
constructor(scope: Construct, id: string, props: NodejsStackProps = {}) {
super(scope, id, props);
const handler = new Function(this, 'MyLambda', {
code: new InlineCode('foo'),
handler: 'index.handler',
runtime: Runtime.NODEJS_14_X,
});
props.lumigo.traceLambda(handler);
}
}
const app = new App();
const lumigo = new Lumigo({lumigoToken:SecretValue.secretsManager('LumigoToken')}).traceEverything(stack);
const stack = new NodejsStack(app, 'NodejsTestStack', {
env: {
region: 'eu-central-1',
},
lumigo,
});
app.synth();
Lambda Layer Version Pinning
Unless specified otherwise, when instrumenting a Lambda function, the Lumigo CDK integration will use the latest known Lambda layer at the moment of publishing the Lumigo CDK integration version.
(It is considered bad practice in CDK Construct designs to have API calls take place inside the synth
phase, so new versions of the lumigo-cdk2-alpha
will regularly be released, pointing at the latest layers.)
The pinning of specific layer versions can be performed at the level of the entire application or stack:
import { Lumigo } from 'lumigo-cdk2-alpha';
import { App, SecretValue } from 'aws-cdk-lib';
const app = new App();
new Lumigo({lumigoToken:SecretValue.secretsManager('LumigoToken')}).traceEverything(app, {
lambdaNodejsLayerVersion: 42,
lambdaPythonLayerVersion: 1,
});
app.synth();
Layer-version pinning can also be done function-by-function:
export class MyNodejsLambdaStack extends Stack {
constructor(scope: Construct, id: string, props: LumigoStackProps) {
super(scope, id, props);
const handler = new Function(this, 'MyLambda', {
code: new InlineCode('foo'),
handler: 'index.handler',
runtime: Runtime.NODEJS_14_X,
});
props.lumigo.traceLambda(handler, {
layerVersion: 42,
});
}
}
Supported Constructs
The Lumigo CDK integration applies autotrace to the following constructs by adding a Lambda layer containing the right tracer for the Lambda function runtime, and environment variables: