CdkAWS
AWS Lambda (CDK TypeScript)
AWS CDK stack deploying a Lambda function with IAM role, CloudWatch log group, and HTTP API Gateway.
cdklambdatypescriptserverless
Prerequisites
- •
Node.js >= 18 - •
AWS CDK CLI: `npm install -g aws-cdk` - •
AWS credentials configured - •
CDK bootstrapped: `cdk bootstrap aws://ACCOUNT_ID/REGION`
Template Code
// ─────────────────────────────────────────────────────────────────────────────
// AWS CDK — Lambda + HTTP API Gateway
// File: lib/lambda-stack.ts
// ─────────────────────────────────────────────────────────────────────────────
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
import * as integrations from 'aws-cdk-lib/aws-apigatewayv2-integrations';
import * as logs from 'aws-cdk-lib/aws-logs';
import { Construct } from 'constructs';
export class LambdaStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// ── CloudWatch Log Group ────────────────────────────────────────────────
const logGroup = new logs.LogGroup(this, 'ApiHandlerLogs', {
logGroupName: '/aws/lambda/api-handler',
retention: logs.RetentionDays.TWO_WEEKS,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// ── Lambda Function ─────────────────────────────────────────────────────
const apiHandler = new lambda.Function(this, 'ApiHandler', {
functionName: 'api-handler',
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('src/lambda'), // Your handler code directory
memorySize: 256,
timeout: cdk.Duration.seconds(30),
logGroup,
environment: {
NODE_ENV: 'production',
LOG_LEVEL: 'info',
},
});
// ── HTTP API Gateway ────────────────────────────────────────────────────
const httpApi = new apigatewayv2.HttpApi(this, 'HttpApi', {
apiName: 'my-http-api',
corsPreflight: {
allowHeaders: ['Content-Type', 'Authorization'],
allowMethods: [
apigatewayv2.CorsHttpMethod.GET,
apigatewayv2.CorsHttpMethod.POST,
apigatewayv2.CorsHttpMethod.PUT,
apigatewayv2.CorsHttpMethod.DELETE,
],
allowOrigins: ['*'],
maxAge: cdk.Duration.hours(1),
},
});
// Route all requests to the Lambda function
httpApi.addRoutes({
path: '/{proxy+}',
methods: [apigatewayv2.HttpMethod.ANY],
integration: new integrations.HttpLambdaIntegration('ApiIntegration', apiHandler),
});
// ── Outputs ─────────────────────────────────────────────────────────────
new cdk.CfnOutput(this, 'ApiUrl', {
value: httpApi.apiEndpoint,
description: 'HTTP API endpoint URL',
});
new cdk.CfnOutput(this, 'LambdaArn', {
value: apiHandler.functionArn,
description: 'Lambda function ARN',
});
}
}
// ── Entry point (bin/app.ts) ──────────────────────────────────────────────────
// import * as cdk from 'aws-cdk-lib';
// import { LambdaStack } from '../lib/lambda-stack';
//
// const app = new cdk.App();
// new LambdaStack(app, 'LambdaStack', {
// env: {
// account: process.env.CDK_DEFAULT_ACCOUNT,
// region: process.env.CDK_DEFAULT_REGION,
// },
// });
Usage
npm install cdk deploy LambdaStack