使用@aws/cdk的CfnFunction创建Lambda上传Python代码异常咨询
问题根因
lambda_.CfnFunction.CodeProperty的zip_file字段接收的是代码本身的字符串/二进制内容,而非本地代码文件或压缩包的存储路径。你直接传入路径字符串时,CDK会将这段字符串作为代码内容直接写入Lambda的index.py文件,因此会出现你观察到的现象。
解决方案
分场景选择对应的处理方式:
- 场景1:代码逻辑简单,仅需单文件短代码
可以直接将代码内容赋值给zip_file,该方式仅支持4KB以内的单文件Python代码:code_ = lambda_.CfnFunction.CodeProperty( zip_file = """
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps("execute success")
}
"""
)
- 场景2:使用本地已打包好的zip代码包 先读取本地zip文件的二进制内容,转base64编码后传入`zip_file`: ```python import base64 with open("./function-code/db-snapshot/index.zip", "rb") as f: zip_content = base64.b64encode(f.read()).decode("utf-8") code_ = lambda_.CfnFunction.CodeProperty( zip_file = zip_content )
- 场景3:无特殊需求必须使用底层
CfnFunction
更建议使用CDK封装的高阶lambda_.Function构造器,它会自动完成本地代码打包、上传S3、关联Lambda的全流程,无需手动处理文件读取、编码等操作:from aws_cdk import aws_lambda as lambda_ db_snapshot_lambda = lambda_.Function( self, "DbSnapshotLambda", runtime = lambda_.Runtime.PYTHON_3_10, handler = "index.lambda_handler", # 直接传入本地代码目录路径即可 code = lambda_.Code.from_asset("./function-code/db-snapshot") )
内容的提问来源于stack exchange,提问作者AJR
相关产品推荐
相关产品推荐

