使用AWSCC Terraform Provider部署Lambda时文件结构异常求助
解决AWSCC Terraform Provider部署Lambda包结构异常的问题
核心原因
AWSCC Provider对Lambda部署包的路径要求和传统AWS Provider存在差异:AWSCC要求zip包内直接包含代码文件(不能嵌套在子目录中),如果打包时误将当前目录(而非目录内的文件)加入zip,就会出现控制台显示的结构异常。
解决办法
1. 手动修正打包方式
在包含main.py的目录下,执行精准打包命令,确保zip内仅存在main.py文件:
zip lambda_function_payload.zip main.py
避免使用zip -r lambda_function_payload.zip .这类递归打包命令,否则会将当前目录的所有内容(包括隐藏文件、子目录)打包进去,导致AWSCC解析异常。
2. 用Terraform资源自动生成合规包
在main.tf中添加archive_file资源,让Terraform自动生成符合要求的zip包,避免手动打包出错:
resource "archive_file" "lambda_zip" { type = "zip" source_file = "${path.module}/main.py" output_path = "${path.module}/lambda_function_payload.zip" } resource "awscc_lambda_function" "example" { function_name = "example-lambda" runtime = "python3.12" handler = "main.lambda_handler" role = aws_iam_role.lambda_role.arn code { zip_file = filebase64(archive_file.lambda_zip.output_path) } }
3. 替代方案:沿用AWS Provider
如果AWSCC的适配问题难以快速排查,可继续使用兼容性更成熟的AWS Provider部署,它对打包格式的容错性更强:
resource "aws_lambda_function" "example" { filename = "lambda_function_payload.zip" function_name = "example-lambda" role = aws_iam_role.lambda_role.arn handler = "main.lambda_handler" runtime = "python3.12" }
验证方式
部署完成后,在Lambda控制台的「代码」标签页确认能直接看到main.py文件,而非嵌套在某个子目录下。若显示目录结构,说明打包方式错误,需重新打包。
内容的提问来源于stack exchange,提问作者cloudtech
相关产品推荐
相关产品推荐

