通过Terraform在GitLab中为AWS Lambda生成Zip文件失败如何解决
问题解决方法
核心原因
报错的本质是Terraform内置相对路径默认相对于执行terraform命令的工作目录,而非tf配置文件所在目录,CI流水线执行命令的工作目录和本地测试不一致时,就会出现zip包生成路径和读取路径不匹配的问题,也有可能是未声明archive provider导致zip包根本未生成。
具体修复步骤
- 第一步:统一路径规则,使用Terraform内置变量
${path.module}固定路径基准,该变量永远指向当前.tf文件所在目录,修改你的lambda.tf代码如下:
data "archive_file" "lambda" { type = "zip" source_file = "${path.module}/../src/lambda_function.py" output_path = "${path.module}/lambda_function.zip" } resource "aws_lambda_function" "automation-lambda" { filename = data.archive_file.lambda.output_path description = "Creating lambda" function_name = "lambda_fx" role = "xxxxxxxxxxxxx" handler = "lambda_function.lambda_handler" memory_size = 128 timeout = 300 source_code_hash = data.archive_file.lambda.output_base64sha256 runtime = "python3.7" }
- 第二步:声明archive provider依赖,确保CI环境能正确执行打包动作,在Terraform配置的版本声明块中加入archive provider:
terraform { required_providers { archive = { source = "hashicorp/archive" version = "~> 2.4" } # 你原来的aws provider声明保留即可 } }
- 第三步:调整CI执行命令的工作目录,要么cd到terraform目录后再执行
terraform init/apply,要么在根目录执行时带上-chdir参数:terraform -chdir=terraform init、terraform -chdir=terraform apply。
可选排查手段
如果修改后依然报错,可以在CI流水线的Terraform执行步骤前增加目录校验命令,确认路径结构符合预期:pwd && ls -R ./src ./terraform
内容的提问来源于stack exchange,提问作者Reema
相关产品推荐
相关产品推荐

