如何在Terraform中创建归档文件?及配置冲突错误解决
解决Terraform archive_file冲突错误&归档创建指南
首先,咱们先搞清楚你遇到的错误原因:在Terraform v0.9.11的archive_file数据源中,顶层的source_dir参数和source块(以及关联的source_content_filename)是互斥的,不能同时使用;而且你重复定义了两次source_dir,Terraform只会保留最后一个,这显然不是你想要的同时打包两个目录的效果。
修正后的代码
要同时打包lambda/etc、lambda/node_modules目录,再加上动态生成的config.json,你需要用多个source块来分别处理每个来源,这样就不会有冲突了:
data "archive_file" "lambdazip" { type = "zip" output_path = "lambda_launcher.zip" # 打包lambda/etc目录下的所有内容 source { source_dir = "lambda/etc" } # 打包lambda/node_modules目录下的所有内容 source { source_dir = "lambda/node_modules" } # 添加动态生成的config.json文件 source { content = "${data.template_file.config_json.rendered}" filename = "config.json" } }
Terraform v0.9.11创建归档文件的正确方式
根据你的Terraform版本,这里整理几种常用的归档创建场景:
1. 归档单个目录
如果只需要打包一个目录的所有内容,直接用顶层的source_dir参数即可:
data "archive_file" "single_dir_zip" { type = "zip" output_path = "my_archive.zip" source_dir = "path/to/your/directory" }
2. 归档单个文件
要打包单个文件,使用source_file参数:
data "archive_file" "single_file_zip" { type = "zip" output_path = "single_file.zip" source_file = "path/to/your/file.txt" }
3. 混合多种来源(目录+文件+动态内容)
当需要同时打包多个目录、单个文件,或者动态生成的内容时,必须使用多个source块,每个块对应一个来源:
- 每个
source块可以选择source_dir(目录)、source_file(单个文件),或者content+filename(动态生成的文件) - 注意:绝对不能在顶层同时使用
source_dir/source_file和source块,否则会触发冲突错误
4. 其他注意事项
- 确保
output_path指定的输出目录已经存在,否则Terraform会报错 - 归档类型支持
zip、tar.gz、tar.bz2等,只需修改type参数即可(比如type = "tar.gz")
内容的提问来源于stack exchange,提问作者Know Nothing
相关产品推荐
相关产品推荐

