使用AWS SAM部署AWS Lambda函数时,如何配置以忽略requirements.txt仅部署源码?
解决方案:在AWS SAM中忽略requirements.txt仅部署函数源码
当然可行!针对你这种已经把依赖打包到Layer、只想快速部署函数源码的场景,AWS SAM提供了几种直接的实现方式,下面一步步来:
方法1:通过SAM模板的Metadata自定义构建行为
这是最推荐的方式,能精准控制构建过程,跳过依赖安装步骤。
步骤1:修改template.yaml配置
在你的Lambda Function资源中,添加Metadata字段,指定自定义的构建方法(比如用makefile),同时关联好你的依赖Layer:
Resources: YourLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./your-function-src/ # 指向你的函数源码目录 Handler: main.lambda_handler Runtime: python3.11 Layers: - !Ref YourDependencyLayer # 关联已上传的依赖Layer Metadata: BuildMethod: makefile # 指定用makefile来处理构建
步骤2:添加自定义Makefile
在你的函数源码目录(比如your-function-src/)下创建一个名为Makefile的文件,内容只负责复制源码到构建目录,完全跳过依赖安装:
build-YourLambdaFunction: cp -r ./* $(ARTIFACTS_DIR)/
这里的build-YourLambdaFunction要和你模板里的函数资源名称对应,这样SAM构建时会执行这个命令,只复制源码。
方法2:直接跳过构建步骤(简单但需谨慎)
如果你的源码已经是可以直接部署的状态(不需要任何编译或预处理),可以直接在模板中设置SamBuildPolicy: IgnoreBuild来完全跳过构建过程:
Resources: YourLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./your-function-src/ Handler: main.lambda_handler Runtime: python3.11 Layers: - !Ref YourDependencyLayer Metadata: SamBuildPolicy: IgnoreBuild: true
这种方式最简单,但要确保CodeUri目录下的代码已经是符合Lambda运行要求的,没有任何需要构建的内容。
注意事项
- 确认你的依赖Layer的目录结构正确:对于Python运行时,Layer中的依赖需要放在
python/lib/pythonX.X/site-packages/目录下(X.X对应你的Python版本),这样Lambda才能正确加载。 - 本地测试时,可以用
sam local invoke验证函数是否能正常调用Layer中的依赖,避免部署后出现依赖找不到的问题。
内容的提问来源于stack exchange,提问作者Mate Bersenadze
相关产品推荐
相关产品推荐

