如何在单个AWS CDK项目中创建两种语言的Lambda函数?
在同一AWS CDK项目中部署多语言Lambda函数的可行性与实现方案
完全可行,AWS CDK原生支持在同一个栈内创建并部署不同运行时的Lambda函数,针对你的需求可以分别通过对应的构造器实现:
1. TypeScript通用Lambda实现
使用NodejsFunction构造器(来自aws-cdk-lib/aws-lambda-nodejs),它会自动完成TypeScript转译、依赖打包等工作,适配Node.js运行时:
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { Runtime } from 'aws-cdk-lib/aws-lambda'; export class MultiLangLambdaStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // 通用TypeScript Lambda const generalTsLambda = new NodejsFunction(this, 'GeneralTsLambda', { entry: './lambda-src/general.ts', // 你的TS代码文件路径 runtime: Runtime.NODEJS_20_X, handler: 'handler', // TS文件中导出的处理函数名 }); } }
2. 带数据依赖的Python Lambda实现
针对需要Pandas、Numpy等编译类依赖的场景,使用PythonFunction构造器(来自aws-cdk-lib/aws-lambda-python),它会通过Docker容器构建包含原生依赖的部署包,避免本地环境与Lambda运行环境的差异:
步骤1:准备Python代码与依赖
在项目目录下创建Python Lambda的代码目录(比如./lambda-src/data-processing),目录内包含:
- 函数代码文件(比如
main.py,导出lambda_handler函数) requirements.txt,声明依赖:
pandas==2.1.4 numpy==1.24.3
步骤2:在CDK栈中定义Python Lambda
import { PythonFunction } from 'aws-cdk-lib/aws-lambda-python'; // 在同一个栈内添加数据工程Python Lambda const dataProcessingLambda = new PythonFunction(this, 'DataProcessingPythonLambda', { entry: './lambda-src/data-processing', // Python代码目录路径 runtime: Runtime.PYTHON_3_11, handler: 'lambda_handler', // Python文件中导出的处理函数名 });
部署流程
执行cdk deploy时,CDK会自动分别处理两个Lambda的构建与部署:
- TypeScript Lambda:调用esbuild将TS转译为JS,打包成部署包上传至Lambda
- Python Lambda:启动Docker容器,在容器内安装依赖(包括编译原生扩展),生成适配Lambda运行环境的部署包后上传
注意事项
- 确保本地已安装Docker,
PythonFunction依赖Docker完成跨平台依赖构建 - 可根据两个Lambda的场景需求,分别配置内存、超时、环境变量等参数
内容的提问来源于stack exchange,提问作者wapt49
相关产品推荐
相关产品推荐

