You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:55:39