CloudFormation Package上传哈希而非Zip:Serverless API部署问题求助
我之前也碰到过一模一样的问题,折腾了好一会儿才梳理出几个可行的排查方向,你可以逐一试试:
检查CodeUri指向的目录结构是否正确
很多时候这个问题是因为CodeUri指向的目录没有直接包含Lambda的入口文件,而是嵌套了一层子目录。比如你的代码实际在/home/user/code/lambdafunction/src/里,但你把CodeUri设为了/home/user/code/lambdafunction,这时候package命令会把整个父目录打包,而不是里面的代码文件,最终生成的就不是预期的Zip包,而是目录的哈希值。
解决方法:确保CodeUri直接指向包含index.js(或你的Lambda入口文件)的那个目录。排除不必要的文件或目录
如果你的Lambda目录里有node_modules、.git这类大文件或隐藏目录,可能会干扰package命令的正常打包流程。你可以通过两种方式排除这些内容:
一是在CloudFormation模板里给函数添加Metadata配置:MyLambdaFunction: Type: AWS::Serverless::Function Properties: CodeUri: /home/user/code/lambdafunction Handler: index.handler Runtime: nodejs18.x Metadata: AWS::Serverless::Function: Exclude: - .git/** - node_modules/**二是在执行package命令时加上
--exclude参数:aws cloudformation package --template-file template.yaml --s3-bucket my-bucket-name --output-template-file packaged-template.yaml --exclude ".git/**" --exclude "node_modules/**"更新AWS CLI和SAM CLI到最新版本
旧版本的CLI工具可能存在打包逻辑的bug,导致生成哈希而不是Zip包。建议更新到最新版:# 更新AWS CLI v2 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install --update # 更新SAM CLI pip install --upgrade aws-sam-cli验证本地目录的权限和文件完整性
确保执行package命令的用户对CodeUri目录有完整的读权限,如果某些文件无法被读取,打包流程会异常。你可以先手动打包测试:zip -r test-lambda.zip /home/user/code/lambdafunction/如果手动打包能生成正常的Zip文件,那问题大概率出在CLI工具或模板配置上;如果手动打包也失败,那就检查目录里的文件是否损坏或权限不足。
检查CloudFormation模板的语法
仔细核对模板里的AWS::Serverless::Function资源配置,比如CodeUri的拼写是否正确(大小写敏感,不能写成CodeURI),其他属性是否有语法错误,这些小问题也可能导致打包流程异常。
内容的提问来源于stack exchange,提问作者Walker

