使用AWS CDK部署Lambda时如何调用第三方Python仓库的代码
最优方案及代码实现
首先你需要先将第三方仓库的代码引入CDK部署流程,以下是优先级最高的实现方案:
前置准备
在你的CDK项目根目录下创建专门存放Lambda代码的目录,例如./lambda,完成以下操作:
- 通过以下三种方式之一引入
3rdPartyRepo的代码,可根据团队协作规则选择:- 直接将
3rdPartyRepo中的PyFile.py复制到./lambda目录下,适合不常更新的第三方代码 - 将
3rdPartyRepo作为git子模块添加到CDK项目中,无需手动复制文件,每次部署前拉取子模块即可同步最新代码 - 将
3rdPartyRepo发布为团队内部私有PyPI包,后续通过依赖管理引入
- 直接将
- 在
./lambda目录下新建test.py入口文件,内容如下:
from PyFile import functionToUseForLambda lambda_handler = functionToUseForLambda
<CODE_GOES_HERE> 填写内容
直接使用CDK原生的Code.from_asset方法指向Lambda代码目录即可:
Code.from_asset("./lambda")
完整的Function定义示例:
from aws_cdk import aws_lambda as _lambda class RawDataStack(core.Stack): ... handler = _lambda.Function(self, "initial-load-lambda", runtime=_lambda.Runtime.PYTHON_3_8, code=_lambda.Code.from_asset("./lambda"), handler="test.lambda_handler", environment={"BUCKET": raw_bucket.bucket_name})
其他可选优化方案
- 如果不想把第三方仓库代码复制到当前仓库,可以将
3rdPartyRepo的Python代码打包为Lambda层,在CDK中先定义层资源,再在Function配置中关联该层,此时code参数只需要指向你自己的入口文件目录即可 - 如果依赖较多,推荐使用
@aws-cdk/aws-lambda-python-alpha模块的PythonFunction构造,它会自动安装requirements.txt中的依赖,你可以将3rdPartyRepo发布为内部私有PyPI包,直接加入requirements.txt即可,无需手动管理文件同步 - 如果通过CI/CD部署,可以在部署流程中先克隆
3rdPartyRepo,将需要的代码和你的入口文件打包为zip包,code参数改为Code.from_asset("./lambda-package.zip")即可
内容的提问来源于stack exchange,提问作者shamwow
相关产品推荐
相关产品推荐

